Подтвердить что ты не робот

Как определить "крекеры IAP"?

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

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


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

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

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

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

Ответ 2

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

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

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

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

Ответ 4

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

Ответ 5

Чтобы обнаружить 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?

Ответ 6

Метод 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");
}

Ответ 7

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