Статьи

Обхід перевірки версії 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'.

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-файлах, що знаходяться в пакеті].

[Примітка: деякі додатки перевіряють значення 'minimum ios version' в інших plist-файлах, що знаходяться в пакеті]

Малюнок 2: Вміст файлу info.plist

Після зміни plist-файлів порушується підпис пакета. Для вирішення цієї проблеми, необхідно зареєструвати IPA за допомогою утиліти з цієї статті .

Деякі додатки перевіряють версію iOS під час установки. Коли користувач встановлює додаток за допомогою iTunes або xcode, використовуючи 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 пристрої додаток буде успішно встановлено.

Після перезапуску 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

Новости