Определение, является ли iPhone Тюрьма, поврежденная Программно

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

Также примечание, что в математике термин аргумент намного более распространен и параметр обычно средства что-то очень отличающееся (хотя параметр в параметрическом уравнении по существу аргумент к двум или больше функциям).

78
задан Cœur 23 March 2017 в 15:47
поделиться

4 ответа

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

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

39
ответ дан 24 November 2019 в 10:40
поделиться

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

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

25
ответ дан 24 November 2019 в 10:40
поделиться

Это летняя стажировка? Если честно, если вы спросите меня, это больше похоже на крупный проект. Вы говорите, что запуск не связан с программным обеспечением? Кому пришла в голову эта идея? Имеют ли они какое-либо представление о (огромных) масштабах, которые на самом деле может повлечь за собой нечто подобное?

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

При этом, если нет действительно веской причины, Я бы, вероятно, сделал такую ​​вещь, как веб-сайт, а не настольное приложение. Настольные приложения во многих отношениях намного сложнее. Вам нужно написать код как для клиента, так и для сервера. Общение немного сложнее. Вы должны беспокоиться о проблемах поддержания состояния в нескольких приложениях, о том, как обрабатывать распространяемые обновления и т. Д.

Короче говоря, это большая работа. Даже веб-сайт - это большая работа, но многие из этих проблем решаются. Вы можете сделать это с помощью Java. Я, конечно, написал свою долю веб-сайтов на Java, но PHP мог бы быть намного проще.

Кроме того, разработка настольных компьютеров на Java - это, в общем, пытка. Swing (imho) испытанный и верный, но также невероятно болезненный для разработки. Другие настольные библиотеки (например, Netbeans RCP, Eclipse SWT) более современные, но имеют другие особенности.

Библиотеки удаленного взаимодействия рабочего стола включают такие вещи, как удаленное взаимодействие Spring, даже веб-службы и другие вещи, такие как Burlap. На стороне сервера я бы использовал либо Tomcat, либо сервер приложений (я предпочитаю Glassfish), сервлеты и Spring. Сохраняемость может быть реализована через Hibernate или Ibatis (или множество других опций).

Но, честно говоря, настольный вариант намного сложнее, чем веб-интерфейс. Вы, вероятно, сделаете намного больше быстрее, используя PHP + jQuery + MySQL.

Если вы делаете это, сделайте это как можно более простым. Постарайтесь определить абсолютный минимум, который вам нужно выполнить изначально, и сделайте это. Как только кто-то это получит, он будет лучше понимать, что для него работает, а что нет. По сути, легче уточнить то, что уже существует, чем определить то, чего нет.

даже веб-сервисы и другие вещи вроде Burlap. На стороне сервера я бы использовал либо Tomcat, либо сервер приложений (я предпочитаю Glassfish), сервлеты и Spring. Сохраняемость может быть реализована с помощью Hibernate или Ibatis (или множества других опций).

Но, честно говоря, настольный вариант намного сложнее, чем сетевой. Вы, вероятно, сделаете намного больше быстрее, используя PHP + jQuery + MySQL.

Если вы делаете это, сделайте это как можно более простым. Постарайтесь определить абсолютный минимум, который вам нужно выполнить изначально, и сделайте это. Как только кто-то это получит, он будет лучше понимать, что для него работает, а что нет. По сути, легче уточнить то, что уже существует, чем определить то, чего нет.

даже веб-сервисы и другие вещи вроде Burlap. На стороне сервера я бы использовал либо Tomcat, либо сервер приложений (я предпочитаю Glassfish), сервлеты и Spring. Сохраняемость может быть реализована через Hibernate или Ibatis (или множество других опций).

Но, честно говоря, настольный вариант намного сложнее, чем веб-интерфейс. Вы, вероятно, сделаете намного больше быстрее, используя PHP + jQuery + MySQL.

Если вы делаете это, сделайте это как можно более простым. Постарайтесь определить абсолютный минимум, который вам нужно выполнить изначально, и сделайте это. Как только кто-то это получит, он будет лучше понимать, что для него работает, а что нет. По сути, легче уточнить то, что уже существует, чем определить то, чего нет.

d использовать Tomcat или сервер приложений (я предпочитаю Glassfish), сервлеты и Spring. Сохраняемость может быть реализована с помощью Hibernate или Ibatis (или множества других опций).

Но, честно говоря, настольный вариант намного сложнее, чем сетевой. Вы, вероятно, сделаете намного больше быстрее, используя PHP + jQuery + MySQL.

Если вы делаете это, сделайте это как можно более простым. Постарайтесь определить абсолютный минимум, который вам нужно выполнить изначально, и сделайте это. Как только кто-то это получит, он будет лучше понимать, что для него работает, а что нет. По сути, легче уточнить то, что уже существует, чем определить то, чего нет.

d использовать Tomcat или сервер приложений (я предпочитаю Glassfish), сервлеты и Spring. Сохраняемость может быть реализована через Hibernate или Ibatis (или множество других опций).

Но, честно говоря, настольный вариант намного сложнее, чем веб-интерфейс. Вы, вероятно, сделаете намного больше быстрее, используя PHP + jQuery + MySQL.

Если вы делаете это, сделайте это как можно более простым. Постарайтесь определить абсолютный минимум, который вам нужно выполнить изначально, и сделайте это. Как только кто-то это получит, он будет лучше понимать, что для него работает, а что нет. По сути, легче уточнить то, что уже существует, чем определить то, чего нет.

Сохраняемость может быть реализована с помощью Hibernate или Ibatis (или множества других опций).

Но, честно говоря, настольный вариант намного сложнее, чем сетевой. Вы, вероятно, сделаете намного больше быстрее, используя PHP + jQuery + MySQL.

Если вы делаете это, сделайте это как можно более простым. Постарайтесь определить абсолютный минимум, который вам нужно выполнить изначально, и сделайте это. Как только кто-то это получит, он будет лучше понимать, что для него работает, а что нет. По сути, легче уточнить то, что уже существует, чем определить то, чего нет.

Сохраняемость может быть реализована через Hibernate или Ibatis (или множество других опций).

Но, честно говоря, настольный вариант намного сложнее, чем веб-интерфейс. Вы, вероятно, сделаете намного больше быстрее, используя PHP + jQuery + MySQL.

Если вы делаете это, сделайте это как можно более простым. Постарайтесь определить абсолютный минимум, который вам нужно выполнить изначально, и сделайте это. Как только кто-то это получит, он будет лучше понимать, что для него работает, а что нет. По сути, легче уточнить то, что уже существует, чем определить то, чего нет.

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

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

com / 2008/11 / detect.html ):

  • Не ожидайте, что это будет работать вечно
  • Не используйте эту информацию, чтобы каким-либо образом нарушить / помешать вашему приложению (иначе у них будет причина изменить его по шестнадцатеричной системе, чтобы ваше приложение не узнало, что оно взломано)
  • Вероятно, разумно скрыть этот фрагмент кода. Например, вы можете поместить в код перевернутую строку в кодировке base64, а затем декодировать ее в приложении, изменив процесс.
  • Подтвердите свою проверку позже в коде (например, когда я сказал SignerIdentity, действительно ли он сказал SignerIdentity или siNGeridentity?)
  • Не говорите людям на общедоступных веб-сайтах, таких как stackoverflow, как вы это делаете
  • Имейте в виду, что это всего лишь руководство и не является надежным (и не защищенным от взлома!) - с большой силой приходит большая ответственность.
10
ответ дан 24 November 2019 в 10:40
поделиться

Чтобы расширить комментарии yonel и Benjie, приведенные выше:

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

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

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

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

5
ответ дан 24 November 2019 в 10:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: