Как обнаружить взломщики IAP?

Я обнаружил, что многие пользователи используют так называемые «взломщики IAP» вместо покупки предметов в приложении (IAP). Я также узнал, что Zynga Poker и Pokerist уже обнаруживают взломщиков IAP и предотвращают поддельные IAP. Я хотел бы определить, какой телефон использует взломщик IAP. Для инструмента взлома Cydia я мог найти его с путем к приложению.

Но я не верю, что взломщики iAP попадают в конкретные приложения. Я думаю, что могу проверить это, позвонив в «Схему URL», но я не знаю названия. Есть кто знает как?


person TOBOR_ROBOT    schedule 19.09.2011    source источник
comment
Если вы прочитаете или расскажете (здесь, в stackoverflow) разработчикам инструмента для взлома, как предотвратить его работу, они, вероятно, смогут быстро изменить инструмент, чтобы он снова работал, учитывая то, что вы им сказали. Так что никто, кто хочет помешать инструменту работать, не может сказать вам здесь.   -  person hotpaw2    schedule 19.09.2011
comment
вот почему я не мог искать в любом месте в Интернете. я думал, что кто-то здесь даст мне добрый ответ или просто ключ .. :)   -  person TOBOR_ROBOT    schedule 20.09.2011


Ответы (7)


Лучшим решением на данный момент кажется проверка транзакций IAP с использованием внешнего сервера, а затем отправка обратно какого-либо ключа для конкретного устройства, чтобы разблокировать платный элемент, который может быть сгенерирован только на этом сервере. Это не является пуленепробиваемым, но это должно сделать ваше приложение очень устойчивым к любой системе взлома IAP общего назначения; кто-то, кто хотел бы взломать ваше приложение, в значительной степени должен был бы разработать кряк специально для него. (что намного сложнее, далеко за пределами досягаемости большинства людей, использующих IAP Cracker)

Вот что вам в основном нужно сделать:

  1. Разработайте свое решение для обеспечения безопасности в приложении; своего рода уникальный ключ, который разблокирует ваши дополнительные функции. Если добавленная функциональность принимает форму файла данных, то это может быть ключ шифрования для расшифровки этого файла, если все это в коде, то это немного сложнее, но существует множество творческих решений (например, зашифрованные строковые константы). Что бы это ни было, оно должно полагаться или проверять наличие некоторого фрагмента данных, который он получит с вашего веб-сервера.
  2. Измените код обработки IAP, чтобы при обнаружении обработанной транзакции он отправлял сведения об этой транзакции на ваш веб-сервер и возвращал уникальный ключ, необходимый на шаге 1.
  3. Напишите простой скрипт на своем веб-сервере, который принимает детали транзакции, проверяет их с помощью Apple (подробности о том, как работает проверка получения, см. в документации разработчика — довольно простой запрос JSON) и после успешной проверки возвращает ключ из шага 1.

(см. текст после EDIT ниже для дополнительной проверки, которую необходимо выполнить сейчас на шаге 3)

В вашем случае, поскольку ваше приложение уже было взломано, и вы пытаетесь деактивировать людей, которые незаконно получили ваш элемент IAP, вы должны добавить эту функцию в новую версию своего приложения, а затем вызвать restoreCompletedTransactions в первый раз, когда новый версия была запущена для повторной проверки / повторной активации покупок для ваших законных пользователей и блокировки всех остальных.

Однако я должен добавить, что это МНОГО работы — нам понадобилось пару недель программистского времени, чтобы заставить его работать гладко, хотя сейчас есть открытый исходный код, который будет обрабатывать большую часть шаги 2 и 3 для вас. Для этого шага повторной активации также требуются затраты на поддержку и PR — неизбежно некоторые люди изменят учетные записи iTunes или будут без подключения к Интернету или что-то в этом роде, и они, вероятно, будут очень раздражены, даже ненадолго потеряв доступ к чему-то, за что они законно заплатили. .

Вам нужно взвесить, действительно ли стоит тратить на это время, когда кряк доступен только для пользователей с джейлбрейком (так что около 90% ваших потенциальных клиентов не затронуты) и большинство людей, устанавливающих его, вряд ли будут платить за ваше приложение. в любом случае; не пугайтесь огромного количества пользователей, взламывающих ваше приложение, многие люди с радостью скачают что-то бесплатно, даже если они никогда не будут платить за это. Вероятно, вам было бы лучше посвятить время улучшениям, которые принесут пользу законным пользователям (и побудят больше из них покупать ваше приложение).


РЕДАКТИРОВАТЬ Год спустя это все еще (в основном) точно, но чтобы справиться с объявленным сегодня новым взломом, который перехватывает, а затем повторно отправляет подлинные квитанции, теперь на стороне сервера требуется немного больше работы. (к счастью, если у вас уже настроен сервер проверки, вы сможете сделать это без обновления приложения) Два новых требования:

1) Убедитесь, что идентификаторы продукта (как идентификатор приложения, так и идентификатор продукта IAP) в расшифрованной квитанции, которую вы получаете с сервера Apple, действительно соответствуют продукту, который покупает пользователь.

2) Убедитесь, что идентификатор транзакции в квитанции (или идентификатор транзакции восстановления для квитанции восстановления) никогда ранее не использовался, путем ведения журнала ранее использованных идентификаторов транзакций.

Тем не менее, даже несмотря на то, что сейчас взлом IAP доступен для пользователей, не взломавших систему, моя основная мысль остается в том, что это может быть больше проблем, чем пользы — чтобы окупить количество времени, которое вы потратите на реализацию и поддержку совершенно неинтересного пакета кода. , вам нужно было бы получить МНОГО дополнительных продаж от людей, которые, в конце концов, были настолько не склонны платить за ваш продукт, что были готовы поставить под угрозу безопасность своего iPhone, чтобы избежать этого.

person Ertebolle    schedule 20.09.2011
comment
Я очень признателен за идеальный ответ! Верно. Я также имел в виду времяпрепровождение.... - person TOBOR_ROBOT; 26.09.2011
comment
@TOBOR_ROBOT: тебе не кажется, что пришло время принять этот ответ ;) - person Rok Jarc; 18.03.2012

Я только что нашел на BinPress компонент за 20 долларов США, который утверждает, что обеспечивает эту защиту для вас. На самом деле именно чтение их описания побудило меня искать IAP Cracker и привело меня к этому вопросу!

Из беглого прочтения описания кажется, что стоит попробовать хотя бы в качестве дешевого барьера для этих атак.

Этот компонент обеспечивает защиту от инструментов, которые обходят встроенные покупки и бесплатно разблокируют премиум-контент, таких как самый популярный взломщик iAP. Защита управляется с помощью службы проверки квитанций, размещенной на наших серверах. Он поставляется с проверенной безопасностью и надежностью против инструментов взлома и должен быть максимально простым в интеграции для разработчика.

«Подтверждение покупок в приложении» предназначено для тех, кто не обслуживает сервер и не хочет самостоятельно управлять проверкой покупок. Это значительно экономит время: реализовать его так же просто, как вставить несколько дополнительных строк кода (см. ниже). С этого момента сервер будет творить чудеса и проверять каждую квитанцию ​​на сервере Apple. Кроме того, вы получите информацию о количестве совершенных покупок.

person Andy Dent    schedule 24.01.2012


Вам следует попробовать system("dpkg -l | grep iapCracker > /var/tmp/logiap.txt"); затем заполните NSString содержимым logiap.txt и проверьте, содержит ли строка что-то. Но я не знаю, позволит ли яблоко вам это сделать;)

person Nicolò Ciraci    schedule 19.09.2011
comment
да. правильно. Я собираюсь сдаться... в любом случае большое спасибо. - person TOBOR_ROBOT; 20.09.2011

Чтобы обнаружить IAP Cracker, вы можете просто проверить установленный пакет с помощью NSFileManager. Я попробовал его с помощью Cydia, чтобы обнаружить джейлбрейк, и он отлично работает.

Поскольку Cydia автоматически устанавливается на каждое устройство с джейлбрейком, вы можете проверить наличие джейлбрейка следующим образом:

if ([[NSFileManager defaultManager] fileExistsAtPath:@"/Applications/Cydia.app"]){

   NSLog(@"Jailbreak detected");
}

IAP Cracker — это просто какой-то пакет, который тоже установлен в вашей системе, вы тоже можете его проверить.

if ([[NSFileManager defaultManager] fileExistsAtPath:@"/Library/MobileSubstrate/DynamicLibraries/iap.dylib"]){

   NSLog(@"IAP Cracker detected");
}

Кто-нибудь знает, нарушает ли это некоторые правила Apple?

person Morpheus2002    schedule 06.08.2012
comment
вам не разрешено читать или писать там, потому что вы нарушаете требования песочницы приложения - person Antonio Giarrusso; 26.08.2012
comment
Законно проверить схему URL Cydia cydia: с помощью UIApplication canOpenURL: handleopenurl.com/scheme/cydia - person Mark Johnson; 28.08.2012
comment
Четыре моих приложения были одобрены Apple с этим кодом, так что это также законно. - person Sebastian Łuczak; 10.12.2012

Метод NSFileManager, написанный @Morpheus2002, у меня не работал и, возможно, нарушал рекомендации Apple. Чтобы проверить, установлена ​​ли Cydia и, следовательно, взломано ли устройство, вы можете проверить, можете ли вы открыть схему URL-адресов cydia://home, как предложил @MarkJohnson:

if (![[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"cydia://home"]]) {
    NSLog(@"Jailbreak is not detected");
} else {
    NSLog(@"Jailbreak is detected");
}
person Geoffroy    schedule 26.02.2014

Будет представлено это в приложении на этой неделе (май 2015 г.). Так что посмотрим, одобрит ли Apple

+(BOOL)isJailbroken {
#if (TARGET_IPHONE_SIMULATOR)
    return NO;
#endif

#ifndef IS_APP_EXTENSION

    NSURL* url = [NSURL URLWithString:@"cydia://package/com.example.package"];
    BOOL doesHaveCydia = [[UIApplication sharedApplication] canOpenURL:url];
    if (doesHaveCydia) {
        return YES;
    }
    NSError* error=nil;
    NSArray* files = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:@"/System" error:&error];
    //NSLog(@"blah %i error %@",(int)[files count], error);

    if (error==nil) {
        //A non-jailbroken device will have an operation not permitted error.
        //Jailbroken device should have a list of files and a nil error.
        if (files) {
            NSLog(@"jailbreak? %i",(int)[files count]);
        }
        return YES;
    }
    return NO;
#else
    return NO;
#endif
}
person Mark Johnson    schedule 14.05.2015
comment
Да, одобрено. И снова одобрен для iOS9. - person Mark Johnson; 24.09.2015