Pull a decrypted IPA from a jailbroken device and extract .ipa files from jailbroken iOS devices using Frida 17+. Supports metadata analysis, and IPA comparison (Work in progress).
Note: This project was inspired by frida-ios-dump. I created
frida-ios-dump-ngto address stability issues, improve performance with async techniques, and add new features like metadata analysis and diffing. Thanks to AloneMonkey for the inspiration and the original tool and Frida for the amazing framework.
- Metadata Analysis: Extracts Info.plist, entitlements, and provisioning profiles (
--metadata). - Full Data Extraction: Dumps not just the binary but the entire app data container (
--app-data). - IPA Diff: Compare two IPA versions to see file changes, permission updates, and entitlement differences (
--diff). - Structured Logging: Detailed logs with configurable verbosity levels (
-v,-vv).
- Python 3.9+
- Jailbroken iOS device
frida-server(tested with Frida 17+) running on the device- OpenSSH (optional, but recommended for faster transfers)
-
Clone the repository:
git clone https://github.com/incogbyte/frida-ios-dump-ng.git cd frida-ios-dump-ng -
Create a virtual environment and install dependencies:
python3 -m venv .venv source .venv/bin/activate pip install -r requirements.txt
python3 extract.py -h
usage: extract.py [-h] [-f SPAWN] [--pid PID] [-o OUTPUT] [--app-data] [--metadata] [--diff IPA1 IPA2] [--no-resume] [-U] [-H HOST] [-P PORT] [-u USERNAME] [-p PASSWORD] [--workers WORKERS] [-v] [-q]
[--log-file LOG_FILE]
[target]
Extract a decrypted IPA from a jailbroken iOS device using Frida.
positional arguments:
target App name/bundle id for a running app (when -f/--pid is not used)
options:
-h, --help show this help message and exit
-f SPAWN Spawn an app by name or bundle id
--pid PID Attach to an existing PID
-o OUTPUT Output IPA path
--app-data Dump the app data container to <AppName>-data
--metadata Show app metadata (Info.plist, entitlements) after extraction
--diff IPA1 IPA2 Compare two IPA files and show differences
--no-resume Do not resume a spawned process (useful for crashy apps)
-U Use USB device
-H HOST SSH host for the device
-P PORT SSH port (default 22)
-u USERNAME SSH username
-p PASSWORD SSH password
--workers WORKERS Number of parallel download workers (default 4)
-v, --verbose Increase verbosity (-v for verbose, -vv for debug)
-q, --quiet Suppress output except errors
--log-file LOG_FILE Write logs to file
python3 extract.py
Connection: USB
Transfer: Frida RPC
1) Notes (com.apple.mobilenotes) pid=5877
2) Maps (com.apple.Maps) pid=5181
3) App Store (com.apple.AppStore) pid=5195
4) Safari (com.apple.mobilesafari) pid=3048
Select an app to extract:
python3 extract.py <app.bundle.name>Displays detailed app information including permissions, URL schemes, and all entitlements.
python3 extract.py -U -f com.apple.mobilenotes --metadataOutput includes: Info.plist details, minimum iOS version, and a full list of entitlements.
Extracts the IPA and the app's data container (Documents, Library, etc.). Useful for forensic analysis or backups.
python3 extract.py -U -f com.whatsapp.WhatsApp --app-data
# Creates: WhatsApp.ipa AND WhatsApp-data/ folderCompare two IPA files to see what changed between versions. No device connection required.
python3 extract.py --diff v1.0.ipa v1.1.ipaReports: File size changes, added/removed files, version bumps, and permission/entitlement changes.
Use SSH/SFTP for file transfer while keeping Frida over USB.
# Connect via USB for Frida, but use SSH (192.168.1.13) for data transfer
python3 extract.py -U -f com.example.app -H 192.168.1.13 -u mobile -p alpine-v: Verbose output (informational logs)-vv: Debug output (timestamps, file/line info)-q: Quiet mode (errors only)--log-file <file>: Save logs to a file
python3 extract.py -U -f com.example.app -vv --log-file dump.log| Argument | Description |
|---|---|
-f <target> |
Spawn an app (Bundle ID or Name) |
--pid <pid> |
Attach to a running process ID |
-o <path> |
Output IPA path |
-U |
Connect via USB |
-H <host> |
SSH host address |
--app-data |
Dump app data container (Documents, Library, etc.) |
--metadata |
Show Info.plist and Entitlements after dump |
--diff <f1> <f2> |
Compare two IPA files |
--workers <n> |
Number of download threads (default: 4) |
--no-resume |
Keep app suspended (avoids anti-jailbreak checks) |
- Frida attach timed out: Use
-fto spawn the app instead of attaching to a running one. - Connection refused: Ensure
frida-serveris running on the device. - SSH errors: Check if you can SSH into the device manually (
ssh mobile@IP). If using a different port (e.g., 2222), specify it with-P 2222.