Как определить (программно), является ли iPhone / iPod:
- Тюрьма сломана
- Запуск взломанной копии вашего программного обеспечения
Pinch Media может определить, сломан ли телефон или запущено программное обеспечение. Кто-нибудь знает, как они это делают? Есть ли библиотеки?
iphone
objective-c
ios
cocoa-touch
jailbreak
Ричард Стеллинг
источник
источник
Ответы:
Вот один из способов определить, было ли ваше приложение взломано.
Вкратце: взлом обычно требует изменения Info.plist. Поскольку это обычный файл, к которому у вас есть доступ, такие изменения довольно легко определить.
источник
Обнаружить взломанный телефон так же просто, как проверить наличие
/private/var/lib/apt/
папки. Хотя это не определяет пользователей, использующих только установщик, к настоящему времени большинство из них установили Cydia, Icy или RockYourPhone (все они используют apt)Самый простой способ обнаружить пиратских пользователей - проверить наличие
SignerIdentity
ключа в вашем приложенииInfo.plist
. Поскольку продвинутые взломщики могут легко найти стандартные[[[NSBundle mainBundle] infoDictionary] objectForKey: @"SignerIdentity"]
проверки, лучше всего скрыть эти вызовы, используя среду выполнения Objective C, доступную через#import <objc/runtime.h>
или альтернативные эквиваленты.источник
Чтобы расширить ответ заковыря, вы можете использовать следующий код:
if ([[[NSBundle mainBundle] infoDictionary] objectForKey: @"SignerIdentity"] != nil) { // Jailbroken }
ОДНАКО лицо, взломавшее ваше приложение, может выполнить шестнадцатеричное редактирование вашей программы и, как таковое, может отредактировать строку @ "SignerIdentity" так, чтобы она читалась как @ "siNGeridentity" или что-то еще, что вернет nil, и таким образом пройдет.
Итак, если вы используете это (или любое другое предложение из http://thwart-ipa-cracks.blogspot.com/2008/11/detection.html ):
источник
Чтобы расширить комментарии Йонеля и Бенджи выше:
1) Метод Лэндона Фуллера, основанный на проверке шифрования, связанный выше yonel, кажется, единственный, который до сих пор не побежден автоматизированными инструментами взлома. Я бы не стал слишком беспокоиться о том, что Apple изменит состояние заголовка LC_ENCRYPTION_INFO в ближайшее время. Похоже, что это оказывает непредсказуемое влияние на взломанные айфоны (даже когда пользователь купил копию ...)
В любом случае, я бы не стал предпринимать никаких опрометчивых действий против пользователя на основе этого кода ...
2) В дополнение к комментарию Бенджи re. запутывания (абсолютная необходимость при решении любых строковых значений в борьбе с пиратством коды): подобная , но , возможно , еще более простым способом, чтобы всегда проверять подсоленную хешированную версию значения вы ищете. Например (даже если эта проверка больше не эффективна), вы должны проверять имя каждого ключа MainBundle как md5 (keyName + "некоторая секретная соль") с соответствующей константой ... Скорее базовый, но обязательно отразите любую попытку найти строка.
Конечно, это требует, чтобы вы могли косвенно запрашивать значение, которое вы хотите сравнить (например, просматривая массив, содержащий его). Но так бывает чаще всего.
источник