2016-02-03 11 views
-2

После того, как я посетил класс программирования, один из моих друзей показал мне приложение, которое не позволит ему пройти первый экран из-за его взломанного iPhone.Как точно определить наличие и/или отсутствие джейлбрейка в iOS?

С тех пор я был заинтригован тем, как приложение обнаружило джейлбрейк, не будучи заблокированным яблоком, и, будучи защитником от джейлбрейка, я был бесплодным, пытаясь найти надежный способ обнаружить jailbroken iOS, чтобы люди не обманывали, если бы я когда-либо решил выпустить игру в App Store.

Кто-нибудь знает о надежном методе (ых) для обнаружения состояния джейлбрейка устройства, которое нельзя легко обойти упомянутым устройством с взломом?

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

+1

Это очень старый вопрос, который задавался много раз, и имеет много разных подходов, которые развивались во времени с тех пор, как был выпущен первый iPhone SDK. Я считаю, что до сих пор не существует безупречного подхода, а, скорее, множество небольших тестов, которые вы можете выполнять, и они продолжают меняться по мере продвижения гонки вооружений между Apple и сообществом джейлбрейков. –

+0

Цель SO - ** не ** «делиться статьей», для чего нужны блоги. – zaph

+0

@zaph наоборот, если переполнение стека было *** не *** для обмена моими новообретенными знаниями в формате Q + A, которые используют все остальные, то почему у вас есть кнопка «ответить на свой вопрос» на вопрос страница вопросов? – DeveloperACE

ответ

2

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

Что вы хотите, это проверить, является ли игра законной версией в App Store. Но даже это может быть потенциально исправлено ребятами, которые встряхивают игры, чтобы их освободить ...

Вы можете проверить, зашифрован ли исполняемый файл в настоящий момент, что является хорошим способом узнать, было ли приложение пиратским, посмотрев на this answer.

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

Но нет абсолютно никакого способа полностью блокировать пиратство приложений.

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

+0

Спасибо за совет! Я буду помнить об этом ... – DeveloperACE

+0

99% времени это действительно не так, как это работает с приложениями iOS. Вы не взламываете или не пакаете файлы IPA (кроме случая 1%). Вместо этого вы джейлбрейк телефона и блокируете ОС от проверки вашего IPA. Это можно легко сделать с помощью инструмента cydia. Так или иначе, поскольку lap.felix сказал, что блокировка всех взломанных устройств заблокирует ваше приложение даже для законных пользователей, которые фактически приобрели ваше приложение из App Store (хотя их устройства взломаны) – sleepwalkerfx

+0

@sleepwalkerfx, в 99% случаев вы нарушаете файлы IPA что означает их дешифрование. Это нарушает подпись кода, поэтому вам нужно использовать инструмент cydia для отключения проверки IPA. IPAs зашифрованы с помощью идентификатора apple, который приобрел приложение. Вам нужно расшифровать их или каким-то образом получить этот идентификатор Apple. Как с магазинами приложений chineses, которые позволят вам устанавливать пиратские приложения даже на не-джейлбрейк-устройстве. Другим способом было бы отказаться от приложения с сертификатом разработчика. – creker

1

На днях я наткнулся на статью, содержащую точный ответ, который я искал.

От https://www.theiphonewiki.com/wiki/Bypassing_Jailbreak_Detection

Хотя существует бесчисленное множество способов приложения могут осуществить проверку на взломанных устройств, они, как правило, сводятся к следующему:

Наличие каталогов - Проверьте файловую систему путей, как /Applications/Cydia.app/ и /private/var/stash, среди нескольких других. Чаще всего они проверяются с использованием метода -(BOOL)fileExistsAtPath:(NSString*)path в NSFileManager, но более проницательные приложения любят использовать функции С более низкого уровня, такие как fopen(), stat(), или access().

Каталог разрешений - Проверьте права доступа к файлам Unix отдельных файлов и каталогов с использованием NSFileManager методов, а также функции C, как statfs(). У гораздо большего числа каталогов есть доступ на запись на джейлбрейк-устройстве, чем у одного, находящегося в тюрьме.

Процесс порождения - sandboxd не отрицает приложениям App Store возможность использовать fork(), popen(), или любые другие функции C для создания дочерних процессов на не взломанных устройствах. sandboxd явно отрицает процесс разлома на устройствах в тюрьме. если вы проверите возвращенный pid на fork(), ваше приложение сможет узнать, успешно ли оно разветвлено или нет, после чего он может определить состояние джейлбрейка устройства.

SSH петлевых соединения * - Из-за большой части джейлбрейкиутые устройства, которые имеют OpenSSH установлено, некоторые приложения будут пытаться подключиться к 127.0.0.1 на порт 22. Если соединение успешно, это означает, что установлен и работает OpenSSH на устройстве, поэтому он взломан.

система() - вызов функции system() с аргументом NULL на устройстве в тюрьме будет возвращать 0; делать то же самое на джейлбрейк-устройстве будет возвращаться 1. Это происходит потому, что функция будет проверять, существует ли /bin/sh, и это относится только к устройствам с джейлбрейком.[1]

dyld функции - На сегодняшний день труднее всего обойти. Вызывающие функции, такие как _dyld_image_count() и _dyld_get_image_name(), чтобы узнать, какие дилибы загружены. Очень сложно заплатить, так как патчи сами являются частью dylibs.

* Только очень небольшое число приложений реализовать это (как это не так эффективно, как и другие)

вышеприведенный отрывок был отредактирован для краткости

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

+0

Nice сообщение, человек. – Feign

+0

Спасибо! Хотя, полное исповедание, у меня было это сидение в моих заметках, пока я не был беспилотным от вопросов ... – DeveloperACE

+0

@ACE, если вы в конечном итоге создаете чеки, тогда поделитесь своим кодом здесь. –