Welcome to the "IOS App Penetration Testing Checklist" Repository!
Explore the ultimate companion for IOSapp penetration testing, meticulously crafted to identify vulnerabilities in network, data, storage, and permissions effortlessly. This repository merges a comprehensive checklist of tasks and cutting-edge techniques, providing security professionals with a robust framework for a thorough security assessment of IOS applications.
The checklist covers a range of topics, including:
Static analysis: reviewing the app's source code and resources for potential vulnerabilities
Dynamic analysis: analyzing the app's behavior and interactions with the device and network during runtime
Network analysis: analyzing the app's communication with servers and other external resources over the network
Permission analysis: reviewing the app's requested permissions and assessing whether they are appropriate and secure
Cryptographic analysis: reviewing the app's use of cryptography and ensuring that it is implemented securely
Data storage analysis: analyzing the app's handling of sensitive data, including how it is stored and transmitted
This checklist is intended as a starting point for penetration testers and bug bounty hunters to identify common security issues in IOS applications. It is not a comprehensive guide to all possible security issues and should be used in conjunction with other resources and best practices.
- Mobile Security Framework (MobSF) (Link)
- Runtime Mobile Security (RMS) (Link)
- Burp Suite (Link)
- Postman (Link)
for API's - Radare2 (Link)
- Objection (Link)
- Frida (Link)
- Grapefruit (Link)
- ios-deploy (Link)
- SSL Kill Switch 2 (Link)
- SwiftShield (Link)
- optool (Link)
- BinaryCookieReader (Link)
- r2flutch (Link)
- nm - iOS (Link)
- Frida for iOS (Link)
- Plutil (Link)
- dsdump (Link)
- Cydia
- iOSbackup (Link)
- MachoOView (Link)
- Usbmuxd (Link)
- iProxy (Link)
- simctl
- class-dump
- radare2 for iOS (Link)
- xcrun (Link)
- Keychain-Dumper (Link)
- Cycript (Link)
- Sileo (Link)
- lldb (Link)
- class-vdump-dyld (Link)
- security (Link)
- Frida-ios-dump (Link)
- otool (Link)
- Xcode (Link)
- swift-demangle
- gdb (Link)
- Xcode [(Link)](Command Line Tools https://developer.apple.com/download/more/)
#Tools-Installation
Grapefruit Installation
Grapefruit is an IOS app assessment tools that is using the FRIDA server on the iOS Device and is abstracting many penetration testing tasks in to a Web UI. It can be installed via npm.
npm install -g igf
grapefruit
With Grapefruit it's possible to explore different kinds of information concerning an iOS app. Once you selected the iOS app you can perform many tasks such as:
- Get information about the binary
- View folders and files used by the application and download them
- Inspect the Info.plist
- Get a UI Dump of the app screen shown on the iOS device
- List the modules that are loaded by the app
- Dump class names
- Dump keychain items
ios-deploy Installation
With ios-deploy you can install and debug iOS apps from the command line, without using Xcode. It can be installed via brew on macOS:
brew install ios-deployAlternatively:
git clone https://github.com/ios-control/ios-deploy.git
cd ios-deploy/
xcodebuild
cd build/Release
./ios-deploy
ln -s <your-path-to-ios-deploy>/build/Release/ios-deploy /usr/local/bin/ios-deployThe last line creates a symbolic link and makes the executable available system-wide. Reload your shell to make the new commands available:
zsh: # . ~/.zshrc
bash: # . ~/.bashrcSwiftShield Installation
SwiftShield ↗ is a tool that generates irreversible, encrypted names for your iOS project's objects (including your Pods and Storyboards). This raises the bar for reverse engineers and will produce less helpful output when using reverse engineering tools such as class-dump and Frida.
A sample Swift project is used to demonstrate the usage of SwiftShield.
Check out (sushi2k/SwiftSecurity ↗.) Open the project in Xcode and make sure that the project is building successfully (Product / Build or Apple-Key + B). (Download ↗) the latest release of SwiftShield and unzip it. Go to the directory where you downloaded SwiftShield and copy the swiftshield executable to /usr/local/bin:
cp swiftshield/swiftshield /usr/local/bin/In your terminal go into the SwiftSecurity directory (which you checked out in step 1) and execute the command swiftshield (which you downloaded in step 3):
$ cd SwiftSecurity
$ swiftshield -automatic -project-root . -automatic-project-file SwiftSecurity.xcodeproj -automatic-project-scheme SwiftSecuritySwiftShield is now detecting class and method names and is replacing their identifier with an encrypted value.
In the original source code you can see all the class and method identifiers:
SwiftShield was now replacing all of them with encrypted values that leave no trace to their original name or intention of the class/method:
optool Installation
optool ↗ is a tool which interfaces with MachO binaries in order to insert/remove load commands, strip code signatures, resign, and remove aslr.
To install it:
git clone https://github.com/alexzielenski/optool.git
cd optool/
git submodule update --init --recursive
xcodebuild
ln -s <your-path-to-optool>/build/Release/optool /usr/local/bin/optoolThe last line creates a symbolic link and makes the executable available system-wide. Reload your shell to make the new commands available:
zsh: # . ~/.zshrc
bash: # . ~/.bashrcBinaryCookieReader Installation
A tool to dump all the cookies from the binary Cookies.binarycookies file
Python BinaryCookieReader.py [Cookie.binarycookies-file-path]
https://github.com/as0ler/BinaryCookieReader/blob/master/BinaryCookieReader.pynm Installation
nm is a tool that displays the name list (symbol table) of the given binary. You can find here more information for for iOS.
Frida on iOS Installation Installing Frida on iOS
Start Cydia and add Frida's repository by navigating to Manage -> Sources -> Edit -> Add and entering https://build.frida.re ↗. You should then be able to find and install the Frida package.
$ frida-ps -U
PID Name
--- ----------------
963 Mail
952 Safari
416 BTServer
422 BlueTool
791 CalendarWidget
451 CloudKeychainPro
239 CommCenter
764 ContactsCoreSpotFrida on iOS Installation
Install Xcode Command Line Tools: plutil is part of the Xcode Command Line Tools package. You can install it by running the following command in Terminal:
xcode-select --installplutil -p file_name.plistFrida on iOS Installation iOSbackup is a Python 3 class that reads and extracts files from a password-encrypted iOS backup created by iTunes on Mac and Windows.
pip3 install iOSbackup --useriOSbackup Installatio
iOSbackup requires other two packages: biplist and pycryptodome that will be installed automatically by pip.
pycryptodome has an API compatible with older pycrypto, which should also work with iOSbackup. But pycryptodome is more well maintained and easier to install on Windows and macOS.
Usage
>>> from iOSbackup import iOSbackup
>>> iOSbackup.getDeviceList()
[{'udid': '00456030-000E4412342802E',
'name': 'mobileavi',
'ios': '13.2.3',
'serial': 'DNPPQRS0N4RW',
'type': 'iPhone12,3',
'encrypted': True},
{'udid': '00654030-01234412342802E',
'name': 'ipad',
'ios': '13.1.3',
'serial': 'DABCRS0N4RW',
'type': 'iPad10,1',
'encrypted': True}]usbmuxd Installatio
usbmuxd is a socket daemon that monitors USB iPhone connections. You can use it to map the mobile device's localhost listening sockets to TCP ports on your host computer. This allows you to conveniently SSH into your iOS device without setting up an actual network connection. When usbmuxd detects an iPhone running in normal mode, it connects to the phone and begins relaying requests that it receives via /var/run/usbmuxd.
Debian / Ubuntu Linux
First install all required dependencies and build tools:
sudo apt-get install \
build-essential \
pkg-config \
checkinstall \
git \
autoconf \
automake \
libtool-bin \
libplist-dev \
libusbmuxd-dev \
libimobiledevice-dev \
libimobiledevice-glue-dev \
libusb-1.0-0-dev \
udev
If systemd is not installed and should control spawning the daemon use:
sudo apt-get install \
systemdThen clone the actual project repository:
git clone https://github.com/libimobiledevice/usbmuxd.git
cd usbmuxdNow you can build and install it:
./autogen.sh
make
sudo make installIf you require a custom prefix or other option being passed to ./configure you can pass them directly to ./autogen.sh like this:
./autogen.sh --prefix=/opt/local --without-preflight --without-systemd
make
sudo make installTo output a list of available configure options use:
./autogen.sh --helpOR
submuxd --help
man
class-dump Installatio
class-dump by Steve Nygard is a command line utility for examining the Objective-C runtime information stored in Mach-O (Mach object) files. It generates declarations for the classes, categories, and protocols.
[submuxd](http://stevenygard.com/projects/class-dump/)
http://stevenygard.com/download/class-dump-3.5.dmg** Radare2 Installation **
Radare2 ↗ is a complete framework for reverse-engineering and analyzing binaries. The installation instructions can be found in the GitHub repository. To learn more on radare2 you may want to read the official radare2 book ↗.
Install On Mac:
brew install radare2Objection Usage
Show the different storage locations belonging to the app
OWASP.iGoat-Swift on (iPhone: 12.0) [usb] # envDisable popular ssl pinning methods
OWASP.iGoat-Swift on (iPhone: 12.0) [usb] # ios sslpinning disableDump the Keychain
OWASP.iGoat-Swift on (iPhone: 12.0) [usb] # ios keychain dumpDump the Keychain, including access modifiers. The result will be written to the host in myfile.json
OWASP.iGoat-Swift on (iPhone: 12.0) [usb] # ios keychain dump --json <myfile.json>Show the content of a plist file
OWASP.iGoat-Swift on (iPhone: 12.0) [usb] # ios plist cat <myfile.plist>OWASP.iGoat-Swift on (iPhone: 12.0) [usb] # ios hooking list classes
OWASP.iGoat-Swift on (iPhone: 12.0) [usb] # ios hooking list class_methods <ClassName>
OWASP.iGoat-Swift on (iPhone: 12.0) [usb] # ios bundles list_bundlesConnecting to a patched IPA
$ objection exploreor
$ objection -g <id process app> exploreUsing frida-ps to get the correct application name
$ frida-ps -Ua | grep -i Telegram
983 TelegramConnecting to the Telegram app through Frida-server
$ objection --gadget="Telegram" explore*** How to install IPA file into simulator IOS***
$ xcrun simctl list
all simulator will display and looking at booted simulator
$ xcrun simctl install BAB8FD1D-2503-45A9-9C2D-01F657F14453 /Users/name/Downloads/Testapp.app
*** Static Information Gathering***
$ unzip MyApp.ipa -d MyApp_extracted
$ plutil -p extracted_app/Payload/AppName.app/Info.plist
$ strings extracted_app/Payload/AppName.app/Info.plist
Inside, you'll find:
Payload/ → Contains the actual app .app bundle
iTunesMetadata.plist → Metadata for the app
Info.plist → Main configuration file
🔴 Vulnerable Settings:
✅ NSAllowsArbitraryLoads = YES → App allows insecure HTTP requests
✅ UIFileSharingEnabled = YES → Allows access to app files via iTunes
✅ CFBundleURLSchemes → Exposes custom URL schemes (potential attack surface)
*** Static Analysis of the IPA File***
$ cd MyApp_extracted/Payload/MyApp.app
$ ls -l
*** Analyze the App Binary***
$ file MyApp
Example output:
MyApp: Mach-O 64-bit executable arm64
This confirms that it's a Mach-O binary compiled for arm64.*** Check for Hardcoded Secrets***
$ strings MyApp | grep -i "password\|secret\|key\|token\|HTTP\|USERNAME\|username\|passw\|http\|credentials\|login\|backup\|logs\|log"
$ strings extracted_app/Payload/AppName.app/AppName | grep -i "key\|token\|password"
$ grep -r "password\|secret\|api_key" extracted_app/
Look for: ✅ Hardcoded API Keys
✅ Embedded Credentials
✅ Sensitive Debug Messages*** Check for Hardcoded Secrets v2 ***
$ find /var/mobile/Containers/Data/Application/ -name "*.plist" > plish.txt
$ for file in $(cat ~/Documents/IO-Sys/plist.txt); do strings "$file" | grep -i -E "token\|username\|password\|pass\|http\|api\|user\|log\|logs\|backup"; done
$ strings Runner | grep -i "secret\|password\|apikey\|token\|http\|https\|url\|urls\|string\|strings"*** Dynamic Analysis on a Jailbroken Device***
Install the IPA on a Jailbroken iPhone
$ scp MyApp.ipa root@192.168.1.100:/var/mobile/Documents/
Then, install it using appinst:
$ appinst /var/mobile/Documents/MyApp.ipa*** Bypass SSL Pinning***
If the app uses SSL pinning, bypass it with Frida:
$ frida -U -n MyApp -e "Interceptor.attach(Module.findExportByName(null, 'SSL_set_custom_verify'), { onEnter: function(args) { args[2] = 0; } });"*** Dump Keychain Data***
$ frida -U -n MyApp -e "console.log(JSON.stringify(Keychain.dump(), null, 2))"
This will reveal stored passwords, API keys, or tokens.*** Extract and Decrypt iOS IPA Files***
Some IPAs from the App Store are encrypted with Apple DRM (FairPlay). You can decrypt them using Frida:
$ frida -U -n MyApp -e "var mod = Module.findExportByName(null, '_platform_memcmp'); Interceptor.attach(mod, { onEnter: function(args) { this.args = args; }, onLeave: function(retval) { if (retval.toInt32() == 0) console.log(hexdump(args[1], {length: 32})); } });"
*** Inspect Info.plist for Security Misconfigurations***
The Info.plist file contains security settings for the app. Check for:
$ cat MyApp_extracted/Payload/MyApp.app/Info.plist
🔴 Vulnerable Settings: ✅ NSAllowsArbitraryLoads = YES → App allows insecure HTTP requests
✅ UIFileSharingEnabled = YES → Allows access to app files via iTunes
✅ CFBundleURLSchemes → Exposes custom URL schemes (potential attack surface)
*** Extracting App Entitlements***
$ codesign -d --entitlements - extracted_app/Payload/AppName.app
Look for Keychain Access Groups, Background Modes.
*** Checking Linked Libraries***
$ otool -L extracted_app/Payload/AppName.app/AppName
$ nm -U extracted_app/Payload/AppName.app/AppName
Identify security-sensitive libraries.*** Decompiling & Disassembling***
$ class-dump -H extracted_app/Payload/AppName.app -o headers/
$ hopper extracted_app/Payload/AppName.app/AppName
Extract Objective-C headers.*** Identifying Weak Cryptography***
$ strings extracted_app/Payload/AppName.app/AppName | grep -i "md5\|sha1\|base64\|aes"
Avoid MD5, SHA1, use AES-256.*** Identifying Insecure Data Storage***
$ find extracted_app -name "*.db"
$ find extracted_app -name "*.plist"
$ find extracted_app -name "*.log"
Look for SQLite databases, plist files, logs.*** Running the App in a Jailbroken Device***
Install Frida, Cycript, Objection for runtime analysis.
$ frida -U -n AppName -i
*** Bypassing Jailbreak Detection***
$ frida -U -n AppName -e 'Interceptor.attach(Module.findExportByName(null, "sysctl"), {onEnter: function(args) { args[1] = ptr("0");}})'
Avoid detection mechanisms checking /private/var/lib/apt/, cydia.app.*** Hooking Functions Using Frida***
$ frida -U -n AppName -e 'Interceptor.attach(Module.findExportByName(null, "objc_msgSend"), {onEnter: function(args) { console.log("Method called: " + Memory.readUtf8String(args[1])); }})'
Hook and log Objective-C function calls.*** Bypassing SSL Pinning***
$ frida -U -n AppName -e 'Interceptor.attach(Module.findExportByName(null, "SSLHandshake"), {onEnter: function(args) { args[0] = 0; console.log("SSL Pinning Bypassed!"); }})'
Disable SSL verification at runtime.
*** Inspecting Keychain Data***
$ keychain_dumper
Look for stored credentials, private keys.
📡 4. Network Security Testing
*** Capturing & Modifying Traffic (MITM)***
Use mitmproxy to intercept app traffic.
mitmproxy -p 8080
Route iOS device traffic through proxy.*** Checking for Insecure Requests***
$ tcpdump -i any port 80
look for unencrypted HTTP traffic.*** Testing API Endpoints***
$ curl -k -X POST "https://api.example.com/login" -d "username=admin&password=admin"
Test API security, parameter tampering.🔓 5. Exploitation
*** Dumping Memory***
$ objection -g AppName explore
memory dump
Extract in-memory data.*** Bypassing FaceID / TouchID***
$ objection -g AppName explore
$ ios biometrics bypass
Authenticate without valid biometrics.*** Modifying Plist Files***
$ plutil -convert xml1 Info.plist
$ nano Info.plist
Modify permissions, configurations.*** Modifying Runtime Behavior***
$ frida -U -n AppName -e 'Interceptor.attach(Module.findExportByName(null, "objc_msgSend"), {onEnter: function(args) { console.log("Intercepted Method: " + Memory.readUtf8String(args[1])); }})'
Inject hooks to modify app behavior.https://apt.bingner.com/ http://apt.thebigboss.org/repofiles/cydia/ https://repo.chariz.com/ https://repo.dynastic.co/ https://build.frida.re/ https://cydia.ichitaso.com/ https://ios.jjolano.me/ https://cydia.akemi.ai/ https://repo.co.kr/ https://repo.misty.moe/apt/ http://apt.modmyi.com/ https://ryleyangus.com/repo/ http://cydia.zodttd.com/repo/cydia/
Installation Tools
*** Installation KeyChain_dump On MacBook***
$ git clone https://github.com/ptoomey3/Keychain-Dumper.git
$ cd Keychain-Dumper
move keychain-dumper to iphone /private/var/root
keychian_dumper + enter
It will list all stored passwords, certificates, and sensitive tokens in macOS Keychain.
*** Checking Logs for Sensitive Data
*** Use strings to search for log statements:***
$ strings MyApp.app/MyApp | grep -i "NSLog\|NSAssert\|NSCAssert\|fprintf\|Logfile\|Logging"
If you see sensitive logs, the app might be leaking information in logs.
*** Decompile & Perform Source Code Review***
$ hopper MyApp.app/MyApp
Look for logging functions (NSLog, fprintf, etc.).
Check if logs expose sensitive information.
*** Identify Third-Party Libraries & SDKs***
$ strings Info.plist | grep -i "sdk\|api\|key\|analytics"
$ strings Runner | grep -r "http\|https"
Common third-party services:
Firebase Analytics (GoogleService-Info.plist)
Facebook SDK (FBSDK*)
Crashlytics (fabric.apiKey)
Ad SDKs (AdMob, MoPub, Adjust)
*** Check for hardcoded API endpoints:***
Open the decompiled app and search for URLs:
$ grep -r "http\|https" .
Ensure API requests are using HTTPS (NSAppTransportSecurity in Info.plist).*** Inspect potential sensitive data sharing functions:***
Open the decompiled app and search for URLs:
$ grep -r "NSUserDefaults" .
$ grep -r "NSLog" .
$ grep -r "UIPasteboard" .
Bad Practices:
Storing sensitive info in NSUserDefaults
Logging sensitive data via NSLog
Copying user data to UIPasteboard (clipboard)Dynamic Analysis (Runtime Monitoring & Traffic Inspection) *** Monitor Network Traffic (MitM Attack)***
Use Burp Suite or MITM Proxy to intercept API traffic:
Configure Burp Suite or mitmproxy on the iOS simulator or jailbroken device.
Route all traffic through the proxy.
Look for:
Unencrypted data (HTTP instead of HTTPS)
PII exposure (Usernames, emails, session tokens)
Unnecessary API calls to third parties
Use tcpdump to capture traffic:
$ tcpdump -i any -X -s 0 -w network.pcap
Analyze the .pcap file with Wireshark.*** Monitor File & Keychain Access***
Check for insecure data storage:
$ frida -U -n AppName -e 'Interceptor.attach(Module.findExportByName(null, "NSUserDefaults"), { onEnter: function(args) { console.log("NSUserDefaults Accessed"); } });'
Look for sensitive information stored in:
NSUserDefaults
Keychain
Cache or Documents folder
*** Monitor runtime logs with Frida***
Check for insecure data storage:
$ frida -U -n AppName -e 'console.log(NSLog)'
Check if sensitive info is being logged.
Testing a Flutter iOS .ipa File for Security Issues
*** Extract & Decompile .ipa File***
📌 Objective: Extract and analyze the app’s contents, including strings, libraries, and resources.
🚀 Steps to Test
✅ Convert .ipa to .zip and extract it
$ mv app.ipa app.zip && unzip app.zip -d extracted_app
$ cd extracted_app/Payload/Runner.app/
✅ Analyze the binary for sensitive information
$ strings Runner | grep -i "password"
$ strings Runner | grep -i "api_key"
$ strings Runner | grep -i "token"
✅ Check Flutter assets and bundled files
$ find . -name "*.json"
$ find . -name "*.xml"
$ find . -name "*.sqlite"
$ find . -name "*.db"
$ find . -type f
✅ List binary functions and symbols
$ nm Runner | grep -i "debug"
Fix: Do not store API keys, credentials, or sensitive data in assets or bundled files.
2️⃣ Static Analysis for Hardcoded Secrets
📌 Objective: Detect secrets or credentials hardcoded in the app binary.
🚀 Steps to Test
✅ Use rabin2 (from radare2) to find stored URLs and secrets
$ rabin2 -z Runner | grep -i "http"
$ rabin2 -z Runner | grep -i "token"
✅ Use nm to list symbols in the binary
nm Runner | grep -i "password"
📌 Fix: Use environment variables or encrypted storage instead of hardcoded values.
3️⃣ Check for Weak Permissions
📌 Objective: Analyze Info.plist for security misconfigurations.
🚀 Steps to Test
✅ Check permissions and security settings in Info.plist
$ cat Info.plist | grep -A5 -i "NSAllowsArbitraryLoads"
$ cat Info.plist | grep -A5 -i "UIFileSharingEnabled"
$ plutil -convert xml1 Info.plist -o Info.xml
$ cat Info.xml
$ grep -A3 -i "NSAllowsArbitraryLoads" Info.xml
$ grep -A3 -i "UIFileSharingEnabled" Info.xml
🔴 Red Flags:
NSAllowsArbitraryLoads=true (App allows insecure HTTP connections)
UIFileSharingEnabled=true (Users can access app files via USB)
📌 Fix: Set NSAllowsArbitraryLoads=false and UIFileSharingEnabled=false.
✅ Check if sensitive permissions are being misused
$ grep -E "NSLocationAlwaysUsageDescription|NSCameraUsageDescription|NSMicrophoneUsageDescription" Info.plist
📌 Fix: Set NSAllowsArbitraryLoads=false and disable file sharing if not needed.
4️⃣ Analyze Local Storage for Sensitive Data
📌 Objective: Detect if sensitive data is being stored in insecure locations.
🚀 Steps to Test
✅ Find SQLite databases and inspect stored data
$ find . -name "*.db"
$ sqlite3 app_data.db "SELECT * FROM users;"
✅ Check for plaintext logs in the app’s sandbox
$ find . -name "*.log"
$ cat Runner.log
📌 Fix: Use secure storage (flutter_secure_storage) and avoid logging sensitive data.
5️⃣ Dynamic Analysis: Run .ipa in a Jailbroken Device
📌 Objective: Detect runtime security flaws, memory leaks, and improper API usage.
🚀 Steps to Test
✅ Install the .ipa on a jailbroken iOS device
៛ ideviceinstaller -i app.ipa
✅ Use frida to inspect runtime API calls
$ frida -U -n Runner -e "Interceptor.attach(Module.findExportByName(null, 'objc_msgSend'), { onEnter: function(args) { console.log('Calling:', ObjC.Object(args[1]).toString()); }});"
✅ Use frida to bypass security checks
$ frida -U -n Runner -e "Interceptor.attach(Module.findExportByName(null, 'objc_msgSend'), { onEnter: function(args) { console.log('Calling:', ObjC.Object(args[1]).toString()); }});"
✅ Check for weak jailbreak detection
$ frida -U -n Runner -e "console.log('Jailbreak detected:', ObjC.classes.JailbreakDetection.checkJailbreak());"
📌 Fix: Enable jailbreak detection and use obfuscation techniques.
🔴 Red Flags:
App fails to detect jailbroken environments
Sensitive data is accessible on jailbroken devices
📌 Fix: Implement jailbreak detection (e.g., checking for cydia:// or /private/var/lib/apt/).
6️⃣ Network Security: Perform MITM Attack
📌 Objective: Check for insecure API requests and plaintext data transmission.
🚀 Steps to Test
✅ Set up a proxy using Burp Suite and intercept network traffic
Run Burp Suite and configure it as a proxy
Configure the iOS Simulator to route traffic through Burp
Intercept and analyze network traffic
✅ Find unencrypted requests
$ grep -i "http://" burp_proxy.log
📌 Fix: Enforce HTTPS and use SSL pinning to prevent MITM attacks.
🚀 Steps to Test
✅ Set up a proxy with Burp Suite
Open Burp Suite → Proxy → Intercept
Configure iOS to use Burp's proxy (Wi-Fi Settings → Proxy)
Intercept network traffic while using the app
✅ Look for insecure HTTP API calls
$ grep -i "http://" burp_proxy.log
✅ Test SSL/TLS Certificate Pinning
If SSL Pinning is enabled, Burp will fail to intercept traffic
If SSL Pinning is NOT enabled, you can see API requests
📌 Fix: Enforce HTTPS-only connections and implement SSL Pinning.
7️⃣ Reverse Engineering: Disassemble & Analyze Code
📌 Objective: Disassemble the .ipa and look for security vulnerabilities.
🚀 Steps to Test
✅ Use Hopper or Ghidra to decompile the app binary
Open Runner in Hopper Disassembler or Ghidra
Analyze class names and function calls
Search for keywords like "password", "secret", "key"
✅ Use class-dump to extract class structures
$ class-dump -H Runner -o output_dir
📌 Fix: Use Dart obfuscation and remove debugging symbols before release.
✅ Use Hopper Disassembler or Ghidra for deep analysis
Load Runner binary in Hopper Disassembler
Search for passwords, API keys, or encryption logic
✅ Check for weak encryption methods
$ strings Runner | grep -i "AES"
$ strings Runner | grep -i "MD5"
🔴 Red Flags:
Weak encryption (MD5, DES) found
Sensitive data (API keys, passwords) visible in disassembly
📌 Fix: Use strong encryption (AES-256, SHA-256) and obfuscate sensitive logic.
💾 8 Local Storage Analysis
📌 Objective: Check if sensitive data is stored in an insecure location.
🚀 Steps to Test
✅ Find SQLite databases, logs, and cache files
$ find . -name "*.db" -o -name "*.log" -o -name "*.sqlite"
✅ Extract and inspect SQLite databases
$ sqlite3 app_data.db "SELECT * FROM users;"
$ sqlite3 app_data.db ".tables"
✅ Check if sensitive data is in NSUserDefaults (plaintext storage)
$ grep -r "NSUserDefaults" .
🔴 Red Flags:
User credentials or tokens stored in SQLite database unencrypted
Logging sensitive data in .log files
📌 Fix: Use Flutter Secure Storage or Keychain Services to securely store credentials.🚨 6. Post-Exploitation & Reporting 6.1 Common Vulnerabilities & Fixes Vulnerability Impact Fix Hardcoded Credentials API abuse, data exposure Use secure storage (Keychain) Weak Encryption (MD5, SHA1) Data leakage Use AES-256 Insecure Data Storage Data compromise Encrypt sensitive data ATS Disabled MITM attack Enforce HTTPS Jailbreak Detection Bypass Security bypass Implement multiple checks 6.2 Remediation Checklist ✔ Use Secure Enclaves & Keychain for Sensitive Data ✔ Enforce SSL Pinning & HTTPS Only Connections ✔ Encrypt Sensitive Data Before Storage ✔ Harden Jailbreak Detection ✔ Use Static & Dynamic Analysis Tools for Security Audits
🛠️ Best iOS Penetration Testing Tools Tool Usage Frida Runtime instrumentation Objection Bypass protections Class-dump Extract Objective-C headers Hopper / Ghidra Reverse engineering Keychain_dumper Extract saved credentials MobSF Automated app analysis mitmproxy MITM attack & network sniffing SSLKillSwitch2 Bypass SSL pinning 🛡️ Advanced iOS Security Hardening ✔ Enable ATS (App Transport Security) ✔ Implement Strong SSL Pinning ✔ Use Secure Storage for API Keys & Passwords ✔ Harden Binary with Anti-Debugging Techniques ✔ Implement Strong Runtime Integrity Checks ✔ Use Secure Communication Libraries
*** To Install IPA File to Iphone**
Go to download from website: https://sideloadly.io/
then install -> drop file IPA and login with Apple ID

