
Ipsw
- 157 installs
- 74 repo stars
- Updated May 4, 2026
- blacktop/ipsw-skill
Dump Objective-C and Swift headers from IPSW firmware, dyld shared caches, and Mach-O binaries when you need class layouts without Xcode symbols.
About
ipsw is an agent skill that documents how to use the ipsw CLI to dump Objective-C class headers from IPSW images, dyld shared caches, and Mach-O binaries, including filters and Swift-oriented workflows. Solo and indie builders working on iOS, macOS, or security-minded mobile tooling install it when they need reproducible class maps without opening every binary in a GUI disassembler. The skill is organized as a complete reference—from basic invocation through cache extraction, per-binary dumps, class filtering, header generation, formatting, and Swift-specific steps—so an agent can follow procedural steps instead of guessing flags. It fits the Build phase when you are integrating against closed-source frameworks, validating ABI assumptions, or documenting private API surfaces for internal tools. Complexity is advanced because it assumes comfort with Mach-O, caches, and Apple release artifacts. It is a documentation-style integration skill, not an MCP server or a generic debugger wrapper.
- Reference covers basic usage, dyld_shared_cache, and standalone Mach-O binaries
- Filtering classes and header generation with output formatting options
- Dedicated Swift dumping section alongside Objective-C class dumps
- Table-of-contents structure across seven major workflow areas
Ipsw by the numbers
- 157 all-time installs (skills.sh)
- Ranked #522 of 1,039 Mobile Development skills by installs in the Skillselion catalog
- Security screen: MEDIUM risk (skills.sh audit)
- Data as of Jul 31, 2026 (Skillselion catalog sync)
npx skills add https://github.com/blacktop/ipsw-skill --skill ipswAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 157 |
|---|---|
| repo stars | ★ 74 |
| Security audit | 2 / 3 scanners passed |
| Last updated | May 4, 2026 |
| Repository | blacktop/ipsw-skill ↗ |
What it does
Dump Objective-C and Swift headers from IPSW firmware, dyld shared caches, and Mach-O binaries when you need class layouts without Xcode symbols.
Files
IPSW - Apple Reverse Engineering Toolkit
Install: brew install blacktop/tap/ipsw (Linux: see https://github.com/blacktop/ipsw#install)
Choose Your Workflow
| Goal | Start Here |
|---|---|
| Download/extract firmware | Firmware Acquisition |
| Reverse engineer userspace | Userspace RE |
| Analyze kernel/KEXTs | Kernel Analysis |
| Research entitlements | Entitlements |
| Dump private API headers | Class Dump |
| Analyze standalone binary | Mach-O Analysis |
| Diff two IPSWs/OTAs | Firmware Diffing |
| Symbolicate a crash / panic | Symbolication |
| Parse IMG4/AEA/iBoot/SEP | Firmware Components |
| Decompile / query sandbox profiles | Sandbox Profile Analysis |
| Inspect / mount an IPSW | IPSW Inspection |
---
Firmware Acquisition
# Download latest IPSW for device
ipsw download ipsw --device iPhone16,1 --latest
# Download with automatic kernel/DSC extraction
ipsw download ipsw --device iPhone16,1 --latest --kernel --dyld
# Extract components from local IPSW
ipsw extract --kernel iPhone16,1_18.0_Restore.ipsw
ipsw extract --dyld --dyld-arch arm64e iPhone16,1_18.0_Restore.ipsw
# Remote extraction (no full download)
ipsw extract --kernel --remote <IPSW_URL>See references/download.md for device identifiers and advanced options.
---
Userspace RE (dyld_shared_cache)
macOS DSC location:
- macOS 14+:
/System/Volumes/Preboot/Cryptexes/OS/System/Library/dyld/dyld_shared_cache_arm64e - macOS 13 and earlier:
/System/Library/dyld/dyld_shared_cache_arm64e
Examples below assume:
export DSC=/System/Volumes/Preboot/Cryptexes/OS/System/Library/dyld/dyld_shared_cache_arm64eEssential 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
# 1. Resolve address from crash/trace
ipsw dyld a2s $DSC 0x1bc39e1e0
# → -[SomeClass someMethod:] + 0x40
# 2. Disassemble around that address
ipsw dyld disass $DSC --vaddr 0x1bc39e1e0
# 3. Find who calls this function
ipsw dyld xref $DSC 0x1bc39e1a0 --all
# 4. Extract string/data referenced in disassembly
ipsw dyld dump $DSC 0x1bc39e200 --size 64See references/dyld.md for complete DSC commands.
---
Kernel Analysis
# List all KEXTs
ipsw kernel kexts kernelcache.release.iPhone16,1
# Extract specific KEXT
ipsw kernel extract kernelcache sandbox --output ./kexts/
# Dump syscalls
ipsw kernel syscall kernelcache
# Diff KEXTs between versions
ipsw kernel kexts --diff kernelcache_17.0 kernelcache_18.0See references/kernel.md for KEXT extraction and kernel analysis.
---
Entitlements
# Single binary entitlements
ipsw macho info --ent /path/to/binary
# Build searchable database from IPSW
ipsw ent --sqlite ent.db --ipsw iOS18.ipsw
# Query database
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:
# Dump all headers from framework in DSC
ipsw class-dump $DSC SpringBoardServices --headers -o ./headers/
# Dump specific class
ipsw class-dump $DSC Security --class SecKey
# Filter by pattern
ipsw class-dump $DSC UIKit --class 'UIApplication.*' --headers -o ./headers/
# Include runtime addresses (for hooking)
ipsw class-dump $DSC Security --re
# Swift class-dump (separate command, same shape)
ipsw swift-dump $DSC SwiftUI --headers -o ./headers/See references/class-dump.md for filtering and output options.
---
Mach-O Analysis
# Full binary info
ipsw macho info /path/to/binary
# Disassemble function
ipsw macho disass /path/to/binary --symbol _main
# Get entitlements and signature
ipsw macho info --ent /path/to/binary
ipsw macho info --sig /path/to/binarySee references/macho.md for complete Mach-O commands.
---
Firmware Diffing
Compare two IPSWs, OTAs, or patched OTA directories — surfaces added/removed binaries, entitlement changes, function-starts deltas, and KEXT diffs.
# Diff two IPSWs (markdown report)
ipsw diff old.ipsw new.ipsw --output ./diff/ --markdown
# Include firmware components (iBoot, SEP, etc.) and launchd configs
ipsw diff old.ipsw new.ipsw --fw --launchd --output ./diff/ --markdown
# Diff with KDKs for kernel symbol resolution
ipsw diff old.ipsw new.ipsw --output ./diff/ --markdown \
--kdk <OLD_KDK>/System/Library/Kernels/kernel.release.t6031 \
--kdk <NEW_KDK>/System/Library/Kernels/kernel.release.t6031
# Entitlement-only diff
ipsw diff old.ipsw new.ipsw --ent --output ./diff/
# Diff two OTAs (macOS 14+ AEA-encrypted; supply key DB)
ipsw diff old.ota new.ota --key-db keys.json --output ./diff/ --markdown---
Symbolication
# Symbolicate a panic / crash log against an IPSW
ipsw symbolicate panic-full-2024-03-21.ips iPhone16,1_18.0_Restore.ipsw
# Show disassembly around panic frames
ipsw symbolicate panic.ips firmware.ipsw --peek --peek-count 10
# Symbolicate against a DSC instead
ipsw symbolicate crash.ips $DSC---
Firmware Components (IMG4, AEA, iBoot, SEP)
For Apple firmware containers — IMG4/IM4P/IM4M, AEA1-encrypted DMGs, iBoot, SEP, AOP, DCP, baseband, and trust caches:
# IMG4 / IM4P / IM4M operations
ipsw img4 info my.img4
ipsw img4 extract --im4p my.img4 --output ./ # IM4P payload (decompressed)
ipsw img4 extract --im4p --im4m --im4r my.img4 -o ./ # All components
# Firmware sub-binaries (iBoot, exclave, AOP, GPU, DCP, baseband)
ipsw fw iboot iBoot.img4
ipsw fw aea --info encrypted.dmg.aea # AEA1 DMG metadata
ipsw fw aea --key encrypted.dmg.aea # Pull decryption key
ipsw fw tc TrustCache.img4 # Dump trust cache entriesSee ipsw img4 --help and ipsw fw --help for the full list of subcommands.
---
Sandbox Profile Analysis (sb)
Decode and query Apple sandbox profiles compiled into a kernelcache. Useful for capability analysis ("which profiles can open IOSurface?"), attack-surface mapping, and tracking sandbox changes between releases.
# List every profile in a kernelcache
ipsw sb list kernelcache.release.iPhone18,1
# Decompile one profile to SBPL (Sandbox Profile Language)
ipsw sb dec kernelcache.release.iPhone18,1 com.apple.WebKit.WebContent -O WebContent.sb
# Diff sandbox operations between two kernels (find new/removed checks)
ipsw sb opts --diff kernelcache_old kernelcache_new
# Build the cross-profile graph once, then query repeatedly (queries become sub-second)
ipsw sb graph export kernelcache.release.iPhone18,1 -O graph.json
# Capability queries against the graph
ipsw sb query iokit-open IOSurfaceRootUserClient --graph graph.json
ipsw sb query path-write /private/var/mobile/tmp --graph graph.json
ipsw sb query syscall mmap --graph graph.json
ipsw sb query mach-lookup com.apple.mobilegestalt.xpc --graph graph.jsonAvailable query subcommands: iokit-open, path-read, path-write, syscall, sysctl, mach-lookup, mach-register, preference, notification, cypher.
See references/sandbox.md for the full sandbox toolkit.
---
IPSW Inspection
# Summarize an IPSW/OTA (devices, builds, file list)
ipsw info iPhone16,1_18.0_Restore.ipsw
ipsw info --list iPhone16,1_18.0_Restore.ipsw # full file listing
ipsw info --remote <IPSW_URL> # without downloading
# Mount the filesystem / system / dyld_shared_cache DMG
ipsw mount fs iPhone16,1_18.0_Restore.ipsw # filesystem
ipsw mount sys iPhone16,1_18.0_Restore.ipsw # system
ipsw mount exc iPhone16,1_18.0_Restore.ipsw # dyld_shared_cache (cryptex)
# Parse the DeviceTree
ipsw dtree iPhone16,1_18.0_Restore.ipsw --summary
ipsw dtree iPhone16,1_18.0_Restore.ipsw --json | jq '.["device-tree"]["compatible"]'For AEA-encrypted DMGs (macOS 14+), pass --key-db keys.json or --pem-db pem.json.
---
Pitfalls
1. Symbol cache must be primed. First dyld a2s/symaddr on a DSC creates <dsc>.a2s. Until then lookups appear to "find nothing". Run dyld a2s $DSC <any-addr> once before scripting bulk lookups. 2. AEA-encrypted IPSWs/OTAs. Modern macOS OTAs can ship as AEA1 archives. Pass --key-val <base64> or --key-db keys.json to commands that need to read them (diff, extract, fw aea). 3. Always pass `--image <DYLIB>` for DSC ops. Without it, ipsw walks every dylib map — 10x+ slower. 4. Multi-arch DSCs need `--dyld-arch`. Without it, extraction may pick the wrong slice (arm64 vs arm64e) silently.
---
Reference Files
- references/download.md - Firmware download, device IDs, extraction
- references/dyld.md - Complete DSC commands (a2s, xref, dump, str, extract)
- references/kernel.md - Kernel and KEXT analysis
- references/entitlements.md - Entitlements database and queries
- references/class-dump.md - ObjC header dumping
- references/macho.md - Mach-O binary analysis
- references/sandbox.md - Sandbox profiles (
sb): decompile, diff, graph, capability queries
Tips
1. JSON output: Most commands support --json for scripting (e.g. ipsw dyld info --dylibs --json $DSC | jq -r '.images[].name'). 2. Device IDs: ipsw device-list lists every known identifier; ipsw device-info iPhone16,1 describes a specific one.
MIT License
Copyright (c) 2025-2026 blacktop
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Objective-C Class Dumping Reference
Complete reference for dumping Objective-C headers with ipsw.
Table of Contents
- Basic Usage
- From dyld_shared_cache
- From Mach-O Binary
- Filtering Classes
- Header Generation
- Output Formatting
- Swift Dumping
---
Basic Usage
From DSC dylib:
ipsw class-dump dyld_shared_cache_arm64e UIKitFrom standalone Mach-O:
ipsw class-dump /path/to/binary---
From dyld_shared_cache
Dump specific framework:
ipsw class-dump dyld_shared_cache_arm64e FoundationDump private framework:
ipsw class-dump dyld_shared_cache_arm64e SpringBoardServicesDump all dylibs:
ipsw class-dump dyld_shared_cache_arm64e --allCommon frameworks for RE:
# UI frameworks
ipsw class-dump dyld_shared_cache_arm64e UIKit
ipsw class-dump dyld_shared_cache_arm64e SwiftUI
# Security
ipsw class-dump dyld_shared_cache_arm64e Security
ipsw class-dump dyld_shared_cache_arm64e LocalAuthentication
# System services
ipsw class-dump dyld_shared_cache_arm64e SpringBoard
ipsw class-dump dyld_shared_cache_arm64e MobileContainerManager
# Networking
ipsw class-dump dyld_shared_cache_arm64e CFNetwork
ipsw class-dump dyld_shared_cache_arm64e Network---
From Mach-O Binary
Dump app binary:
ipsw class-dump /Applications/Example.app/Contents/MacOS/ExampleDump framework:
ipsw class-dump /System/Library/Frameworks/Foundation.framework/FoundationDump daemon:
ipsw class-dump /usr/libexec/securityd---
Filtering Classes
Filter by class name regex:
ipsw class-dump dyld_shared_cache_arm64e UIKit --class 'UIView.*'Filter by protocol regex:
ipsw class-dump dyld_shared_cache_arm64e Foundation --proto 'NSCoding'Filter by category regex:
ipsw class-dump dyld_shared_cache_arm64e UIKit --cat 'UIView.*'Combine filters:
ipsw class-dump dyld_shared_cache_arm64e UIKit --class 'UITableView.*' --proto 'UITableViewDelegate'---
Header Generation
Generate ObjC headers:
ipsw class-dump dyld_shared_cache_arm64e UIKit --headers --output ./headers/Generate headers for all frameworks:
ipsw class-dump dyld_shared_cache_arm64e --all --headers --output ./all_headers/Include dependencies (private frameworks):
ipsw class-dump dyld_shared_cache_arm64e UIKit --headers --deps --output ./headers/Include references:
ipsw class-dump dyld_shared_cache_arm64e UIKit --headers --refs --output ./headers/---
Output Formatting
With addresses (verbose/RE mode):
ipsw class-dump dyld_shared_cache_arm64e UIKit --reShows method addresses useful for hooking/patching.
With demangled names:
ipsw class-dump dyld_shared_cache_arm64e UIKit --demangleColor themes:
ipsw class-dump dyld_shared_cache_arm64e UIKit --theme nord
ipsw class-dump dyld_shared_cache_arm64e UIKit --theme github---
Swift Dumping
Swift class-dump (WIP):
ipsw swift-dump dyld_shared_cache_arm64e SwiftUISwift from Mach-O:
ipsw swift-dump /path/to/swift_binary---
Common Research Patterns
Find security-related classes:
ipsw class-dump dyld_shared_cache_arm64e Security --class '.*Keychain.*'
ipsw class-dump dyld_shared_cache_arm64e Security --class '.*Trust.*'
ipsw class-dump dyld_shared_cache_arm64e Security --class '.*Credential.*'Find network classes:
ipsw class-dump dyld_shared_cache_arm64e CFNetwork --class '.*URL.*'
ipsw class-dump dyld_shared_cache_arm64e CFNetwork --class '.*HTTP.*'Find UI controllers:
ipsw class-dump dyld_shared_cache_arm64e UIKit --class '.*ViewController$'Dump private APIs:
# SpringBoard internals
ipsw class-dump dyld_shared_cache_arm64e SpringBoardServices --headers --output ./sb_headers/
# Biometric authentication
ipsw class-dump dyld_shared_cache_arm64e BiometricKit --headers --output ./bio_headers/
# App installation
ipsw class-dump dyld_shared_cache_arm64e MobileInstallation --headers --output ./install_headers/Compare class interfaces between iOS versions:
ipsw class-dump dsc_17.0 UIKit --class UITableView > UITableView_17.0.h
ipsw class-dump dsc_17.1 UIKit --class UITableView > UITableView_17.1.h
diff UITableView_17.0.h UITableView_17.1.h---
Tips
1. Use --re for hooking: The --re flag shows method addresses needed for runtime hooking 2. Start specific: Use --class filter first, then broaden if needed 3. Check dependencies: Many classes reference private frameworks; use --deps to include them 4. Headers for Xcode: Generated headers can be used in Xcode projects for private API access
Firmware Download & Extraction Reference
Complete reference for downloading and extracting Apple firmware with ipsw.
Which Download Command Do I Need?
What do you want to download?
│
├─► iOS/iPadOS/tvOS/watchOS firmware
│ │
│ ├─► Full restore image (.ipsw file)
│ │ └─► ipsw download ipsw
│ │
│ ├─► Over-the-air update (smaller, delta updates)
│ │ └─► ipsw download ota
│ │
│ └─► Just the kernel or dyld_shared_cache (fastest)
│ └─► ipsw download ipsw --kernel --dyld
│ (extracts during download, no full IPSW saved)
│
├─► macOS installer
│ └─► ipsw download macos
│
├─► Kernel Development Kit (debug symbols, type info)
│ └─► ipsw download kdk
│
├─► Apple open source (xnu, dyld, etc.)
│ └─► ipsw download git <project>
│
├─► App Store IPA
│ └─► ipsw download ipa
│
├─► Firmware decryption keys
│ └─► ipsw download keys
│
└─► SHSH blobs / signing status
└─► ipsw download tssQuick Decision Guide
| I want to... | Command |
|---|---|
| Get latest iOS kernel for research | ipsw download ipsw --device <ID> --latest --kernel |
| Get dyld_shared_cache for class-dump | ipsw download ipsw --device <ID> --latest --dyld |
| Download full IPSW for restore | ipsw download ipsw --device <ID> --latest |
| Get beta/developer firmware | ipsw download ota --device <ID> --beta |
| Analyze macOS internals | ipsw download macos --latest |
| Get kernel debug symbols | ipsw download kdk --latest |
| Read xnu source code | ipsw download git xnu |
| Check if firmware is still signed | ipsw download tss --device <ID> --build <BUILD> |
IPSW vs OTA: When to Use Which
| Criteria | download ipsw | download ota |
|---|---|---|
| File size | Larger (full image) | Smaller (delta) |
| Contains full filesystem | Yes | Partial |
| Best for kernel extraction | Yes | Yes |
| Best for dyld_shared_cache | Yes | Yes |
| Beta/seed releases | Limited | Yes (--beta) |
| Restore device | Yes | No |
---
Table of Contents
- IPSW Downloads
- OTA Downloads
- Remote Extraction
- Local Extraction
- Kernel Development Kits
- macOS Downloads
- Other Downloads
---
IPSW Downloads
Download latest IPSW for device:
ipsw download ipsw --device iPhone16,1 --latestDownload specific iOS version:
ipsw download ipsw --device iPhone14,2 --version 15.1Download specific build:
ipsw download ipsw --device iPhone11,2 --build 16B92Download all IPSWs for a version:
ipsw download ipsw --version 17.0Download with kernel extraction:
ipsw download ipsw --device iPhone16,1 --latest --kernelDownload with dyld_shared_cache extraction:
ipsw download ipsw --device iPhone16,1 --latest --dyld --dyld-arch arm64eGet download URLs only (no download):
ipsw download ipsw --device iPhone16,1 --latest --urlsResume interrupted download:
ipsw download ipsw --device iPhone16,1 --latest --resume-allFilter by device family:
ipsw download ipsw --version 17.0 --white-list iPhone
ipsw download ipsw --version 17.0 --black-list iPad---
OTA Downloads
Download latest OTA:
ipsw download ota --platform ios --device iPhone16,1 --latestDownload with kernel extraction:
ipsw download ota --platform ios --device iPhone16,1 --kernelDownload with dyld_shared_cache:
ipsw download ota --platform ios --device iPhone16,1 --dyldBeta/seed OTAs:
ipsw download ota --platform ios --device iPhone16,1 --beta---
Remote Extraction
Extract components from remote IPSW/OTA without downloading entire file.
Extract kernel remotely:
ipsw extract --kernel --remote https://updates.cdn-apple.com/path/to/ipswExtract dyld_shared_cache remotely:
ipsw extract --dyld --dyld-arch arm64e --remote https://updates.cdn-apple.com/path/to/ipswExtract files matching pattern remotely:
ipsw extract --files --pattern '.*\.plist$' --remote https://url/to/ipswGet IPSW URL then extract:
# Get URL
ipsw download ipsw --device iPhone16,1 --latest --urls
# Extract from URL
ipsw extract --kernel --remote <URL_FROM_ABOVE>---
Local Extraction
Extract kernel:
ipsw extract --kernel iPhone16,1_18.0_Restore.ipswExtract dyld_shared_cache:
ipsw extract --dyld --dyld-arch arm64e iPhone16,1_18.0_Restore.ipswExtract both kernel and dyld:
ipsw extract --kernel --dyld iPhone16,1_18.0_Restore.ipswExtract DeviceTree:
ipsw extract --dtree iPhone16,1_18.0_Restore.ipswExtract iBoot:
ipsw extract --iboot iPhone16,1_18.0_Restore.ipswExtract SEP firmware:
ipsw extract --sep iPhone16,1_18.0_Restore.ipswExtract files by pattern:
ipsw extract --files --pattern '.*Info\.plist$' iPhone16,1_18.0_Restore.ipswExtract to specific directory:
ipsw extract --kernel --output ./extracted/ iPhone16,1_18.0_Restore.ipswGet system version info:
ipsw extract --sys-ver iPhone16,1_18.0_Restore.ipswJSON output:
ipsw extract --kernel --json iPhone16,1_18.0_Restore.ipsw---
Kernel Development Kits
KDKs contain debug symbols and type information for kernel analysis.
Download KDK for current host OS:
ipsw download kdk --hostDownload KDK for specific build:
ipsw download kdk --build 24A335Download latest KDK (and install via the .pkg):
ipsw download kdk --latest --installDownload all available KDKs:
ipsw download kdk --allAfter download, use with ipsw kernel ctfdump for type analysis:
ipsw kernel ctfdump /Library/Developer/KDKs/KDK_15.0_24A335.kdk/System/Library/Kernels/kernel.release.t6031 task---
macOS Downloads
Download macOS installer:
ipsw download macos --version 14.0Download latest macOS:
ipsw download macos --latestList available macOS versions:
ipsw download macos --list---
Other Downloads
Apple open source distributions:
ipsw download git xnu
ipsw download git dyldFirmware keys from iPhone Wiki:
ipsw download keys --device iPhone16,1 --build 21A326SHSH blobs / signing status:
ipsw download tss --device iPhone16,1 --build 21A326App Store IPAs (requires auth):
# Bundle ID is positional
ipsw download ipa com.example.app
# Or search interactively
ipsw download ipa --search twitter---
Device Identifiers
Common device identifiers for downloads:
| Device | Identifier |
|---|---|
| iPhone 15 Pro Max | iPhone16,2 |
| iPhone 15 Pro | iPhone16,1 |
| iPhone 15 Plus | iPhone15,5 |
| iPhone 15 | iPhone15,4 |
| iPhone 14 Pro Max | iPhone15,3 |
| iPhone 14 Pro | iPhone15,2 |
| iPad Pro 12.9" (M2) | iPad14,5 |
| iPad Pro 11" (M2) | iPad14,3 |
| Apple Watch Ultra 2 | Watch7,5 |
| Apple TV 4K (3rd) | AppleTV14,1 |
List all devices:
ipsw device-listGet device info:
ipsw device-info iPhone16,1---
Configuration
Create ~/.ipsw/config.yml for persistent settings:
download:
resume-all: true
output: ~/Downloads/ipsw
proxy: http://proxy.example.com:8080---
Common Workflows
Get kernel for latest iOS on iPhone 15 Pro:
ipsw download ipsw --device iPhone16,1 --latest --kernelBuild local firmware collection:
for device in iPhone16,1 iPhone15,2 iPad14,5; do
ipsw download ipsw --device $device --latest --kernel --dyld
doneCompare kernels between versions:
ipsw download ipsw --device iPhone16,1 --version 17.0 --kernel
ipsw download ipsw --device iPhone16,1 --version 17.1 --kernel
ipsw kernel kexts --diff kernelcache_17.0 kernelcache_17.1dyld_shared_cache Analysis Reference
Complete reference for analyzing Apple's dyld_shared_cache (DSC) with ipsw.
Table of Contents
- Finding the DSC
- DSC Info & Structure
- Symbol Lookup
- Disassembly
- Objective-C Analysis
- String Search
- Address Conversions
- Cross-References
- Extracting Dylibs
---
Finding the DSC
macOS system DSC location:
/System/Volumes/Preboot/Cryptexes/OS/System/Library/dyld/dyld_shared_cache_arm64eiOS DSC (after extraction from IPSW):
ipsw extract --dyld --dyld-arch arm64e iPhone16,1_18.0_Restore.ipsw
# Creates: dyld_shared_cache_arm64eList dylibs in DSC:
ipsw dyld info --dylibs dyld_shared_cache_arm64e---
DSC Info & Structure
Basic info:
ipsw dyld info dyld_shared_cache_arm64eList all dylibs:
ipsw dyld info --dylibs dyld_shared_cache_arm64eJSON output for scripting:
ipsw dyld info --dylibs --json dyld_shared_cache_arm64eDiff two DSCs (find added/removed dylibs):
ipsw dyld info --diff dyld_shared_cache_v1 dyld_shared_cache_v2Launch closures:
ipsw dyld info --closures dyld_shared_cache_arm64e---
Symbol Lookup
Find symbol address:
ipsw dyld symaddr dyld_shared_cache_arm64e _mallocFind symbol in specific dylib (faster):
ipsw dyld symaddr dyld_shared_cache_arm64e _malloc --image libsystem_malloc.dylibFind all symbols matching pattern:
ipsw dyld symaddr dyld_shared_cache_arm64e --all '_NS.*Error'Include bind symbols:
ipsw dyld symaddr dyld_shared_cache_arm64e _malloc --bindsBatch lookup from JSON file:
# Create sym_lookup.json:
# [{"pattern": "_malloc", "image": "libsystem_malloc.dylib"},
# {"pattern": "_objc_msgSend", "image": "libobjc.A.dylib"}]
ipsw dyld symaddr dyld_shared_cache_arm64e --in sym_lookup.json --output results.jsonAddress to symbol:
ipsw dyld a2s dyld_shared_cache_arm64e 0x1bc39e1e0---
Disassembly
Disassemble by symbol name:
ipsw dyld disass dyld_shared_cache_arm64e --symbol _mallocDisassemble with image hint (faster):
ipsw dyld disass dyld_shared_cache_arm64e --symbol _NSLog --image FoundationDisassemble by virtual address:
ipsw dyld disass dyld_shared_cache_arm64e --vaddr 0x1b19d6940Disassemble with demangled symbols:
ipsw dyld disass dyld_shared_cache_arm64e --symbol '_$s.*' --demangleQuiet mode (faster, less verbose):
ipsw dyld disass dyld_shared_cache_arm64e --symbol _malloc --quietJSON output:
ipsw dyld disass dyld_shared_cache_arm64e --symbol _malloc --jsonWith syntax highlighting (pipe to bat):
ipsw dyld disass dyld_shared_cache_arm64e --symbol _malloc --color | bat -l asmLLM-powered decompilation:
ipsw dyld disass dyld_shared_cache_arm64e --symbol _malloc --dec --dec-llm copilot --dec-lang C---
Objective-C Analysis
Dump all ObjC classes:
ipsw dyld objc --class dyld_shared_cache_arm64eDump classes from specific dylib:
ipsw dyld objc --class dyld_shared_cache_arm64e --image UIKitDump protocols:
ipsw dyld objc --proto dyld_shared_cache_arm64eDump selectors:
ipsw dyld objc --sel dyld_shared_cache_arm64eDump imp-caches:
ipsw dyld objc --imp-cache dyld_shared_cache_arm64e---
String Search
Search for string in DSC:
ipsw dyld str dyld_shared_cache_arm64e "error"Search in specific dylib:
ipsw dyld str dyld_shared_cache_arm64e "password" --image Security---
Address Conversions
Address to offset:
ipsw dyld a2o dyld_shared_cache_arm64e 0x1bc39e1e0Offset to address:
ipsw dyld o2a dyld_shared_cache_arm64e 0x39e1e0Dump data at virtual address:
ipsw dyld dump dyld_shared_cache_arm64e 0x1bc39e1e0 --size 256---
Cross-References
Find xrefs to address:
ipsw dyld xref dyld_shared_cache_arm64e 0x1813450bcSearch all dylibs for xrefs:
ipsw dyld xref dyld_shared_cache_arm64e 0x1813450bc --allSearch specific dylib:
ipsw dyld xref dyld_shared_cache_arm64e 0x1813450bc --image UIKitFind imports from dependent dylibs:
ipsw dyld xref dyld_shared_cache_arm64e 0x1813450bc --imports---
Extracting Dylibs
Extract single dylib:
ipsw dyld extract dyld_shared_cache_arm64e UIKit --output ./extracted/Extract with ObjC metadata:
ipsw dyld extract dyld_shared_cache_arm64e UIKit --objcExtract with stubs:
ipsw dyld extract dyld_shared_cache_arm64e UIKit --stubsSplit entire DSC (requires Xcode):
ipsw dyld split dyld_shared_cache_arm64e --output ./split_cache/---
Performance Tips
1. Symbol caching: First symbol lookup creates .a2s cache file - subsequent lookups are 10-15x faster 2. Use --image flag: Specifying the dylib dramatically speeds up symbol resolution 3. Use --quiet: Reduces output verbosity and speeds up disassembly 4. Batch operations: Use --in flag with JSON for multiple symbol lookups
Entitlements Analysis Reference
Complete reference for analyzing and searching entitlements with ipsw.
Table of Contents
---
Single Binary Entitlements
Dump entitlements from binary:
ipsw macho info --ent /path/to/binaryDump DER-encoded entitlements:
ipsw macho info --ent-der /path/to/binaryCheck for specific entitlement:
ipsw macho info --ent /path/to/binary | grep "platform-application"---
Entitlements Database
Build a searchable database of entitlements across multiple IPSWs.
Create SQLite database:
ipsw ent --sqlite entitlements.db --ipsw iPhone16,1_18.0_Restore.ipswAdd multiple IPSWs:
ipsw ent --sqlite entitlements.db --ipsw *.ipswCreate PostgreSQL database:
ipsw ent --pg-host db.example.com --pg-user postgres --ipsw *.ipswFrom folder of Mach-O binaries:
ipsw ent --sqlite entitlements.db --input ./extracted_binaries/Replace existing builds (update database):
ipsw ent --sqlite entitlements.db --ipsw new_version.ipsw --replaceDry run (preview without changes):
ipsw ent --sqlite entitlements.db --ipsw new.ipsw --replace --dry-run---
Database Queries
Search by entitlement key:
ipsw ent --sqlite entitlements.db --key platform-applicationSearch by entitlement value:
ipsw ent --sqlite entitlements.db --value LockdownModeSearch by file name:
ipsw ent --sqlite entitlements.db --file WebContentFilter by iOS version:
ipsw ent --sqlite entitlements.db --key com.apple.private.security.sandbox --version 18.0Limit results:
ipsw ent --sqlite entitlements.db --key sandbox --limit 100Get statistics:
ipsw ent --sqlite entitlements.db --stats---
Common Entitlements
Security & Privileges
| Entitlement | Description |
|---|---|
platform-application | App runs as platform binary |
com.apple.private.security.no-sandbox | Exempt from sandbox |
com.apple.private.skip-library-validation | Skip library signature validation |
com.apple.rootless.install | Can modify SIP-protected files |
com.apple.rootless.storage.TCC | Access TCC database |
Hardware & System
| Entitlement | Description |
|---|---|
com.apple.developer.kernel.* | Kernel-related capabilities |
com.apple.private.amfi.* | AMFI bypass capabilities |
com.apple.private.memorystatus | Memory management |
com.apple.private.iokit-user-client-class | IOKit user client access |
Data & Privacy
| Entitlement | Description |
|---|---|
com.apple.private.tcc.manager | TCC database management |
com.apple.private.tcc.allow | TCC bypass for specific services |
keychain-access-groups | Keychain access |
com.apple.private.MobileContainerManager.allowed | Container access |
Networking
| Entitlement | Description |
|---|---|
com.apple.private.network.socket-access | Raw socket access |
com.apple.private.network.restricted.ports | Bind to privileged ports |
com.apple.private.necp.match | Network extension control |
---
Research Patterns
Find all platform binaries:
ipsw ent --sqlite ent.db --key platform-applicationFind sandbox escapes:
ipsw ent --sqlite ent.db --key "com.apple.private.security.no-sandbox"
ipsw ent --sqlite ent.db --key "com.apple.private.security.sandbox"Find TCC bypasses:
ipsw ent --sqlite ent.db --key "com.apple.private.tcc"Find kernel capabilities:
ipsw ent --sqlite ent.db --key "com.apple.developer.kernel"
ipsw ent --sqlite ent.db --key "com.apple.private.kernel"Track entitlement changes between versions:
# Build databases for each version
ipsw ent --sqlite ent_17.0.db --ipsw iOS17.0.ipsw
ipsw ent --sqlite ent_17.1.db --ipsw iOS17.1.ipsw
# Query and compare
ipsw ent --sqlite ent_17.0.db --key "sandbox" > ent_17.0.txt
ipsw ent --sqlite ent_17.1.db --key "sandbox" > ent_17.1.txt
diff ent_17.0.txt ent_17.1.txtFind new private entitlements:
ipsw ent --sqlite ent.db --key "com.apple.private" --version 18.0---
Tips
1. Build comprehensive database: Include multiple iOS versions to track entitlement evolution 2. Focus on private entitlements: com.apple.private.* often indicates interesting capabilities 3. Check file context: Match entitlements with binary functionality for attack surface analysis 4. Cross-reference with sandbox: Entitlements often correlate with sandbox profiles
Kernel & KEXT Analysis Reference
Complete reference for analyzing kernelcaches and kernel extensions with ipsw.
Table of Contents
- Kernelcache Basics
- KEXT Extraction
- KEXT Comparison
- Syscalls & Mach Traps
- MIG Subsystems
- Kernelcache Symbolication
- CTF/DWARF Analysis
- Kernel Disassembly
---
Kernelcache Basics
Get kernelcache version:
ipsw kernel version kernelcache.release.iPhone15,2Decompress kernelcache:
ipsw kernel dec kernelcache.release.iPhone15,2 --output kernelcache.decompressedList kernel extensions:
ipsw kernel kexts kernelcache.release.iPhone15,2JSON output:
ipsw kernel kexts --json kernelcache.release.iPhone15,2---
KEXT Extraction
Extract specific KEXT:
ipsw kernel extract kernelcache.release.iPhone15,2 sandboxExtract KEXT to specific directory:
ipsw kernel extract kernelcache.release.iPhone15,2 sandbox --output ./kexts/Extract all KEXTs:
ipsw kernel extract kernelcache.release.iPhone15,2 --all --output ./kexts/Extract with specific architecture:
ipsw kernel extract kernelcache.release.iPhone15,2 IOKit --arch arm64eCommon security-relevant KEXTs:
# Sandbox
ipsw kernel extract kernelcache sandbox
# AppleMobileFileIntegrity (code signing)
ipsw kernel extract kernelcache AppleMobileFileIntegrity
# IOKit base
ipsw kernel extract kernelcache com.apple.iokit.IOKit
# Networking
ipsw kernel extract kernelcache com.apple.iokit.IONetworkingFamily---
KEXT Comparison
Diff KEXTs between versions:
ipsw kernel kexts --diff kernelcache_18A8395 kernelcache_18E5178aOutput shows:
- Added KEXTs
- Removed KEXTs
- Version changes
---
Syscalls & Mach Traps
Dump syscall table:
ipsw kernel syscall kernelcache.release.iPhone15,2Dump mach_traps:
ipsw kernel mach kernelcache.release.iPhone15,2Search for specific syscall:
ipsw kernel syscall kernelcache.release.iPhone15,2 | grep execve---
MIG Subsystems
Dump MIG subsystems:
ipsw kernel mig kernelcache.release.iPhone15,2MIG (Mach Interface Generator) subsystems define IPC interfaces for kernel services.
---
Kernelcache Symbolication
For symbolicating crash logs against an IPSW/DSC, use top-level ipsw symbolicate instead — see SKILL.md.
Symbolicate kernelcache:
ipsw kernel symbolicate kernelcache.release.iPhone15,2Dump symbol sets:
ipsw kernel symbolsets kernelcache.release.iPhone15,2---
CTF/DWARF Analysis
CTF (Compact C Type Format) and DWARF provide kernel type information useful for reverse engineering.
Requires KDK (Kernel Development Kit)
Download KDK for current host:
ipsw download kdk --hostDump type info:
ipsw kernel ctfdump KDK/kernel.development.t8101 task > task.hDump all kernel types:
ipsw kernel ctfdump KDK/kernel.development.t8101 --allDiff struct between versions:
ipsw kernel dwarf --diff --type task KDK_13.0/kernel KDK_13.1/kernelShows:
- Added/removed struct fields
- Offset changes
- Size changes
---
Kernel Disassembly
Disassemble kernel function:
ipsw macho disass kernelcache.release.iPhone15,2 --symbol _kernel_bootstrapFrom fileset entry (modern kernelcaches):
ipsw macho disass kernelcache.release.iPhone15,2 --fileset-entry "com.apple.kernel" --symbol _kernel_bootstrapIOKit function:
ipsw macho disass kernelcache.release.iPhone15,2 --fileset-entry "com.apple.iokit.IOKit" --symbol _IOLogKEXT function:
ipsw macho disass kernelcache.release.iPhone15,2 --fileset-entry "com.apple.security.sandbox" --symbol _sandbox_check---
Common Research Patterns
Find sandbox hooks:
ipsw kernel extract kernelcache sandbox
ipsw macho info --symbols sandbox.kext | grep "hook\|policy"Analyze AMFI:
ipsw kernel extract kernelcache AppleMobileFileIntegrity
ipsw macho info --symbols AppleMobileFileIntegrity.kext | grep "verify\|trust\|sign"Track kernel changes between versions:
# Extract from two versions
ipsw kernel extract kernelcache_v1 sandbox --output v1/
ipsw kernel extract kernelcache_v2 sandbox --output v2/
# Compare symbols
diff <(ipsw macho info --symbols v1/sandbox.kext) \
<(ipsw macho info --symbols v2/sandbox.kext)Find IOUserClient subclasses:
ipsw macho info --objc kernelcache.release.iPhone15,2 | grep "IOUserClient"Mach-O Binary Analysis Reference
Complete reference for analyzing Mach-O binaries with ipsw.
Table of Contents
- Binary Info
- Disassembly
- Entitlements
- Code Signature
- Objective-C Metadata
- Swift Metadata
- Symbols
- Address Conversions
- Universal/Fat Binaries
- Fileset Kernelcaches
---
Binary Info
Full MachO info:
ipsw macho info /path/to/binaryHeader only:
ipsw macho info --header /path/to/binaryLoad commands:
ipsw macho info --loads /path/to/binarySegments and sections:
ipsw macho info --loads /path/to/binary | grep -A5 "LC_SEGMENT"JSON output:
ipsw macho info --json /path/to/binaryFunction starts:
ipsw macho info --starts /path/to/binaryFixup chains:
ipsw macho info --fixups /path/to/binaryStrings:
ipsw macho info --strings /path/to/binary---
Disassembly
Disassemble by symbol:
ipsw macho disass /path/to/binary --symbol _mainDisassemble by virtual address:
ipsw macho disass /path/to/binary --vaddr 0x100001000Disassemble by file offset:
ipsw macho disass /path/to/binary --off 0x4000Disassemble entry point:
ipsw macho disass /path/to/binary --entryDisassemble entire section:
ipsw macho disass /path/to/binary --section __TEXT.__textLimit instruction count:
ipsw macho disass /path/to/binary --symbol _main --count 50With color:
ipsw macho disass /path/to/binary --symbol _main --colorSpecific architecture (fat binary):
ipsw macho disass /path/to/binary --symbol _main --arch arm64eJSON output:
ipsw macho disass /path/to/binary --symbol _main --jsonLLM decompilation:
ipsw macho disass /path/to/binary --symbol _main --dec --dec-llm copilot --dec-lang C---
Entitlements
Dump entitlements (plist format):
ipsw macho info --ent /path/to/binaryDump DER-encoded entitlements:
ipsw macho info --ent-der /path/to/binaryCheck for specific entitlement:
ipsw macho info --ent /path/to/binary | grep "platform-application"---
Code Signature
Full signature info:
ipsw macho info --sig /path/to/binaryDump signing certificate:
ipsw macho info --dump-cert /path/to/binarySign a binary (ad-hoc):
ipsw macho sign /path/to/binarySign with entitlements:
ipsw macho sign /path/to/binary --ent entitlements.plistSign with identity:
ipsw macho sign /path/to/binary --id "Apple Development: ..."---
Objective-C Metadata
Dump ObjC info:
ipsw macho info --objc /path/to/binaryDump ObjC with references:
ipsw macho info --objc-refs /path/to/binary---
Swift Metadata
Basic Swift info:
ipsw macho info --swift /path/to/binaryAll Swift metadata:
ipsw macho info --swift-all /path/to/binary---
Symbols
Dump all symbols:
ipsw macho info --symbols /path/to/binaryAddress to symbol:
ipsw macho a2s /path/to/binary 0x100001234---
Address Conversions
Virtual address to file offset:
ipsw macho a2o /path/to/binary 0x100001234File offset to virtual address:
ipsw macho o2a /path/to/binary 0x1234Dump data at address:
ipsw macho dump /path/to/binary 0x100001234 --size 256---
Universal/Fat Binaries
List architectures:
ipsw macho info --header /path/to/fat_binaryExtract specific architecture:
ipsw macho lipo /path/to/fat_binary --arch arm64 --output arm64_binaryCreate universal binary:
ipsw macho bbl arm64_binary arm64e_binary --output universal_binary---
Fileset Kernelcaches
Modern kernelcaches use MH_FILESET format containing multiple embedded Mach-O binaries.
List fileset entries:
ipsw macho info --all-fileset-entries /path/to/kernelcacheAnalyze specific fileset entry:
ipsw macho info --fileset-entry "com.apple.kernel" /path/to/kernelcacheDisassemble from fileset entry:
ipsw macho disass /path/to/kernelcache --fileset-entry "com.apple.iokit.IOKit" --symbol _IOLog---
Patching
Patch load command:
ipsw macho patch /path/to/binary --lc LC_VERSION_MIN_IPHONEOS --set version=14.0Add rpath:
ipsw macho patch /path/to/binary --add-rpath @executable_path/../Frameworks---
Common Patterns
Find all binaries with specific entitlement:
find /Applications -name "*.app" -exec sh -c 'ipsw macho info --ent "$1/Contents/MacOS/"* 2>/dev/null | grep -l platform-application && echo "$1"' _ {} \;Analyze all binaries in directory:
for f in /path/to/binaries/*; do
echo "=== $f ==="
ipsw macho info --header "$f"
doneSandbox Profile Analysis (ipsw sb)
Decode, query, and diff Apple sandbox profiles compiled into a kernelcache. Useful for capability analysis, attack-surface mapping, and tracking sandbox changes between iOS/macOS releases.
Subcommand Map
| Command | Purpose |
|---|---|
sb list <KC> | List every sandbox profile name in a kernelcache |
sb opts <KC> | List all sandbox operations defined in a kernelcache |
sb opts --diff <KC1> <KC2> | Diff operations between two kernels (find new/removed checks) |
sb dec <KC> [PROFILE] | Decompile profile(s) to SBPL/SBASM/JSON |
sb dump <KC> | Extract raw sandbox blobs (collection, profile, protobox) for offline use |
sb cmpl <SB> | Compile a .sb source profile to a profile.bin blob |
sb check <PID> | Check sandbox state of a running process (use --operation to test a specific op) |
sb graph export <KC> | Build the cross-profile graph and serialize it for repeated queries |
sb graph load <FILE> | Summarize a previously exported graph |
sb graph stats <KC> | Print profile/operation counts and size statistics |
sb query <subcmd> | Capability queries — see below |
Quick Workflow
# 1. List profiles
ipsw sb list kernelcache.release.iPhone18,1
# 2. Decompile one to SBPL (the human-readable source format)
ipsw sb dec kernelcache.release.iPhone18,1 com.apple.WebKit.WebContent -O WebContent.sb
# 3. Build the graph once for fast capability queries
ipsw sb graph export kernelcache.release.iPhone18,1 -O graph.jsonDecompilation
# All profiles
ipsw sb dec kernelcache.release.iPhone18,1
# Single profile
ipsw sb dec kernelcache.release.iPhone18,1 com.apple.WebKit.WebContent
# As flat assembly (closer to bytecode)
ipsw sb dec kernelcache.release.iPhone18,1 --format sbasm
# As structured JSON (array of profile objects with SBPL strings)
ipsw sb dec kernelcache.release.iPhone18,1 --format json
# From a pre-extracted profile blob (no kernelcache; specify Darwin version)
ipsw sb dec --type profile -i sandbox_profile.bin -o operations.txt --darwin-version 25.0.0
# Heavy profile (e.g., CommCenter) — disable node budget
ipsw sb dec kernelcache.release.iPhone18,1 com.apple.CommCenter --full-graphOperation Diff (track sandbox surface changes)
ipsw sb opts --diff kernelcache.release.iPhone17,1 kernelcache.release.iPhone18,1Output shows added and removed sandbox operations between the two kernels — a fast way to spot new attack surface or hardening between releases.
Capability Queries
The query commands answer "which profiles have permission X?" Each query runs against a graph; build once with sb graph export, then query many times.
# Build graph (slow once, fast forever after)
ipsw sb graph export kernelcache.release.iPhone18,1 -O graph.json| Query | Question Answered |
|---|---|
sb query iokit-open <CLASS> | Which profiles can open this IOKit user client? |
sb query path-read <PATH> | Which profiles can read this filesystem path? |
sb query path-write <PATH> | Which profiles can write to this path? |
| `sb query syscall <NAME\ | NUM>` |
sb query mach-lookup <SVC> | Which profiles can look up this mach service? |
sb query mach-register <SVC> | Which profiles can register this mach service? |
sb query sysctl <KEY> | Which profiles can read/write this sysctl? |
sb query preference <DOMAIN> | Which profiles can read/write this preference domain? |
sb query notification <NAME> | Which profiles can post this notification? |
sb query cypher <EXPR> | Run a constrained graph query (advanced) |
Examples
# Find every profile that can open IOSurfaceRootUserClient
ipsw sb query iokit-open IOSurfaceRootUserClient --graph graph.json
# Find profiles that can write to /private/var/mobile/tmp
ipsw sb query path-write /private/var/mobile/tmp --graph graph.json
# Find profiles that can call mmap (by name or syscall number)
ipsw sb query syscall mmap --graph graph.json
ipsw sb query syscall 197 --graph graph.json
# JSON output → jq pipeline (e.g., only "allow" decisions)
ipsw sb query iokit-open IOSurfaceRootUserClient --graph graph.json -O json \
| jq -r '.matches[] | select(.decision=="allow") | .profile' | sort -u
# Show guard conditions per match
ipsw sb query path-write /var/mobile/foo --graph graph.json -O json \
| jq -r '.matches[] | "\(.profile): \(.guard_string)"'Skipping the graph (one-off queries)
# Build the graph in-memory and run one query (~40s per call)
ipsw sb query sysctl kern.osversion kernelcache.release.iPhone18,1Use this only for occasional lookups. For interactive analysis, always export the graph first.
Profile Compilation & Live Checks
# Compile a .sb source file to a binary profile blob
ipsw sb cmpl my_profile.sb -o ./
# Check sandbox state of a running process (macOS only, requires entitlements)
ipsw sb check 1234
ipsw sb check 1234 --operation file-read-dataTips
- Always export the graph first. Building it costs ~40s; querying a saved graph is sub-second.
- Profile names are bundle-identifier-style. Use
sb listto discover them; pass them verbatim tosb decandsb queryfilters. - `--type protobox` targets the modern protobox collection on recent kernels; default is
collection. - Pre-extracted blobs (
sb dumpoutput) work as-iinput to othersbcommands, useful when you want to skip kernelcache parsing on every call.
Related skills
FAQ
Is Ipsw safe to install?
skills.sh reports 2 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.