Обход проверки версии iOS и валидации сертификата

Обход проверки версии iOS и валидации сертификата

Некоторые iOS-приложения проверяют версию операционной системы на устройстве. Недавно, во время тестирования одного приложения, я как раз и столкнулся с подобной проверкой. Если версия iOS была ниже 7.1, приложение не устанавливалось, и вываливалась ошибка.

Автор: Vikram Kulkarni

Некоторые iOS-приложения проверяют версию операционной системы на устройстве. Недавно, во время тестирования одного приложения, я как раз и столкнулся с подобной проверкой. Если версия iOS была ниже 7.1, приложение не устанавливалось, и вываливалась ошибка.

В этой статье будут рассмотрены следующие темы:

  • Изменение версии iOS в файле SystemVersion.plist.
  • Изменение версии в plist-файле, находящимся в пакете приложения.
  • Использование утилиты «iOS-ssl-Kill switch» для обхода валидации сертификата.

Изменение версии iOS в файле SystemVersion.plist

Версия iOS может быть изменена (на джейлбрейковом устройстве) в два простых шага посредством изменения соответствующего значения в файле SystemVersion.plist:

  1. Подключаемся к джейлбрейковому устройству по протоколу SSH (или используем ifile, доступный в cydia) для просмотра содержимого системной директории.
  2. Изменяем значение 'ProductVersion' в файле '/System/Library/CoreServices/SystemVersion.plist'.

Рисунок 1: Содержимое файла SystemVersion.plist

Этот трюк позволяет изменить значение, отображаемое в разделе 'Settings/General/about'. Однако метод сработает лишь для тех приложений, которые проверяют версию в файле SystemVersion.plist. Если после изменения версии, приложение все равно отказывается работать, используйте второй метод.

Изменение версии в plist-файле, находящимся в пакете приложения

Второй метод, позволяющий изменить версию, состоит из трех простых шагов:

  1. Переименовываем файла ipa в .zip и распаковываем архив.
  2. Изменяем значение 'minimum ios version' в файле info.plist, который обычно находится в папке \Payload\appname.app.
  3. Упаковываем архив и переименовываем его обратно в ipa. [Примечание: некоторые приложения проверяют значение 'minimum ios version' в других plist-файлах, находящихся в пакете].

Рисунок 2: Содержимое файла info.plist

После изменения plist-файлов нарушается подпись пакета. Для решения этой проблемы, необходимо зарегистрировать IPA при помощи утилиты из этой статьи.

Некоторые приложения проверяют версию iOS во время установки. Когда пользователь устанавливает приложение при помощи iTunes или xcode, используя IPA, происходит проверка версии iOS, запущенной на устройстве, и если версия ниже, чем требуется, появляется ошибка.

Рисунок 3: Ошибка, возникающая при установке приложения через xcode

Подобная проверка также обходится в несколько шагов:

  1. Переименовываем файл .ipa в .zip и извлекаем папку .app.
  2. Копируем папку .app туда, где установлены iOS приложения (/root/application) при помощи любого SFTP-клиента (например, WinSCP).
  3. Подключаемся к устройству через SSH, заходим в папку, где установлен IPA, а затем ставим права на запуск у папки .app (chmod -R 755 или chmod -R 777). Альтернативный способ – кликнуть правой кнопкой мыши на папке .app в WinSCP и изменить свойства директории, установив соответствующие права.
  4. После перезапуска iOS устройства приложение будет успешно установлено.

Рисунок 4: Установка новых прав для директории

Обход валидации сертификата

Некоторые приложения проверяют сертификат для предотвращения проксификации трафика при помощи утилит наподобие Burp. Обычно в бинарном файле приложения намертво зашит клиентский сертификат. Сервер проверяет этот сертификат, и если валидация заканчивается неудачно, возникает ошибка. Более подробно об этом можно почитать в другой моей статье в соавторстве со Стивом Керном.

Иногда бывает трудно извлечь сертификат из приложения и установить его внутрь прокси. Альтернатива – использовать утилиту ios-ssl-kill-switch. ios-ssl-kill-switch цепляется к Secure Transport API (самый низкий уровень) и отключает проверку сертификата. Большинство проверок используют NSURLConnection на более высоком уровне. Больше подробностей можно узнать здесь.

Проверка сертификата обходится в несколько шагов:

  1. Устанавливаем утилиту kill-ssl-switch.
  2. Все зависимые пакеты должны быть установлены заранее.
  3. Перезапускаем устройство или перезапустите SpringBoard при помощи следующей команды 'killall -HUP SpringBoard'.
  4. Устанавливаем опцию Disable Certificate Validation в разделе 'Settings/SSL Kill Switch'.
  5. Перезапускаем приложение, после чего трафик должен перехватываться успешно.

Привязка сертификата (Certificate pinning) обходится путем подцепления к API, выполняющего валидацию сертификата, и постоянного возвращения «истины» при проверке. Для решения этой задачи вполне подойдет фреймворк Mobilesubstrate. Существует несколько других полезных утилит для отключения привязки, например 'Trustme' и 'Snoop-it'.

Рисунок 5: Отключение проверки сертификата в SSL Kill Switch

Где кванты и ИИ становятся искусством?

На перекрестке науки и фантазии — наш канал

Подписаться