| name | ipsw |
| description | Apple firmware and binary reverse engineering with the ipsw CLI tool. Use when analyzing iOS/macOS binaries, disassembling functions in dyld_shared_cache, dumping Objective-C headers from private frameworks, downloading IPSWs or kernelcaches, extracting entitlements, analyzing Mach-O files, or researching Apple security. Triggers on requests involving Apple RE, iOS internals, kernel analysis, KEXT extraction, or vulnerability research on Apple platforms. |
IPSW - Apple Reverse Engineering Toolkit
Install: brew install blacktop/tap/ipsw
Choose Your Workflow
Firmware Acquisition
ipsw download ipsw --device iPhone16,1 --latest
ipsw download ipsw --device iPhone16,1 --latest --kernel --dyld
ipsw extract --kernel iPhone16,1_18.0_Restore.ipsw
ipsw extract --dyld --dyld-arch arm64e iPhone16,1_18.0_Restore.ipsw
ipsw extract --kernel --remote <IPSW_URL>
See references/download.md for device identifiers and advanced options.
Userspace RE (dyld_shared_cache)
macOS DSC: /System/Volumes/Preboot/Cryptexes/OS/System/Library/dyld/dyld_shared_cache_arm64e
Essential Commands
| Command | Purpose |
|---|
dyld a2s <DSC> <ADDR> | Address → symbol (triage crash LR/PC) |
dyld symaddr <DSC> <SYM> --image <DYLIB> | Symbol → address |
dyld disass <DSC> --vaddr <ADDR> | Disassemble at address |
dyld disass <DSC> --symbol <SYM> --image <DYLIB> | Disassemble by symbol |
dyld xref <DSC> <ADDR> --all | Find all references to address |
dyld dump <DSC> <ADDR> --size 256 | Dump raw bytes at address |
dyld str <DSC> "pattern" --image <DYLIB> | Search strings |
dyld objc --class <DSC> --image <DYLIB> | List ObjC classes |
dyld extract <DSC> <DYLIB> -o ./out/ | Extract dylib for external tools |
Common Workflow
ipsw dyld a2s $DSC 0x1bc39e1e0
ipsw dyld disass $DSC --vaddr 0x1bc39e1e0
ipsw dyld xref $DSC 0x1bc39e1a0 --all
ipsw dyld dump $DSC 0x1bc39e200 --size 64
Tip: Always use --image <DYLIB> - it's 10x+ faster.
See references/dyld.md for complete DSC commands.
Kernel Analysis
ipsw kernel kexts kernelcache.release.iPhone16,1
ipsw kernel extract kernelcache sandbox --output ./kexts/
ipsw kernel syscall kernelcache
ipsw kernel kexts --diff kernelcache_17.0 kernelcache_18.0
See references/kernel.md for KEXT extraction and kernel analysis.
Entitlements
ipsw macho info --ent /path/to/binary
ipsw ent --sqlite ent.db --ipsw iOS18.ipsw
ipsw ent --sqlite ent.db --key "com.apple.private.security.no-sandbox"
ipsw ent --sqlite ent.db --key "platform-application"
ipsw ent --sqlite ent.db --key "com.apple.private.tcc.manager"
See references/entitlements.md for common entitlements and query patterns.
Class Dump
Dump Objective-C headers from binaries or dyld_shared_cache:
ipsw class-dump $DSC SpringBoardServices --headers -o ./headers/
ipsw class-dump $DSC Security --class SecKey
ipsw class-dump $DSC UIKit --class 'UIApplication.*' --headers -o ./headers/
ipsw class-dump $DSC Security --re
See references/class-dump.md for filtering and output options.
Mach-O Analysis
ipsw macho info /path/to/binary
ipsw macho disass /path/to/binary --symbol _main
ipsw macho info --ent /path/to/binary
ipsw macho info --sig /path/to/binary
See references/macho.md for complete Mach-O commands.
Reference Files
Tips
- Symbol caching: First
a2s/symaddr creates .a2s cache - subsequent lookups are instant
- Use --image flag: Specifying dylib is 10x+ faster for DSC operations
- JSON output: Most commands support
--json for scripting
- Device IDs: Use
ipsw device-list to find device identifiers