iOS IPA static analysis — class-dump-z / class-dump-ng, Hopper / IDA / Ghidra for Mach-O ARM64, Objective-C runtime introspection, Swift demangling, App Transport Security check, plist analysis, embedded provisioning profile parse. For dynamic Frida/Objection see mobile/SKILL.md.
68
82%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
High
Do not use without reviewing
# Option 1: App Store (encrypted FairPlay — needs decryption from a jailbroken device)
# Option 2: ipatool — pulls IPAs from your Apple ID
ipatool download -b com.target.app
# Option 3: Frida-iOS-Dump (jailbroken device required)
# Pulls a decrypted IPA from the device's memory
frida-ios-dump -o app.ipa "<bundle-id>"unzip app.ipa -d app/
# Structure:
# app/Payload/<AppName>.app/
# <AppName> — Mach-O binary
# Info.plist — metadata
# embedded.mobileprovision — provisioning profile
# en.lproj/, Frameworks/, ...# 1. Info.plist — capabilities, URL schemes, ATS exceptions
plutil -p app/Payload/Foo.app/Info.plist
# Look for:
# CFBundleURLTypes — custom URL schemes (deep links)
# LSApplicationQueriesSchemes — schemes the app probes
# NSAppTransportSecurity — ATS exceptions (HTTP allowed?)
# UIBackgroundModes — long-running capabilities
# com.apple.developer.* — entitlements
# 2. Embedded provisioning profile — entitlements + cert chain
security cms -D -i app/Payload/Foo.app/embedded.mobileprovision | plutil -p -
# Look for:
# Entitlements (push, keychain access, app groups, network extension)
# Developer team ID (Apple-issued vs Enterprise)
# 3. Mach-O architecture + protection flags
file app/Payload/Foo.app/Foo
otool -hV app/Payload/Foo.app/Foo
# Flags: PIE (always on for iOS), STACK_PROTECT, MH_NO_HEAP_EXECUTION
# 4. Check encryption status
otool -l app/Payload/Foo.app/Foo | grep -A4 LC_ENCRYPTION_INFO
# cryptid 1 = encrypted (decrypt via frida-ios-dump first)
# cryptid 0 = ready to analyze# class-dump-z, class-dump-ng — extract Objective-C interface
class-dump-z -H app/Payload/Foo.app/Foo -o headers/
# Output: one .h file per class. Reveals method names, ivars, properties.
# class-dump (newer):
class-dump --arch arm64 -H app/Payload/Foo.app/Foo -o headers/
# For Swift symbols: swift-demangle
nm app/Payload/Foo.app/Foo | swift-demangle | headHeaders tell you:
NSURLSession / NSURLConnection (network) / Security.framework (crypto)# Hopper Disassembler — UI-focused, decent Obj-C support
# IDA Pro — best Objective-C / Swift but $$$
# Ghidra — free, growing iOS support
# rizin / radare2 — CLI:
r2 -A app/Payload/Foo.app/Foo
> afl # function list
> s sym._-[FooViewController login:] # navigate to a method
> pdf # disassemble + decompile (Cutter UI helps)strings app/Payload/Foo.app/Foo | grep -iE 'api[._-]?key|secret|token|password|bearer'
strings app/Payload/Foo.app/Foo | grep -iE '^[A-Za-z0-9+/]{40,}={0,2}$' # base64 candidates
strings app/Payload/Foo.app/Foo | grep -iE 'sk_live|pk_live|AKIA[0-9A-Z]{16}|AIza[0-9A-Za-z\-_]{35}' # AWS, Stripe, GCPstrings app/Payload/Foo.app/Foo | grep -iE 'https?://' | sort -ufind app/Payload/Foo.app -name '*.plist' -exec plutil -p {} \; 2>/dev/null | grep -iE 'google|firebase|amazon|azure|api'
find app/Payload/Foo.app -name 'GoogleService-Info.plist' # Firebase configplutil -p app/Payload/Foo.app/Info.plist | grep -A20 NSAppTransportSecurity
# NSAllowsArbitraryLoads = true → app allows HTTP. Why?
# NSExceptionDomains → list of allowed-HTTP domainsSearch the binary for:
NSUserDefaults-stored secrets (no encryption)kSecAttrAccessibleAlways (keychain item accessible always — no device-lock requirement)NSFileProtectionNone (file readable when device locked)plutil -p app/Payload/Foo.app/Info.plist | grep -A4 CFBundleURLSchemes
# Each scheme is a potential entry point. Check what method handles it
# in headers/ — `application:openURL:` or `scene:openURLContexts:`.find app/Payload/Foo.app -name '*.bundle' -o -name 'main.jsbundle' # React Native
find app/Payload/Foo.app -name 'cordova.js' # Cordova
# These are JavaScript — easier to RE; check for eval, postMessage handlersSee /skills/standard/mobile/SKILL.md (or /skills/standard/mobile/android/ for the Android counterpart). Use Frida + Objection on a jailbroken device for runtime hooking, SSL pinning bypass, jailbreak detection bypass.
31e1c8e
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.