
Navaja suiza para investigación en iOS/macOS
<p align="center">
<a href="https://github.com/blacktop/ipsw"><img alt="IPSW Logo" src="https://raw.githubusercontent.com/blacktop/ipsw/master/www/static/img/logo/ipsw.svg" height="140" /></a>
<h1 align="center">ipsw</h1>
<h4><p align="center">Navaja suiza para la investigación de iOS/macOS</p></h4>
<p align="center">
<a href="https://github.com/blacktop/ipsw/actions" alt="Actions">
<img src="https://github.com/blacktop/ipsw/actions/workflows/go.yml/badge.svg" /></a>
<a href="https://github.com/blacktop/ipsw/releases/latest" alt="Downloads">
<img src="https://img.shields.io/github/downloads/blacktop/ipsw/total.svg" /></a>
<a href="https://github.com/blacktop/ipsw/releases" alt="GitHub Release">
<img src="https://img.shields.io/github/release/blacktop/ipsw.svg" /></a>
<a href="http://doge.mit-license.org" alt="LICENSE">
<img src="https://img.shields.io/:license-mit-blue.svg" /></a>
</p>
<br>
**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](https://github.com/blacktop/ipsw-skill) · [Instalación](#install) · [Ejemplos de CLI](#cli-examples) · [Documentación](https://blacktop.github.io/ipsw)
## Usar ipsw con un agente de IA
Comienza con **[ipsw-skill](https://github.com/blacktop/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](#install) y luego añade la skill:
```sh
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](https://github.com/blacktop/ipsw-skill#installation) contiene instrucciones de configuración para agentes individuales, incluido el plugin de Claude Code y la extensión de Gemini CLI.
## Instalación
### macOS
El tap de Homebrew del mantenedor incluye la compilación con extras:
```sh
brew install blacktop/tap/ipsw
```
La fórmula principal de Homebrew también está disponible: `brew install ipsw`.
### Linux
```sh
sudo snap install ipsw
```
### Windows
```powershell
scoop bucket add blacktop https://github.com/blacktop/scoop-bucket.git
scoop install blacktop/ipsw
```
También puedes descargar los binarios desde [GitHub Releases](https://github.com/blacktop/ipsw/releases/latest). Consulta la [guía de instalación](https://blacktop.github.io/ipsw/docs/getting-started/installation) 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.
## Qué puedes hacer
| Á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 |
## Ejemplos de CLI
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.
### Descargar y extraer firmware
```sh
# 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
```
### Explorar una caché compartida de dyld
```sh
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é.
### Inspeccionar binarios y kernelcaches
```sh
# 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
```
### Trabajar con un dispositivo conectado
```sh
ipsw idev list
ipsw idev apps ls
ipsw idev afc ls /
ipsw idev syslog
```
### Descompilar con un LLM
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](https://blacktop.github.io/ipsw/docs/guides/decompiler) para la configuración del proveedor, la selección de modelo y ejemplos.
## Configuración y automatización
La CLI lee la configuración YAML desde `~/.config/ipsw/config.yaml`; usa `--config` para seleccionar otro archivo. Consulta [config.example.yml](https://github.com/blacktop/ipsw/blob/master/config.example.yml) y la [guía de configuración](https://blacktop.github.io/ipsw/docs/getting-started/configuration) 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](https://blacktop.github.io/ipsw/api/).
## Documentación y comunidad
- [Agent skill y configuración](https://github.com/blacktop/ipsw-skill)
- [Guías y referencia de comandos](https://blacktop.github.io/ipsw)
- [Diffs de firmware precalculados](https://github.com/blacktop/ipsw-diffs)
- [GitHub Discussions](https://github.com/blacktop/ipsw/discussions)
- [Issue tracker](https://github.com/blacktop/ipsw/issues)
- [DeepWiki](https://deepwiki.com/blacktop/ipsw), una guía del código generada por IA
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 y contribuir
Compilar desde el código fuente requiere Go 1.26 o posterior y una cadena de herramientas de C para CGO:
```sh
git clone https://github.com/blacktop/ipsw.git
cd ipsw
make build
```
Consulta [CONTRIBUTING.md](https://github.com/blacktop/ipsw/blob/master/CONTRIBUTING.md) para las directrices de desarrollo y contribución.
## Créditos
Gracias a Jonathan Levin por sus herramientas y su documentación sobre los internals de iOS, a la comunidad de investigación de seguridad de Apple y a todos los que contribuyen con código, informes de bugs e investigación.
## Licencia
[MIT](https://github.com/blacktop/ipsw/blob/master/LICENSE).