iOS Pentesting без Jailbreak
Tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Основна ідея
Applications signed with the entitlement get_task_allow allow third party applications to run a function called task_for_pid() with the process ID of the initial application as argument in order to get the task port over it (бути в змозі контролювати його та отримати доступ до його пам’яті).
Однак це не так просто, як просто забрати IPA, перезазначити його з потрібним entitlement і прошити назад на пристрій. Це через захист FairPlay. Коли підпис додатка змінюється, DRM (Digital Rights Management) ключ інвалідується і додаток перестане працювати.
На старому jailbroken пристрої можна встановити IPA, дешифрувати його за допомогою улюбленого інструменту (наприклад Iridium або frida-ios-dump) і скопіювати його з пристрою. Однак, якщо можливо, рекомендовано просто попросити клієнта надати декриптований IPA.
Obtain decrypted IPA
Get it from Apple
- Встановіть додаток для pentest на iPhone
- Install and launch Apple Configurator inside your macos
- Open
Terminalon your Mac, and cd to/Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps. The IPA will appear in this folder later. - Ви повинні побачити ваш iOS-пристрій. Подвійний клік по ньому, а потім натисніть Add + → Apps у верхньому меню.
- Після натискання Add, Configurator завантажить IPA з Apple і спробує відправити його на ваш пристрій. Якщо ви виконали мою попередню рекомендацію і вже встановили IPA, з’явиться повідомлення з проханням перевстановити додаток.
- IPA має бути завантажено всередині
/Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileAppsзвідки ви можете його взяти
Check https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed for more detailed information about this process.
Decrypting the app
In order to decrypt the IPA we are going to install it. However, if you have an old jailbroken iPhone, potentailly it’s version is not going to be supported by the application as usually apps only suports latests versions.
So, in order to install it, just unzip the IPA:
unzip redacted.ipa -d unzipped
Перевірте Info.plist на мінімально підтримувану версію, і якщо ваш пристрій старіший за неї, змініть значення так, щоб воно підтримувалося.
Запакуйте IPA назад:
cd unzipped
zip -r ../no-min-version.ipa *
Потім встановіть IPA, наприклад, за допомогою:
ideviceinstaller -i no-min-version.ipa -w
Note that you might need AppSync Unified tweak from Cydia to prevent any invalid signature errors.
Once intalled, you can use Iridium tweak from Cydia in order to obtain the decrypted IPA.
Змінити entitlements & re-sign
Зверніть увагу, що вам може знадобитися AppSync Unified tweak з Cydia, щоб уникнути помилок invalid signature.
Після встановлення можна використовувати Iridium tweak з Cydia, щоб отримати декриптовану IPA.
Щоб re-sign додаток з entitlement get-task-allow, існує кілька інструментів, таких як app-signer, codesign та iResign. app-signer має дуже зручний інтерфейс, який дозволяє легко re-sign IPA-файл, вказавши IPA для повторного підписання, встановити get-taks-allow та вибрати сертифікат і provisioning profile для використання.
Що стосується сертифікатів і профілів підпису, Apple пропонує безкоштовні профілі підпису розробника для всіх облікових записів через Xcode. Просто створіть додаток і налаштуйте один. Потім налаштуйте iPhone, щоб довіряти додаткам розробника, перейшовши в Settings → Privacy & Security і натиснувши на Developer Mode.
З повторно підписаною IPA настав час встановити її на пристрій для pentest:
ideviceinstaller -i resigned.ipa -w
IPA patching + DYLIB injection + free Apple ID re-sign (CLI)
Якщо у вас вже є decrypted IPA, ви можете запатчити його, щоб завантажити власний DYLIB, додати entitlements (наприклад, network) і підписати заново без Xcode, використовуючи free Apple ID. Це корисно для in-app instrumentation на non-jailbroken devices.
Типовий потік:
# Build the implant (macOS for build step)
make
# Patch the IPA to inject the DYLIB
python3 tools/patcher.py patch --ipa MyApp.ipa --dylib libShell.dylib
# -> MyApp_patched.ipa
# Patch + sign + install in one step (free Apple ID)
python3 tools/patcher.py full \
--ipa MyApp.ipa \
--dylib libShell.dylib \
--apple-id user@example.com \
--install \
--udid <device-udid>
Примітки:
- Підписування з безкоштовним Apple ID зазвичай закінчується через 7 днів і обмежене 3 App IDs/week та 10 sideloaded apps.
- Інструмент може повторно підписати крос-платформено, аутентифікуючись в Apple через SRP та генеруючи безкоштовний dev certificate + provisioning profile. Заголовки Apple’s anisette обробляються для кожної платформи (macOS via
AOSKit.framework, Linux via Anisette.py, Windows via an external anisette server). - Це не обходить sandbox. Інжектований код виконується в процесі додатку і може отримувати доступ лише до sandbox додатку та keychain access groups.
Доступ лише через USB до injected implant
Якщо injected DYLIB експонує локальний TCP control channel, ви можете тримати трафік off Wi-Fi/cellular і переспрямувати його через USB:
# Forward device-local TCP port to host
iproxy 8080 8080
# Example client commands (host side)
python3 client.py "ls"
python3 client.py "pwd"
python3 client.py "scp -r Documents host:./downloads"
Якщо implant включає keychain helpers, ви можете dump items доступні цьому app:
python3 client.py "keychain dump"
python3 client.py "keychain dump --filter self"
python3 client.py "keychain dump --class generic"
Увімкнути Developer Mode (iOS 16+)
З iOS 16 Apple ввела Developer Mode: будь-який бінарний файл, який має get_task_allow або підписаний development certificate, відмовиться запускатися, доки Developer Mode не буде увімкнено на пристрої. Також ви не зможете приєднати Frida/LLDB, якщо цей прапорець не увімкнено.
- Встановіть або передайте на телефон будь-яку developer-signed IPA.
- Перейдіть у Settings → Privacy & Security → Developer Mode та увімкніть його.
- Пристрій перезавантажиться; після введення passcode вам запропонують Turn On Developer Mode.
Developer Mode залишається активним, поки ви не вимкнете його або не скинете телефон, тому цей крок потрібно виконати лише один раз для кожного пристрою. Apple documentation пояснює наслідки для безпеки.
Сучасні варіанти sideloading
Тепер існує кілька зрілих способів здійснити sideload та підтримувати re-signed IPAs в актуальному стані без jailbreak:
| Інструмент | Вимоги | Переваги | Обмеження |
|---|---|---|---|
| AltStore 2 / SideStore | macOS/Windows/Linux companion that re-signs the IPA every 7 days with a free dev profile | Automatic reload over Wi-Fi, works up to iOS 17 | Потрібен комп’ютер у тій же мережі, Apple накладає обмеження в 3 додатки |
| TrollStore 1/2 | Device on iOS 14 – 15.4.1 vulnerable to the CoreTrust bug | Permanent signing (no 7-day limit); no computer required once installed | Не підтримується на iOS 15.5+ (bug виправлено) |
Для рутинних pentests на поточних версіях iOS Alt/Side-Store зазвичай є найпрактичнішим вибором.
Hooking / dynamic instrumentation
You can hook your app exactly as on a jailbroken device once it is signed with get_task_allow and Developer Mode is on:
# Spawn & attach with objection
objection -g "com.example.target" explore
# Or plain Frida
frida -U -f com.example.target -l my_script.js --no-pause
Останні релізи Frida (>=16) автоматично обробляють pointer authentication та інші захисні механізми iOS 17, тому більшість існуючих скриптів працюють з коробки.
Frida Gadget injection in non-jailbroken IPAs (listen mode)
Якщо ви можете modify and re-sign an IPA, ви можете вбудувати Frida Gadget і запатчити Mach-O, щоб завантажувати його через @rpath під час старту. Це дозволяє використовувати Frida/Objection без jailbreak (пристрій має прийняти повторно підписаний IPA).
Практичний робочий процес — використовувати GadgetInjector (Python tool) для ін’єкції FridaGadget.dylib та генерації listen-mode конфігурації:
python3 gadget_injector.py MyApp.ipa
# Output: MyApp-frida-listen.ipa
Обмеження при повторному підписуванні (важливо для інсталяцій без jailbreak):
- Підпишіть всі embedded dylibs тим самим Team ID.
- Не додавайте додаткових entitlements до
FridaGadget.dylib.
Після повторного підписання та встановлення IPA, підключіться у режимі прослуховування:
# (Optional) start the app paused
xcrun devicectl device process launch \
--device <UDID> \
--start-stopped <bundle-id>
# Forward Frida listen port over USB (default 27042)
pymobiledevice3 usbmux forward 27042 27042
# Objection
objection -g <bundle-id> explore
# Or Frida CLI
frida -H 127.0.0.1:27042 -n MyApp
Automated dynamic analysis with MobSF (no jailbreak)
MobSF може інструментувати dev-signed IPA на реальному пристрої, використовуючи ту саму техніку (get_task_allow) і надає веб UI із переглядачем файлової системи, перехопленням трафіку та консоллю Frida【】. Найшвидший спосіб — запустити MobSF у Docker, а потім підключити ваш iPhone через USB:
docker pull opensecurity/mobile-security-framework-mobsf:latest
docker run -p 8000:8000 --privileged \
-v /var/run/usbmuxd:/var/run/usbmuxd \
opensecurity/mobile-security-framework-mobsf:latest
# Browse to http://127.0.0.1:8000 and upload your resigned IPA
MobSF автоматично розгортає бінарний файл, запускає Frida server всередині app sandbox додатку та генерує інтерактивний звіт.
iOS 17 & Lockdown Mode зауваження
- Lockdown Mode (Settings → Privacy & Security) блокує dynamic linker від завантаження unsigned або externally signed dynamic libraries. Якщо тестуєте пристрої, які можуть мати цей режим увімкненим, переконайтеся, що він відключений, інакше ваші Frida/objection sessions миттєво завершаться.
- Pointer Authentication (PAC) застосовується на рівні всієї системи на пристроях A12+. Frida ≥16 прозоро обробляє PAC stripping — просто тримайте обидва frida-server та Python/CLI toolchain оновленими при виході нової великої версії iOS.
Джерела
- https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed
- Документація Apple для розробників – Увімкнення режиму Developer Mode на пристрої: https://developer.apple.com/documentation/xcode/enabling-developer-mode-on-a-device
- Mobile Security Framework (MobSF): https://mobsf.github.io/Mobile-Security-Framework-MobSF/
- https://github.com/test1ng-guy/iOS-sandbox-explorer
- https://github.com/Saurabh221662/GadgetInjector
Tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.


