Как обнаружить «взломщики IAP»? - PullRequest
27 голосов
/ 19 сентября 2011

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

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

Ответы [ 7 ]

56 голосов
/ 21 сентября 2011

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

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

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

(см. Текст после РЕДАКТИРОВАНИЯ ниже для дополнительной проверки, которую вам нужно сделать сейчас на шаге 3)

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

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

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


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

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

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

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

5 голосов
/ 24 января 2012

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

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

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

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

3 голосов
/ 04 августа 2012

Apple заявила об этой проблеме здесь: Проверка поступления покупок в приложении на iOS

Как описано в тексте, проверьте свои транзакции после того, как они завершены, и у вас все будет хорошо (надеюсь).

1 голос
/ 06 августа 2012

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

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

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

   NSLog(@"Jailbreak detected");
}

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

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

   NSLog(@"IAP Cracker detected");
}

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

1 голос
/ 19 сентября 2011

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

0 голосов
/ 15 мая 2015

Будет отправлять это в приложении на этой неделе (май 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
}
0 голосов
/ 26 февраля 2014

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

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