Некоторые iOS-приложения проверяют версию операционной системы на устройстве. Недавно, во время тестирования одного приложения, я как раз и столкнулся с подобной проверкой. Если версия iOS была ниже 7.1, приложение не устанавливалось, и вываливалась ошибка.
Автор: Vikram Kulkarni
Некоторые iOS-приложения проверяют версию операционной системы на устройстве. Недавно, во время тестирования одного приложения, я как раз и столкнулся с подобной проверкой. Если версия iOS была ниже 7.1, приложение не устанавливалось, и вываливалась ошибка.
В этой статье будут рассмотрены следующие темы:
Изменение версии iOS в файле SystemVersion.plist
Версия iOS может быть изменена (на джейлбрейковом устройстве) в два простых шага посредством изменения соответствующего значения в файле SystemVersion.plist:
Рисунок 1: Содержимое файла SystemVersion.plist
Этот трюк позволяет изменить значение, отображаемое в разделе 'Settings/General/about'. Однако метод сработает лишь для тех приложений, которые проверяют версию в файле SystemVersion.plist. Если после изменения версии, приложение все равно отказывается работать, используйте второй метод.
Изменение версии в plist-файле, находящимся в пакете приложения
Второй метод, позволяющий изменить версию, состоит из трех простых шагов:
Рисунок 2: Содержимое файла info.plist
После изменения plist-файлов нарушается подпись пакета. Для решения этой проблемы, необходимо зарегистрировать IPA при помощи утилиты из этой статьи.
Некоторые приложения проверяют версию iOS во время установки. Когда пользователь устанавливает приложение при помощи iTunes или xcode, используя IPA, происходит проверка версии iOS, запущенной на устройстве, и если версия ниже, чем требуется, появляется ошибка.
Рисунок 3: Ошибка, возникающая при установке приложения через xcode
Подобная проверка также обходится в несколько шагов:
Рисунок 4: Установка новых прав для директории
Обход валидации сертификата
Некоторые приложения проверяют сертификат для предотвращения проксификации трафика при помощи утилит наподобие Burp. Обычно в бинарном файле приложения намертво зашит клиентский сертификат. Сервер проверяет этот сертификат, и если валидация заканчивается неудачно, возникает ошибка. Более подробно об этом можно почитать в другой моей статье в соавторстве со Стивом Керном.
Иногда бывает трудно извлечь сертификат из приложения и установить его внутрь прокси. Альтернатива – использовать утилиту ios-ssl-kill-switch. ios-ssl-kill-switch цепляется к Secure Transport API (самый низкий уровень) и отключает проверку сертификата. Большинство проверок используют NSURLConnection на более высоком уровне. Больше подробностей можно узнать здесь.
Проверка сертификата обходится в несколько шагов:
Привязка сертификата (Certificate pinning) обходится путем подцепления к API, выполняющего валидацию сертификата, и постоянного возвращения «истины» при проверке. Для решения этой задачи вполне подойдет фреймворк Mobilesubstrate. Существует несколько других полезных утилит для отключения привязки, например 'Trustme' и 'Snoop-it'.
Рисунок 5: Отключение проверки сертификата в SSL Kill Switch
Лечим цифровую неграмотность без побочных эффектов