| name | ios-pentesting |
| description | iOS application security testing and pentesting. Use this skill whenever the user needs to test iOS apps for security vulnerabilities, analyze IPA files, perform static/dynamic analysis, check data storage security, test local authentication, or conduct mobile security assessments. Make sure to use this skill for any iOS security testing, app analysis, vulnerability assessment, or mobile pentesting tasks, even if the user doesn't explicitly mention 'pentesting' or 'security testing'. |
iOS Pentesting Skill
A comprehensive skill for performing security testing on iOS applications, including static analysis, dynamic analysis, data storage assessment, and vulnerability identification.
When to Use This Skill
Use this skill when:
- Testing iOS applications for security vulnerabilities
- Analyzing IPA files for security issues
- Performing static or dynamic analysis on iOS apps
- Checking data storage security (plist, SQLite, Keychain, etc.)
- Testing local authentication and biometric implementations
- Analyzing binary files for weak cryptography or insecure functions
- Conducting mobile security assessments
- Investigating iOS app security configurations
Prerequisites
Before starting iOS pentesting:
- Jailbroken device or iOS simulator with appropriate tools installed
- IPA file of the target application
- Required tools: Frida, Objection, otool, class-dump, MobSF (optional)
- Device connection via USB or network
Testing Workflow
1. Initial Setup
frida-ps -Uai
objection explore -g ios
ios env
2. Static Analysis
Extract and Analyze IPA
mv app.ipa app.zip
unzip app.zip
cd app.app/
Check Binary Protections
Use the check_binary_protections.sh script to verify security features:
./scripts/check_binary_protections.sh <app-binary>
This checks for:
- PIE (Position Independent Executable)
- Stack Canaries
- ARC (Automatic Reference Counting)
- Binary Encryption
Identify Insecure Functions
Use the scan_insecure_functions.sh script to find vulnerable function calls:
./scripts/scan_insecure_functions.sh <app-binary>
This scans for:
- Weak hashing (MD5, SHA1)
- Insecure random functions
- Dangerous memory functions (gets, sprintf, etc.)
- Insecure malloc usage
Analyze Info.plist
plutil -convert xml1 Info.plist
plistutil -i Info.plist -o Info_xml.plist
grep -i "UsageDescription" Info.plist
grep -i "CFBundleURLTypes" Info.plist
grep -i "NSAppTransportSecurity" Info.plist
3. Data Storage Analysis
Find and Analyze Plist Files
find /private/var/mobile/Containers/Data/Application/{APPID} -name "*.plist"
objection explore -g ios
ios nsuserdefaults get
ios plist cat /path/to/file.plist
Scan for SQLite Databases
find /private/var/mobile/Containers/Data/Application/{APPID} -name "*.sqlite" -o -name "*.db"
ls /private/var/mobile/Containers/Data/Application/{APPID}/Library/Application\ Support/
Check Realm Databases
find /private/var/mobile/Containers/Data/Application/{APPID} -name "*.realm*"
Analyze Cookies
objection explore -g ios
ios cookies get --json
ls /private/var/mobile/Containers/Data/Application/{APPID}/Library/Cookies/
Check Keychain
objection explore -g ios
ios keychain dump
ios nsurlcredentialstorage dump
4. Dynamic Analysis
Hook and Monitor with Objection
objection explore -g ios
ios monitor crypt
ios sslpinning disable
ios ui biometrics_bypass
Use Frida for Custom Hooking
frida-ps -U
frida -U -f <bundle-id> --no-pause -l hook_script.js
5. Local Authentication Testing
Check for LocalAuthentication Framework
otool -L <app-binary>
Test Biometric Bypass
objection explore -g ios
ios ui biometrics_bypass
frida -U -f <bundle-id> --no-pause -l scripts/bypass_biometrics.js
6. Network Security Testing
Check for SSL Pinning
objection explore -g ios
ios sslpinning disable
Test Certificate Validation
- Set up Burp Suite proxy
- Install Burp CA certificate on device
- Test if app validates hostname correctly
- Create certificate for different hostname and test
7. Memory Analysis
Dump Application Memory
fridump -U <bundle-id> -o memory_dump.bin
strings memory_dump.bin > strings.txt
rabin2 -zz memory_dump.bin > strings.txt
Runtime Memory Search
r2 frida://usb//<app-name>
[0x00000000]> /\ <search-pattern>
8. Backup Analysis
Create and Analyze Backups
grep -r "password" backup_directory/
grep -r "token" backup_directory/
Common Vulnerability Patterns
Data Storage Issues
- Unencrypted sensitive data in plist files
- Hardcoded credentials in source code
- Weak encryption (MD5, SHA1, RC4)
- Insecure Keychain usage (missing access control)
- Sensitive data in backups
Authentication Issues
- Biometric bypass (evaluatePolicy always returns true)
- Missing local authentication for sensitive operations
- Insecure credential storage
Network Issues
- Missing SSL pinning
- Certificate validation bypass
- Unencrypted communication
Binary Issues
- Missing PIE
- Missing stack canaries
- Insecure function usage (gets, sprintf, etc.)
- Hardcoded secrets
Reporting
When documenting findings:
- Vulnerability Type: Clear classification
- Severity: Critical/High/Medium/Low
- Location: File, function, or code path
- Evidence: Screenshots, code snippets, or command output
- Impact: What an attacker could achieve
- Remediation: Specific fix recommendations
Tools Reference
| Tool | Purpose |
|---|
| Frida | Dynamic instrumentation |
| Objection | Runtime exploration |
| otool | Binary analysis |
| class-dump | Objective-C header extraction |
| MobSF | Automated static analysis |
| Hopper/IDA | Binary disassembly |
| Burp Suite | Network interception |
| Keychain-Dumper | Keychain extraction |
Safety Notes
- Always obtain proper authorization before testing
- Test on your own devices or authorized test environments
- Be aware that some operations require jailbroken devices
- Document all changes made during testing
- Restore devices to original state after testing
Next Steps
After completing analysis:
- Compile findings into a security report
- Prioritize vulnerabilities by severity
- Provide remediation guidance
- Consider retesting after fixes are applied
- Update testing procedures based on lessons learned