На данный момент лучшим решением является проверка транзакций IAP с использованием внешнего сервера, а затем отправка обратно своего рода ключа, специфичного для устройства, чтобы разблокировать платный элемент, который может быть сгенерирован только на этом сервере. Это не пуленепробиваемый, но он должен сделать ваше приложение очень устойчивым к любой системе взлома IAP общего назначения; кому-то, кто хочет взломать ваше приложение, в значительной степени придется разработать взломщик специально для него. (что гораздо сложнее, намного недоступнее большинству людей, использующих IAP Cracker)
Вот что вам в основном нужно сделать:
- Создайте свое решение для безопасности в приложении; своего рода уникальный ключ, который разблокирует вашу добавленную функциональность. Если добавленная функциональность принимает форму файла данных, то это может быть ключ шифрования для расшифровки этого файла, если он весь в коде, то это немного сложнее, но существует множество творческих решений (например, зашифрованные строковые константы). Что бы это ни было, оно должно полагаться или проверять наличие некоторого фрагмента данных, которые он получит с вашего веб-сервера.
- Измените код обработки IAP, чтобы при просмотре транзакции он отправлял сведения об этой транзакции на ваш веб-сервер и возвращал уникальный ключ, необходимый на шаге 1.
- Напишите на своем веб-сервере простой сценарий, который принимает детали транзакции, проверяет их в Apple (подробности о том, как работает проверка квитанций, см. В документации для разработчиков) и при успешной проверке возвращает ключ с шага. 1.
(см. Текст после РЕДАКТИРОВАНИЯ ниже для дополнительной проверки, которую вам нужно сделать сейчас на шаге 3)
В вашем случае, поскольку ваше приложение уже взломано и вы пытаетесь деактивировать людей, которые незаконно получили ваш элемент IAP, вы добавили бы эту функциональность в новую версию вашего приложения, а затем сначала вызвали restoreCompletedTransactions время запуска новой версии для повторной проверки / повторной активации покупок для законных пользователей и блокирования всех остальных.
Я должен добавить, однако, что это ЛОТ работы - нам потребовалось пару недель времени программиста, чтобы заставить его работать гладко, хотя теперь есть открытый код с открытым исходным кодом, который будет обрабатывать большинство шагов 2 и 3 для вас. Для этого шага реактивации также предусмотрены расходы на поддержку и PR - некоторые люди неизбежно будут менять учетные записи iTunes или не будут иметь подключения к Интернету или чего-то в этом роде, и им, вероятно, будет довольно не по себе, даже если они ненадолго потеряют доступ к тому, за что они законно заплатили .
Вам нужно взвесить, действительно ли стоит потратить на это время, когда взломать только пользователи джейлбрейка (так что около 90% ваших потенциальных клиентов не пострадали), и большинство людей, устанавливающих его, вряд ли заплатят для вашего приложения в любом случае; не пугайтесь огромного количества пользователей, взламывающих ваше приложение, многие люди с удовольствием загрузят что-то бесплатно, даже если бы никогда не заплатили за это. Возможно, вам лучше было бы уделить время улучшениям, которые приносят пользу законным пользователям (и побуждают большее количество из них покупать ваше приложение).
РЕДАКТИРОВАТЬ Год спустя это все еще (в основном) точно, но чтобы справиться с объявленным сегодня новым взломом, который перехватывает и затем повторно отправляет подлинные квитанции, теперь на сервере требуется немного больше работы боковая сторона. (к счастью, если у вас уже настроен сервер проверки, вы сможете сделать это без обновления приложения) Два новых требования:
1) Убедитесь, что идентификаторы продуктов (как идентификатора приложения, так и идентификатора продукта IAP) в расшифрованном чеке, который вы получаете с сервера Apple, действительно соответствуют продукту, который приобретает пользователь.
2) Убедитесь, что идентификатор транзакции в квитанции (или идентификатор транзакции восстановления для квитанции о восстановлении) никогда не использовался ранее, ведя журнал ранее использованных идентификаторов транзакции.
Даже с учетом того, что взлом IAP теперь доступен не взломанным пользователям, я хочу сказать, что основная идея заключается в том, что это может быть больше проблем, чем стоит - чтобы сократить количество времени, которое вы потратите на внедрение и поддержание совершенно неинтересного партию кода, вам нужно было бы получить МНОГО дополнительных продаж от людей, которые, в конце концов, были настолько склонны платить за ваш продукт, что были готовы массово скомпрометировать безопасность своего iPhone, чтобы избежать этого.