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

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

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

7 ответов

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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?

Будет ли это представление в приложение на этой неделе (май 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
}

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");
}
Другие вопросы по тегам