Определение того, является ли iPhone взломан Jail программно

Как вы определяете (программно), если iPhone / iPod:

  1. Тюрьма сломана
  2. Запуск взломанной копии вашего программного обеспечения

Pinch Media может определить, сломан ли телефон или запущенное программное обеспечение взломано, знает ли кто-нибудь, как они это делают ? Есть ли библиотеки?


person Richard Stelling    schedule 16.07.2009    source источник
comment
Apple знает, как это определить: p   -  person JoshJordan    schedule 17.07.2009
comment
См. Также: stackoverflow.com/questions/413242/   -  person e.James    schedule 21.07.2009
comment
Если вас интересует этот вопрос, почему бы не поддержать предложение Area 51 для взлома тюрьмы Сайт обмена стеками   -  person Richard Stelling    schedule 02.01.2012
comment
Возможный дубликат Как определить, что на взломанном телефоне запущено приложение iOS?   -  person Cœur    schedule 03.11.2017


Ответы (4)


Вот один из способов определить, было ли взломано ваше приложение. .

Вкратце: взлом обычно требует изменения Info.plist. Поскольку это обычный файл, к которому у вас есть доступ, такие изменения довольно легко определить.

person zakovyrya    schedule 17.07.2009
comment
К сожалению, есть обходной путь, который нарушает этот механизм обнаружения. После установки приложения ключ SignerIdentity больше не нужен, поэтому взломщик может просто подключиться по ssh к своему взломанному телефону и отредактировать список, чтобы удалить его. - person Lily Ballard; 25.07.2009
comment
@KevinBallard есть ли у вас какие-нибудь рекомендации по обнаружению распространенных джейлбрейков в 2017 году? - person Cœur; 03.11.2017
comment
@ Cœur Нет, я не смотрел на это с тех пор, как написал этот комментарий. - person Lily Ballard; 03.11.2017

Обнаружить взломанный телефон так же просто, как проверить наличие папки /private/var/lib/apt/. Хотя это не определяет пользователей, использующих только установщик, к настоящему времени большинство из них установили Cydia, Icy или RockYourPhone (все из которых используют apt)

Самый простой способ обнаружить пиратских пользователей - это проверить наличие SignerIdentity ключа в Info.plist вашего приложения. Поскольку продвинутые взломщики могут легко найти стандартные [[[NSBundle mainBundle] infoDictionary] objectForKey: @"SignerIdentity"] проверки, лучше всего скрыть эти вызовы с помощью среды выполнения Objective C, доступной через #import <objc/runtime.h>, или использовать альтернативные эквиваленты.

person rpetrich    schedule 21.07.2009

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

if ([[[NSBundle mainBundle] infoDictionary] objectForKey: @"SignerIdentity"] != nil) {
  // Jailbroken
}

ОДНАКО человек, взломавший ваше приложение, может изменить вашу программу шестнадцатеричным кодом и, как таковой, он может отредактировать строку @ "SignerIdentity" так, чтобы она читалась как @ "siNGeridentity" или что-то еще, что вернет nil, и, таким образом, пройдет.

Поэтому, если вы воспользуетесь этим (или любыми другими предложениями из http://thwart-ipa-cracks.blogspot.com/2008/11/detection.html):

  • Не ждите, что это будет работать вечно
  • Не используйте эту информацию, чтобы каким-либо образом нарушить / помешать вашему приложению (иначе у них будет причина для его редактирования, чтобы ваше приложение не узнало, что оно взломано)
  • Вероятно, разумно скрыть этот фрагмент кода. Например, вы можете поместить обратную строку в кодировке base64 в свой код, а затем декодировать ее в приложении, изменив процесс.
  • Подтвердите свою проверку позже в своем коде (например, когда я сказал SignerIdentity, действительно ли он сказал SignerIdentity или siNGeridentity?)
  • Не рассказывайте людям на общедоступных веб-сайтах, таких как stackoverflow, как вы это делаете.
  • Имейте в виду, что это всего лишь руководство, и оно не является надежным (и не защищенным от взлома!) - большая мощность влечет за собой большую ответственность.
person Benjie    schedule 21.07.2009
comment
Таким образом, это проверяет SignerIdentity в вашем комплекте приложений, но как насчет случая, когда приложение не взломано или что-то еще, кроме устройства JailBroken, как вы это обнаружите? - person Edward Ashak; 02.11.2011
comment
Задайте это как вопрос по SO, и кто-нибудь ответит :) - person Benjie; 03.11.2011

Чтобы расширить комментарии Йонеля и Бенджи выше:

1) метод Лэндона Фуллера, основанный на проверке шифрования, ссылка на которую дана yonel выше, кажется, единственный, кто еще не побежден автоматизированными инструментами взлома. Я бы не стал особо беспокоиться о том, что Apple изменит состояние заголовка LC_ENCRYPTION_INFO в ближайшее время. Похоже, что это имеет некоторые непредсказуемые эффекты на взломанных iPhone (даже когда пользователь купил копию ...)

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

2) В дополнение к комментарию Бенджи re. обфускация (абсолютная необходимость при работе с любыми строковыми значениями в вашем антипиратском коде): аналогичный, но, возможно, даже более простой способ - всегда проверять солёную хешированную версию ценность, которую вы ищете. Например (даже если эта проверка больше не эффективна), вы должны проверять имя каждого ключа MainBundle как md5 (keyName + "некоторая секретная соль") с соответствующей константой ... Скорее простой, но обязательно отразите любую попытку найти нить.

Конечно, это требует, чтобы вы могли косвенно запрашивать значение, которое вы хотите сравнить (например, просматривая массив, содержащий его). Но так бывает чаще всего.

person Community    schedule 18.03.2010
comment
Работоспособен ли метод Лэндона Фуллера в настоящее время с iOS 7? - person Basil Bourque; 30.05.2014