Comprehensive iOS mobile application penetration testing skill with Frida/Objection integration for jailbroken and non-jailbroken devices...
Thin router for an iOS app security assessment. Full OWASP MASTG coverage (recon ā static ā dynamic ā network ā storage ā crypto ā auth ā reporting). Detailed runbooks live under workflows/ and methodology/; load them only when needed.
"pentest iOS app", "test this IPA", "bypass SSL pinning iPhone", "extract keychain", "MASTG iOS", "iOS jailbreak bypass", "analyze .ipa", "test iPhone app".
android-pentest.web-pentest / api-pentest.secure-code-review with iOS language packs.macos-pentest.target acquired?
āāā no binary yet ā workflows/ipa_decryption.md
āāā yes
āāā need HTTPS visibility? ā workflows/ssl_pinning_bypass.md
āāā app exits on jailbroken device? ā workflows/jailbreak_detection_bypass.md
āāā hunting credentials/tokens? ā workflows/keychain_extraction.md
āāā testing login / biometric? ā workflows/auth_testing.md
āāā full engagement ā workflows/complete_assessment.md
Run concurrently (independent I/O, no shared state):
class-dump -H App.app/App -o headers/otool -L App.app/App and otool -hv App.app/Appstrings -a App.app/App | grep ...plutil -p App.app/Info.plistMust run sequentially (shared Frida session / spawn state):
--no-pause spawn ā wait for bypass script to land ā drive app ā then attach further scripts.ios sslpinning disable ā then any traffic-dependent command.ideviceimagemounter ā then frida-ps -U.Spawn a sub-agent when you can crisply isolate a scope:
App.app/, it runs class-dump + otool + strings + framework inventory in parallel, returns a structured summary of classes of interest, hardcoded secrets, and insecure API usage.<bundle_id>, it runs objection ... keychain dump --json, classifies each entry by accessibility/ACL, emits findings per schemas/finding.json.Do not split Frida spawn + instrumentation across sub-agents ā the Frida session is stateful and tied to one process.
Use extended thinking for:
Skip extended thinking for:
scripts/.ios keychain dump --json output (pattern match).otool / class-dump invocation and output collection.Mobile MCP (@anthropic/mobile-mcp --ios) provides iOS simulator / device UI automation:
evidence.screenshot.~/.claude/mcp.json:
{"mcpServers": {"mobile-mcp": {"command": "npx", "args": ["-y", "@anthropic/mobile-mcp", "--ios"]}}}
Emit every finding as JSON conforming to schemas/finding.json. iOS-specific fields: affected.bundle_id, affected.ios_version, affected.device_udid, affected.jailbroken, mastg_id, evidence.frida_pid, evidence.keychain_dump, evidence.screenshot.
| Workflow | File |
|---|---|
| Full assessment runbook | workflows/complete_assessment.md |
| SSL pinning bypass | workflows/ssl_pinning_bypass.md |
| Jailbreak-detection bypass | workflows/jailbreak_detection_bypass.md |
| Keychain extraction & triage | workflows/keychain_extraction.md |
| IPA decryption / acquisition | workflows/ipa_decryption.md |
| Auth & biometric testing | workflows/auth_testing.md |
| Area | File |
|---|---|
| Recon | methodology/recon.md |
| Static analysis | methodology/static_analysis.md |
| Dynamic analysis | methodology/dynamic_analysis.md |
| Network testing | methodology/network_testing.md |
| Data storage | methodology/data_storage.md |
| Crypto testing | methodology/crypto_testing.md |
| Auth testing | methodology/auth_testing.md |
| File | Purpose |
|---|---|
| payloads/jailbreak_detection_paths.txt | Common files/schemes iOS apps probe for jailbreak |
| payloads/url_scheme_tests.txt | URL scheme / deep-link test vectors |
scripts/)| Script | Purpose |
|---|---|
ssl_pinning_bypass.js |
Universal SSL/TLS pinning bypass |
jailbreak_bypass.js |
Jailbreak detection bypass |
biometric_bypass.js |
Touch ID / Face ID bypass |
keychain_hooks.js |
Keychain operation monitoring |
crypto_hooks.js |
Cryptographic operation tracing |
method_tracer.js |
Generic Objective-C method tracer |
| File | Purpose |
|---|---|
| references/ios_vulns.md | iOS vuln classes, severity tables, MASVS map |
| references/troubleshooting.md | Frida / pinning / proxy issue triage |
| references/frida_ios_snippets.md | Reusable Frida code snippets |
| references/bounty_patterns_2024_2026.md | Post-2023 bounty TTPs (URL-scheme / Universal-Link hijack, WebView deep-link XSS, Keychain IAM-token insecurity) |
| checklists/owasp_mastg_ios.md | Full MASTG iOS checklist |
| templates/finding_report.md | Markdown finding template |
| File | Purpose |
|---|---|
| examples/initial_setup.md | First-contact blueprint |
| examples/ssl_bypass_run.md | Pinning-bypass blueprint |
| examples/keychain_dump.md | Keychain dump & triage blueprint |
| Tool | Purpose | Install |
|---|---|---|
| Frida / frida-tools | Dynamic instrumentation | pip install frida-tools (ā„ 16.6) |
| Objection | Mobile exploration REPL | pip install objection (ā„ 1.11) |
| libimobiledevice | Device communication | brew install libimobiledevice |
| ios-deploy | App deploy | brew install ios-deploy |
| ideviceinstaller | App install / list | brew install ideviceinstaller |
| class-dump | ObjC header extraction | brew install class-dump |
| frida-ios-dump | FairPlay decryption | github.com/AloneMonkey/frida-ios-dump |
| Burp Suite | HTTPS interception | PortSwigger |
| Hopper / IDA / Ghidra | Binary RE | Vendor / GitHub |
| Mobile MCP | UI automation + screen capture | npx @anthropic/mobile-mcp --ios |
Run before every engagement ā fail fast if the lab is broken.
idevice_id -l # at least one UDID listed
ideviceinfo | grep ProductVersion
frida-ps -U # frida-server reachable
objection -g <bundle_id> explore --startup-command 'ios info binary; exit'
Jailbroken setup: OpenSSH + Frida (Sileo repo build.frida.re) + AppSync Unified + Filza. Non-jailbroken fallback: patch IPA with objection patchipa to inject Frida Gadget, or mount the developer disk image with ideviceimagemounter.
2026-04. Frida ā„ 16.6, Objection ā„ 1.11, iOS 15ā17 targets. For iOS 18+ jailbreak options shift to userspace-only (Dopamine/palera1n rootless) ā SSH path is /var/jb/usr/bin/ssh and Frida server lives at /var/jb/usr/sbin/frida-server.