iOS Basic Testing Operations

Support HackTricks

Summary of iOS Device Identification and Access

Identifying the UDID of an iOS Device

Щоб унікально ідентифікувати iOS пристрій, використовується 40-значна послідовність, відома як UDID. На macOS Catalina або новіших версіях це можна знайти в Finder app, оскільки iTunes більше не присутній. Пристрій, підключений через USB і вибраний у Finder, показує свій UDID серед іншої інформації, коли натискають на деталі під його назвою.

Для версій macOS до Catalina iTunes полегшує виявлення UDID. Докладні інструкції можна знайти тут.

Командні інструменти пропонують альтернативні методи для отримання UDID:

  • Використовуючи інструмент I/O Registry Explorer ioreg:

$ ioreg -p IOUSB -l | grep "USB Serial"
  • Використання ideviceinstaller для macOS (та Linux):

$ brew install ideviceinstaller
$ idevice_id -l
  • Використання system_profiler:

$ system_profiler SPUSBDataType | sed -n -e '/iPad/,/Serial/p;/iPhone/,/Serial/p;/iPod/,/Serial/p' | grep "Serial Number:"
  • Використання instruments для переліку пристроїв:

$ instruments -s devices

Доступ до оболонки пристрою

Доступ SSH активується шляхом встановлення пакету OpenSSH після джейлбрейку, що дозволяє підключення через ssh root@<device_ip_address>. Важливо змінити стандартні паролі (alpine) для користувачів root та mobile, щоб забезпечити безпеку пристрою.

SSH через USB стає необхідним за відсутності Wi-Fi, використовуючи iproxy для відображення портів пристрою для SSH-з'єднань. Ця конфігурація дозволяє доступ до SSH через USB, запустивши:

$ iproxy 2222 22
$ ssh -p 2222 root@localhost

On-device shell applications, такі як NewTerm 2, полегшують безпосередню взаємодію з пристроєм, що особливо корисно для усунення неполадок. Reverse SSH shells також можуть бути встановлені для віддаленого доступу з комп'ютера-хоста.

Скидання забутих паролів

Щоб скинути забутий пароль до значення за замовчуванням (alpine), необхідно відредагувати файл /private/etc/master.passwd. Це передбачає заміну існуючого хешу на хеш для alpine поруч з записами користувачів root і mobile.

Техніки передачі даних

Передача файлів даних додатків

Архівування та отримання через SSH та SCP: Легко архівувати каталог даних програми за допомогою tar, а потім передати його за допомогою scp. Команда нижче архівує каталог даних у файл .tgz, який потім витягується з пристрою:

tar czvf /tmp/data.tgz /private/var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8EF8-8F5560EB0693
exit
scp -P 2222 root@localhost:/tmp/data.tgz .

Графічні інтерфейсні інструменти

Використання iFunbox та iExplorer: Ці GUI інструменти корисні для управління файлами на пристроях iOS. Однак, починаючи з iOS 8.4, Apple обмежила доступ цих інструментів до пісочниці додатка, якщо пристрій не зламаний.

Використання Objection для управління файлами

Інтерактивна оболонка з Objection: Запуск objection надає доступ до каталогу Bundle додатка. Звідси ви можете перейти до каталогу Documents додатка та керувати файлами, включаючи їх завантаження та вивантаження на та з пристрою iOS.

objection --gadget com.apple.mobilesafari explorer
cd /var/mobile/Containers/Data/Application/72C7AAFB-1D75-4FBA-9D83-D8B4A2D44133/Documents
file download <filename>

Отримання та витягування додатків

Придбання IPA файлу

Посилання на розподіл по повітрю (OTA): Додатки, розподілені для тестування через OTA, можна завантажити за допомогою інструменту завантаження активів ITMS, який встановлюється через npm і використовується для збереження IPA файлу локально.

npm install -g itms-services
itms-services -u "itms-services://?action=download-manifest&url=https://s3-ap-southeast-1.amazonaws.com/test-uat/manifest.plist" -o - > out.ipa

Витягування бінарного файлу програми

  1. З IPA: Розпакуйте IPA, щоб отримати розшифрований бінарний файл програми.

  2. З джейлбрейкнутого пристрою: Встановіть програму та витягніть розшифрований бінарний файл з пам'яті.

Процес розшифрування

Огляд ручного розшифрування: Бінарні файли програм iOS зашифровані Apple за допомогою FairPlay. Щоб провести реверс-інжиніринг, потрібно витягти розшифрований бінарний файл з пам'яті. Процес розшифрування включає перевірку прапора PIE, коригування прапорів пам'яті, ідентифікацію зашифрованої секції, а потім витягування та заміну цієї секції на її розшифровану форму.

Перевірка та модифікація прапора PIE:

otool -Vh Original_App
python change_macho_flags.py --no-pie Original_App
otool -Vh Hello_World

Визначення зашифрованої секції та дамп пам'яті:

Визначте початкові та кінцеві адреси зашифрованої секції за допомогою otool та зробіть дамп пам'яті з джейлбрейкнутого пристрою за допомогою gdb.

otool -l Original_App | grep -A 4 LC_ENCRYPTION_INFO
dump memory dump.bin 0x8000 0x10a4000

Перезаписування зашифрованої секції:

Замініть зашифровану секцію в оригінальному бінарному файлі програми на розшифрований дамп.

dd bs=1 seek=<starting_address> conv=notrunc if=dump.bin of=Original_App

Завершення розшифрування: Змініть метадані бінарного файлу, щоб вказати на відсутність шифрування, використовуючи інструменти, такі як MachOView, встановивши cryptid на 0.

Розшифрування (Автоматично)

frida-ios-dump

Інструмент frida-ios-dump використовується для автоматичного розшифрування та витягування додатків з пристроїв iOS. Спочатку потрібно налаштувати dump.py для підключення до пристрою iOS, що можна зробити через localhost на порту 2222 за допомогою iproxy або безпосередньо через IP-адресу пристрою та порт.

Додатки, встановлені на пристрої, можна перерахувати за допомогою команди:

$ python dump.py -l

Щоб скинути конкретний додаток, наприклад Telegram, використовується наступна команда:

$ python3 dump.py -u "root" -p "<PASSWORD>" ph.telegra.Telegraph

Ця команда ініціює дамп програми, в результаті чого створюється файл Telegram.ipa у поточному каталозі. Цей процес підходить для джейлбрейкнутіх пристроїв, оскільки незасвідчені або підроблені програми можуть бути повторно встановлені за допомогою інструментів, таких як ios-deploy.

flexdecrypt

Інструмент flexdecrypt, разом зі своїм обгорткою flexdump, дозволяє витягувати IPA файли з встановлених додатків. Команди для встановлення flexdecrypt на пристрій включають завантаження та встановлення пакету .deb. flexdump можна використовувати для переліку та дампу програм, як показано в командах нижче:

apt install zip unzip
wget https://gist.githubusercontent.com/defparam/71d67ee738341559c35c684d659d40ac/raw/30c7612262f1faf7871ba8e32fbe29c0f3ef9e27/flexdump -P /usr/local/bin; chmod +x /usr/local/bin/flexdump
flexdump list
flexdump dump Twitter.app

bagbak

bagbak, ще один інструмент на базі Frida, вимагає джейлбрейкнутого пристрою для розшифровки додатків:

bagbak --raw Chrome

r2flutch

r2flutch, використовуючи як radare, так і frida, служить для дешифрування та дампінгу додатків. Більше інформації можна знайти на його GitHub сторінці.

Встановлення додатків

Sideloading відноситься до встановлення додатків поза офіційним App Store. Цей процес обробляється installd daemon і вимагає, щоб додатки були підписані сертифікатом, виданим Apple. Пристрої з джейлбрейком можуть обійти це через AppSync, що дозволяє встановлювати фальшиво підписані IPA пакети.

Інструменти для Sideloading

  • Cydia Impactor: Інструмент для підписування та встановлення IPA файлів на iOS та APK файлів на Android. Посібники та усунення неполадок можна знайти на yalujailbreak.net.

  • libimobiledevice: Бібліотека для Linux та macOS для зв'язку з iOS пристроями. Команди для встановлення та приклади використання ideviceinstaller надаються для встановлення додатків через USB.

  • ipainstaller: Цей інструмент командного рядка дозволяє безпосереднє встановлення додатків на iOS пристроях.

  • ios-deploy: Для користувачів macOS, ios-deploy встановлює iOS додатки з командного рядка. Розпакування IPA та використання прапора -m для безпосереднього запуску додатка є частиною процесу.

  • Xcode: Використовуйте Xcode для встановлення додатків, перейшовши до Window/Devices and Simulators та додавши додаток до Installed Apps.

Дозволити встановлення додатків на пристроях, що не є iPad

Щоб встановити специфічні для iPad додатки на пристрої iPhone або iPod touch, значення UIDeviceFamily у файлі Info.plist потрібно змінити на 1. Однак ця модифікація вимагає повторного підписування IPA файлу через перевірки підпису.

Примітка: Цей метод може не спрацювати, якщо додаток вимагає можливостей, які є ексклюзивними для новіших моделей iPad, при використанні старішого iPhone або iPod touch.

References

Support HackTricks

Last updated