iOS Pentesting बिना Jailbreak के
Tip
AWS हैकिंग सीखें और अभ्यास करें:
HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें:HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।
मुख्य विचार
Applications signed with the entitlement get_task_allow third party applications को उस initial application के process ID के साथ task_for_pid() कॉल चलाकर उसका task port प्राप्त करने (उसको कंट्रोल करने और उसकी memory तक पहुँचने) की अनुमति देती हैं।
हालाँकि, यह सिर्फ IPA को निकालकर, उसे entitlement के साथ re-sign करके और device पर वापस फ्लैश करने जितना आसान नहीं है। यह FairPlay protection की वजह से है। जब app का signature बदलता है, तो DRM key invalidated हो जाती है और app काम नहीं करेगा।
यदि आपके पास पुराना jailbroken device है, तो आप IPA install करके उसे अपने पसंदीदा tool से decrypt कर सकते हैं (जैसे Iridium या frida-ios-dump), और फिर device से उसे वापस निकाल सकते हैं। हालांकि, यदि संभव हो तो decrypted IPA के लिए client को ही उपयोग करने की सलाह दी जाती है।
Obtain decrypted IPA
Get it from Apple
- Install the app to pentest in the iPhone
- अपने macos पर Apple Configurator को इंस्टॉल और लॉन्च करें
- अपने Mac पर
Terminalखोलें, और cd करें/Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps. IPA बाद में इस फोल्डर में दिखाई देगा। - आपको आपका iOS device दिखाई देगा। उस पर double-click करें, और फिर top menu bar से Add + → Apps पर क्लिक करें।
- Add पर क्लिक करने के बाद, Configurator Apple से IPA डाउनलोड करेगा, और उसे आपके device पर push करने की कोशिश करेगा। अगर आपने पहले मेरी सलाह मानी थी और IPA पहले से इंस्टॉल कर रखा है, तो reinstall करने का prompt दिखेगा।
- IPA डाउनलोड होकर
/Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileAppsमें आ जाना चाहिए, जहाँ से आप उसे प्राप्त कर सकते हैं।
इस प्रक्रिया के बारे में अधिक विस्तृत जानकारी के लिए देखें: https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed.
Decrypting the app
IPA को decrypt करने के लिए हम उसे install करने वाले हैं। हालाँकि, अगर आपके पास पुराना jailbroken iPhone है, तो संभव है कि उसकी iOS version उस application द्वारा supported न हो क्योंकि आमतौर पर apps latest versions ही सपोर्ट करते हैं।
इसलिए, उसे install करने के लिए, बस IPA को unzip करें:
unzip redacted.ipa -d unzipped
Info.plist में न्यूनतम समर्थित संस्करण की जाँच करें और यदि आपका डिवाइस उससे पुराना है, तो मान बदलकर इसे समर्थित बनाएं।
IPA को वापस zip करें:
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.
एक बार इंस्टॉल हो जाने पर, आप डिक्रिप्टेड IPA प्राप्त करने के लिए Cydia से Iridium tweak का उपयोग कर सकते हैं।
Entitlements को पैच और re-sign करें
ऐप्लिकेशन को get-task-allow entitlement के साथ re-sign करने के लिए कई tools उपलब्ध हैं जैसे app-signer, codesign, और iResign। app-signer में एक बहुत ही user-friendly इंटरफ़ेस है जो आपको आसानी से एक IPA फ़ाइल को re-sign करने की अनुमति देता है — जिस IPA को re-sign करना है उसे चुनना, इसे get-taks-allow सेट करना और उपयोग करने के लिए certificate और provisioning profile निर्दिष्ट करना।
Certificate और signing profiles के बारे में, Apple Xcode के माध्यम से सभी accounts के लिए free developer signing profiles प्रदान करता है। बस एक app बनाएं और उसे configure करें। फिर, Developer apps पर iPhone का trust सेट करने के लिए Settings → Privacy & Security पर जाएँ, और Developer Mode पर क्लिक करें।
Re-signed IPA के साथ, डिवाइस में इसे install करने का समय है ताकि उसे pentest किया जा सके:
ideviceinstaller -i resigned.ipa -w
IPA patching + DYLIB injection + free Apple ID re-sign (CLI)
यदि आपके पास पहले से एक decrypted IPA है, तो आप इसे patch करके कस्टम DYLIB लोड करवा सकते हैं, entitlements (उदा., network) जोड़ सकते हैं, और एक free Apple ID का उपयोग करके without Xcode इसे re-sign कर सकते हैं। यह non-jailbroken डिवाइसेज़ पर in-app instrumentation के लिए उपयोगी है।
सामान्य प्रवाह:
# 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>
नोट्स:
- Free Apple ID signing आमतौर पर 7 days में समाप्त हो जाती है और इसकी सीमा 3 App IDs/week और 10 sideloaded apps है।
- यह टूल Apple के साथ प्रमाणीकृत होकर (SRP के माध्यम से) cross-platform re-sign कर सकता है और एक free dev certificate + provisioning profile जनरेट कर सकता है। Apple के anisette हेडर्स प्लेटफ़ॉर्म के अनुसार हैं (macOS via
AOSKit.framework, Linux via Anisette.py, Windows via an external anisette server)। - यह sandbox को बायपास नहीं करता। इंजेक्ट किया गया कोड ऐप प्रोसेस के अंदर चलता है और केवल ऐप के sandbox और keychain access groups तक ही पहुँच सकता है।
इंजेक्ट किए गए implant तक केवल USB-आधारित पहुँच
यदि इंजेक्ट की गई DYLIB एक लोकल TCP कंट्रोल चैनल एक्सपोज़ करती है, तो आप ट्रैफ़िक को 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 शामिल हैं, तो आप उस ऐप के लिए accessible to that app items को dump कर सकते हैं:
python3 client.py "keychain dump"
python3 client.py "keychain dump --filter self"
python3 client.py "keychain dump --class generic"
Developer Mode सक्षम करें (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.
- Install or push any developer-signed IPA to the phone.
- Navigate to Settings → Privacy & Security → Developer Mode and toggle it on.
- The device will reboot; after entering the passcode you will be asked to Turn On Developer Mode.
Developer Mode remains active until you disable it or wipe the phone, so this step only needs to be performed once per device. Apple documentation explains the security implications.
आधुनिक sideloading विकल्प
There are now several mature ways to sideload and keep re-signed IPAs up-to-date without a 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 | Needs computer on the same network, 3-app limit imposed by Apple |
| 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 | Not supported on iOS 15.5+ (bug patched) |
For routine pentests on current iOS versions Alt/Side-Store are usually the most practical choice.
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.
non-jailbroken IPAs में Frida Gadget injection (listen mode)
यदि आप modify and re-sign an IPA कर सकते हैं, तो आप Frida Gadget को embed कर सकते हैं और Mach-O को patch कर सकते हैं ताकि वह startup पर @rpath के माध्यम से इसे लोड करे। इससे Frida/Objection बिना jailbreak के सक्षम हो जाता है (device को re-signed IPA स्वीकार करना होगा)।
एक व्यावहारिक वर्कफ़्लो है GadgetInjector (Python tool) का उपयोग करके FridaGadget.dylib को inject करना और एक listen-mode configuration जनरेट करना:
python3 gadget_injector.py MyApp.ipa
# Output: MyApp-frida-listen.ipa
Re-signing constraints (non-jailbroken installs के लिए महत्वपूर्ण):
- सभी embedded dylibs को एक ही Team ID से sign करें।
FridaGadget.dylibमें अतिरिक्त entitlements न जोड़ें।
Re-signing और IPA install करने के बाद, listen mode में attach करें:
# (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
स्वचालित डायनामिक विश्लेषण with MobSF (बिना jailbreak)
MobSF समान तकनीक (get_task_allow) का उपयोग करके dev-signed IPA को वास्तविक डिवाइस पर इंस्ट्रूमेंट कर सकता है और फ़ाइल सिस्टम ब्राउज़र, नेटवर्क ट्रैफ़िक कैप्चर और Frida कंसोल के साथ एक वेब UI प्रदान करता है【】। सबसे तेज़ तरीका है 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 सर्वर को सक्षम करेगा और एक इंटरएक्टिव रिपोर्ट जनरेट करेगा।
iOS 17 और Lockdown Mode से जुड़ी सावधानियाँ
- Lockdown Mode (Settings → Privacy & Security) dynamic linker को unsigned या externally signed dynamic libraries लोड करने से रोकता है। ऐसे डिवाइसों का परीक्षण करते समय जिनमें यह मोड सक्षम हो सकता है, सुनिश्चित करें कि यह disabled है, वरना आपकी 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 documentation – किसी डिवाइस पर 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 हैकिंग सीखें और अभ्यास करें:
HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें:HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।


