
Navaja suiza para investigación en iOS/macOS
Navaja suiza para la investigación de iOS/macOS
ipsw es un conjunto de herramientas de línea de comandos para la investigación de firmware de Apple y la ingeniería inversa. Descarga y descomprime IPSWs y OTAs, inspecciona binarios Mach-O y cachés compartidas de dyld, analiza kernelcaches y trabaja con dispositivos iOS conectados.
Agent skill · Instalación · Ejemplos de CLI · Documentación
Comienza con ipsw-skill si trabajas en Claude Code, Codex, Gemini CLI u otro agente que admita skills. Proporciona al agente referencias de comandos y flujos de trabajo para la extracción de firmware, el análisis de binarios y la investigación de plataformas Apple.
Instala la CLI de ipsw y luego añade la skill:
npx skills add https://github.com/blacktop/ipsw-skill --skill ipsw
Después puedes pedir una tarea en lenguaje natural. Por ejemplo:
Descarga el último IPSW para iPhone 15 Pro y extrae su kernelcache.
Vuelca las cabeceras de Objective-C de SpringBoardServices desde esta caché compartida de dyld.
Compara los KEXTs de estos dos kernelcaches.
El README de la skill contiene instrucciones de configuración para agentes individuales, incluido el plugin de Claude Code y la extensión de Gemini CLI.
El tap de Homebrew del mantenedor incluye la compilación con extras:
brew install blacktop/tap/ipsw
La fórmula principal de Homebrew también está disponible: brew install ipsw.
sudo snap install ipsw
scoop bucket add blacktop https://github.com/blacktop/scoop-bucket.git
scoop install blacktop/ipsw
También puedes descargar los binarios desde GitHub Releases. Consulta la guía de instalación para otros paquetes y dependencias opcionales. Algunos comandos dependen del sistema operativo anfitrión o de la variante de compilación; el soporte de Frida, por ejemplo, tiene una compilación aparte.
| Área | Herramientas |
|---|---|
| Firmware | Descargar IPSWs, OTAs, instaladores de macOS, Xcode y KDKs; extraer componentes y comparar compilaciones |
| Mach-O | Inspeccionar load commands, símbolos, firmas y entitlements; desensamblar código ARM64 |
| Cachés compartidas de dyld | Buscar símbolos y referencias cruzadas, extraer dylibs, volcar cabeceras de Objective-C e inspeccionar metadatos de Swift |
| Kernel | Extraer KEXTs, inspeccionar llamadas al sistema y símbolos, y comparar kernelcaches |
| Componentes de firmware | Analizar IMG4, descifrar archivos AEA e inspeccionar firmware de iBoot y coprocesadores |
| Dispositivos | Listar dispositivos y apps, transferir archivos con AFC, capturar logs y montar imágenes de desarrollador |
| App Store Connect | Gestionar certificados, bundle IDs, dispositivos y perfiles de aprovisionamiento |
| Investigación | Simbolizar registros de fallos, depurar por SSH, trazar con Frida y descompilar con un LLM |
Sustituye las rutas de archivo de los ejemplos por las tuyas. Ejecuta ipsw --help o añade --help a cualquier subcomando para ver sus opciones.
# Download the latest IPSW for iPhone 15 Pro
ipsw download ipsw --device iPhone16,1 --latest
# Inspect a local IPSW and extract its kernelcache
ipsw info /path/to/firmware.ipsw
ipsw extract --kernel /path/to/firmware.ipsw
# Compare two firmware builds
ipsw diff /path/to/old.ipsw /path/to/new.ipsw
ipsw dyld info /path/to/dyld_shared_cache_arm64e
# Extract Foundation for use in other tools
ipsw dyld extract /path/to/dyld_shared_cache_arm64e Foundation
# Dump headers directly from the cache
ipsw class-dump /path/to/dyld_shared_cache_arm64e SpringBoardServices --headers -o headers
Usa la caché directamente para el análisis de Objective-C: las dylibs extraídas aún pueden hacer referencia a metadatos almacenados en otras partes de la caché.
# Select an architecture explicitly for universal binaries
ipsw macho info /path/to/binary --arch arm64e
ipsw macho disass /path/to/binary --arch arm64e --symbol _main
# Search a directory of binaries for an imported symbol
ipsw macho search /path/to/binaries --import 'CCCrypt'
# List KEXTs, then extract one by its full bundle ID
ipsw kernel kexts /path/to/kernelcache
ipsw kernel extract /path/to/kernelcache com.apple.driver.ASIOKit -o kexts
ipsw idev list
ipsw idev apps ls
ipsw idev afc ls /
ipsw idev syslog
Los comandos macho disass y dyld disass pueden enviar el desensamblado a un proveedor de LLM configurado con --dec. Consulta la guía del descompilador para la configuración del proveedor, la selección de modelo y ejemplos.
La CLI lee la configuración YAML desde ~/.config/ipsw/config.yaml; usa --config para seleccionar otro archivo. Consulta config.example.yml y la guía de configuración para ajustes y variables de entorno.
Para scripts, selecciona una arquitectura con --arch al abrir binarios universales y usa una ruta completa de dylib cuando un nombre corto sea ambiguo. Los comandos que admiten --json lo documentan en su ayuda.
El daemon independiente ipswd expone una API REST para automatización. Consulta la referencia de la API.
Al informar de un bug, incluye ipsw version, el comando que ejecutaste y la compilación de firmware o el tipo de archivo relevante. Elimina la información personal de los logs y los informes de fallos.
Compilar desde el código fuente requiere Go 1.26 o posterior y una cadena de herramientas de C para CGO:
git clone https://github.com/blacktop/ipsw.git
cd ipsw
make build
Consulta CONTRIBUTING.md para las directrices de desarrollo y contribución.