iOS Pentesting without Jailbreak
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking’i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter’da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
Ana fikir
get_task_allow ile imzalanmış uygulamalar, üçüncü taraf uygulamaların başlangıç uygulamasının process ID’sini argüman olarak kullanarak task_for_pid() adlı fonksiyonu çalıştırmasına izin verir; böylece task portunu elde edebilir (kontrol edebilir ve belleğine erişebilir).
Ancak, IPA’yı çekip, entitlement ile yeniden imzalayıp cihazınıza geri yüklemek kadar kolay değil. Bunun nedeni FairPlay korumasıdır. Uygulamanın imzası değiştiğinde, DRM (Digital Rights Management) anahtarı iptal edilir ve uygulama çalışmaz.
Eski bir jailbroken cihazla, IPA’yı yükleyip decrypt it using your favourite tool (ör. Iridium veya frida-ios-dump) ve cihazdan çekmek mümkündür. Ancak mümkünse, decrypted IPA için sadece istemciyi kullanmanız önerilir.
Decrypted IPA’yı elde etme
Apple’dan edinme
- Pentest için uygulamayı iPhone’a yükleyin
- macOS’ta Apple Configurator yükleyip başlatın
- Mac’inizde
Terminaluygulamasını açın ve/Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileAppsdizinine cd yapın. IPA daha sonra bu klasörde görünecektir. - iOS cihazınızı görmelisiniz. Üzerine çift tıklayın, sonra üst menü çubuğundan Add + → Apps’a tıklayın.
- Add’e tıkladıktan sonra, Configurator IPA’yı Apple’dan indirip cihazınıza yüklemeye çalışacaktır. Eğer önceki önerimi takip edip IPA’yı zaten yüklediyseniz, uygulamayı yeniden yüklemek isteyip istemediğinizi soran bir uyarı çıkacaktır.
- IPA şu dizine indirilmiş olmalıdır:
/Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps— buradan alabilirsiniz
Daha ayrıntılı bilgi için şu sayfaya bakın: https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed.
Decrypting the app
IPA’yı decrypt etmek için onu yükleyeceğiz. Ancak, eski bir jailbroken iPhone’unuz varsa, muhtemelen sürümü uygulama tarafından desteklenmeyecektir çünkü uygulamalar genellikle yalnızca en son sürümleri destekler.
Bu yüzden, yüklemek için IPA’yı zip’ten çıkarın:
unzip redacted.ipa -d unzipped
Info.plist dosyasını minimum desteklenen sürüm için kontrol edin ve cihazınız bundan daha eskiyse, desteklenmesi için değeri değiştirin.
IPA’yı tekrar zipleyin:
cd unzipped
zip -r ../no-min-version.ipa *
Daha sonra, örneğin IPA’yı şu şekilde yükleyin:
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 yamalama ve yeniden imzalama
Uygulamayı get-task-allow entitlement ile yeniden imzalamak için app-signer, codesign ve iResign gibi birkaç araç mevcuttur. app-signer, yeniden imzalanacak IPA’yı belirterek IPA dosyasını çok kolay bir şekilde resing etmenize, put it get-taks-allow ve kullanılacak sertifika ile provisioning profilini seçmenize olanak veren çok kullanıcı dostu bir arayüze sahiptir.
Sertifika ve imzalama profilleriyle ilgili olarak, Apple Xcode aracılığıyla tüm hesaplar için free developer signing profiles sunar. Sadece bir uygulama oluşturun ve bunu yapılandırın. Ardından, geliştirici uygulamalarına güvenmesi için iPhone’u yapılandırın: Settings → Privacy & Security yolunu izleyin ve Developer Mode’a tıklayın.
Yeniden imzalanmış IPA ile, cihazda pentest yapmak için onu yükleme zamanı:
ideviceinstaller -i resigned.ipa -w
IPA patching + DYLIB injection + free Apple ID re-sign (CLI)
Eğer zaten bir decrypted IPA’niz varsa, özel bir DYLIB yükleyecek şekilde patchleyebilir, entitlements (ör. network) ekleyebilir ve ücretsiz bir Apple ID kullanarak Xcode olmadan yeniden imzalayabilirsiniz. Bu, jailbreak yapılmamış cihazlarda in-app instrumentation için kullanışlıdır.
Tipik akış:
# 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>
Notlar:
- Free Apple ID signing genellikle 7 gün sonra sona erer ve 3 App IDs/week ile 10 sideloaded apps ile sınırlıdır.
- Araç, Apple ile SRP üzerinden kimlik doğrulayarak ve ücretsiz bir dev certificate + provisioning profile üreterek çapraz-platform re-sign yapabilir. Apple’ın anisette header’ları platforma göre ele alınır (macOS için
AOSKit.framework, Linux için Anisette.py, Windows için harici bir anisette sunucusu aracılığıyla). - Bu sandbox’ı atlamaz. Enjekte edilen kod uygulama süreci içinde çalışır ve yalnızca uygulamanın sandbox ve keychain access groups’ına erişebilir.
Enjekte edilen implant’a sadece USB üzerinden erişim
Eğer enjekte edilen DYLIB yerel bir TCP kontrol kanalı açıyorsa, trafiği off Wi-Fi/cellular tutup USB üzerinden yönlendirebilirsiniz:
# 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"
Eğer implant keychain yardımcıları içeriyorsa, o app tarafından erişilebilen öğeleri dump edebilirsiniz:
python3 client.py "keychain dump"
python3 client.py "keychain dump --filter self"
python3 client.py "keychain dump --class generic"
Developer Mode’ı Etkinleştirme (iOS 16+)
Since iOS 16 Apple introduced Developer Mode: any binary that carries get_task_allow or is signed with a development certificate will refuse to launch until Developer Mode is enabled on the device. You will also not be able to attach Frida/LLDB unless this flag is on.
- Herhangi bir developer-signed IPA’yı telefona yükleyin veya gönderin.
- Settings → Privacy & Security → Developer Mode öğesine gidin ve açın.
- Cihaz yeniden başlatılacaktır; passcode girdikten sonra sizden Turn On Developer Mode istenecektir.
Developer Mode, siz devre dışı bırakana veya telefonu siliyor olana kadar aktif kalır; bu yüzden bu adım her cihaz için yalnızca bir kez yapılmalıdır. Apple documentation güvenlik etkilerini açıklar.
Modern sideloading seçenekleri
There are now several mature ways to sideload and keep re-signed IPAs up-to-date without a jailbreak:
| Tool | Requirements | Strengths | Limitations |
|---|---|---|---|
| AltStore 2 / SideStore | macOS/Windows/Linux üzerinde çalışan, IPA’yı ücretsiz dev profile ile her 7 günde bir yeniden imzalayan eşlikçi uygulama | Wi-Fi üzerinden otomatik yeniden yükleme, iOS 17’ye kadar çalışır | Aynı ağda bilgisayar gerektirir, Apple tarafından uygulanan 3-uygulama limiti |
| TrollStore 1/2 | iOS 14 – 15.4.1 çalıştıran ve CoreTrust bug’ine karşı savunmasız cihaz | Permanent imzalama (7 günlük limit yok); kurulduktan sonra bilgisayara gerek yok | iOS 15.5+ üzerinde desteklenmez (hata yamalandı) |
Güncel iOS sürümlerinde rutin pentests için Alt/Side-Store genellikle en pratik seçimdir.
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
Recent Frida releases (>=16) automatically handle pointer authentication and other iOS 17 mitigations, so most existing scripts work out-of-the-box.
Frida Gadget injection in non-jailbroken IPAs (listen mode)
If you can modify and re-sign an IPA, you can embed Frida Gadget and patch the Mach-O to load it via @rpath at startup. This enables Frida/Objection without a jailbreak (the device must accept the re-signed IPA).
A practical workflow is to use GadgetInjector (Python tool) to inject FridaGadget.dylib and generate a listen-mode configuration:
python3 gadget_injector.py MyApp.ipa
# Output: MyApp-frida-listen.ipa
Yeniden imzalama kısıtlamaları (non-jailbroken installs için önemli):
- Tüm embedded dylibs’leri aynı Team ID ile imzalayın.
FridaGadget.dylib’e ekstra entitlements eklemeyin.
IPA’yı yeniden imzalayıp yükledikten sonra, listen modunda attach edin:
# (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
MobSF ile otomatik dinamik analiz (no jailbreak)
MobSF gerçek bir cihazda aynı teknik (get_task_allow) kullanarak dev-signed IPA’yı enstrümante edebilir ve dosya sistemi gezgini, trafik yakalama ve Frida konsolu içeren bir web arayüzü sağlar【】. En hızlı yol, MobSF’yi Docker’da çalıştırıp iPhone’unuzu USB ile bağlamaktır:
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 ikiliyi otomatik olarak dağıtır, uygulama sandbox’ı içinde bir Frida server etkinleştirir ve etkileşimli bir rapor oluşturur.
iOS 17 & Lockdown Mode uyarıları
- Lockdown Mode (Settings → Privacy & Security) imzasız veya harici olarak imzalanmış dinamik kütüphaneleri yüklemekten dynamic linker’ı engeller. Bu mod açık olabilecek cihazları test ederken bunun devre dışı olduğundan emin olun; aksi takdirde Frida/objection oturumlarınız derhal sonlanır.
- Pointer Authentication (PAC), A12+ cihazlarda sistem genelinde uygulanır. Frida ≥16 PAC stripping’i şeffaf şekilde ele alır — yeni büyük bir iOS sürümü çıktığında hem frida-server hem de Python/CLI toolchain’in güncel olduğundan emin olun.
Referanslar
- https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed
- Apple developer documentation – Enabling Developer Mode on a device: 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’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking’i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter’da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.


