
Un pipeline de ingeniería inversa que convierte un binario de firmware y su desensamblado (posiblemente incorrecto) en una especificación de procesador funcional para Ghidra. Cuando te encuentras con un procesador propietario sin documentación y sin soporte en Ghidra, esta herramienta recupera la codificación real de cada instrucción — qué bits son el opcode, cuáles son registros, cuáles son inmediatos — y escribe una especificación SLEIGH que puedes cargar directamente en Ghidra para descompilar el firmware.
En esencia, es un flujo de trabajo agéntico: un pipeline fijo donde cada paso es un modelo de lenguaje grande al que se le solicita una tarea específica. El flujo de trabajo está orquestado por código determinista — no por los propios LLM — y cada constructor SLEIGH generado al final se verifica compilándolo con el binario sleigh de Ghidra antes de ser aceptado. Las compilaciones fallidas se devuelven al modelo para hasta tres intentos de corrección.
Objdump
│
▼
Bootstrap ─── agrupación determinista (sin LLM)
│
▼
┌─ Bucle de Procesamiento ──────────────────┐
│ Intérprete de Texto → Intérprete de Bits ──┐ │
│ → Gestor de Conocimiento │ │
│ → Supervisor │ │
│ │ división ───────┘ │
│ └── siguiente grupo ────────────┤
└────────────────────────────────────────────────┘
│
▼
Base de Conocimiento
│
▼
Generador SLEIGH ─── bucle de compilar-verificar-reintentar
│
▼
Ghidra .slaspec
Las instrucciones se agrupan en grupos (clusters) según su estructura (tamaño en bytes, patrón de tokens, máscara de bits fijos). Cada grupo se analiza luego mediante una cadena de pasos especializados de LLM:
add {REG1}, {REG2}, {REG3}).Cuando la base de conocimiento está completa, un generador SLEIGH independiente construye la especificación de Ghidra en dos fases: un esqueleto determinista de todos los constructores marcados como unimpl, y luego un LLM completa la semántica p-code instrucción por instrucción, compilando cada una contra el binario sleigh de Ghidra y reintentando en caso de fallo.
Diseñado como un copiloto para el analista, no un reemplazo: la TUI expone cada decisión, el supervisor escala los grupos ambiguos a un humano, y el historial completo de conversaciones, llamadas a herramientas y uso de tokens de los LLM se escribe en disco.
Probado en LEGv8, MIPS, pi32v2 y x86.
# Docker (recomendado)
echo "ANTHROPIC_API_KEY=sk-ant-..." > .env
./docker/run.sh integration_tests/mips
# Local
pip install -e ".[all]"
python -m main --config config.yaml
Entrada: un binario de firmware y un desensamblado de objdump — incluso uno producido contra la arquitectura incorrecta. La herramienta no resuelve el problema del desensamblado por sí misma; la calidad de la salida escala con la calidad del desensamblado de entrada.
Salida: un archivo .slaspec de Ghidra más una base de conocimiento JSON de registros, codificaciones de instrucciones, modos de direccionamiento y rasgos de arquitectura.
La documentación completa — arquitectura, internals de los agentes, ejemplos prácticos, referencia de configuración — se encuentra en la wiki:
pip install -e ".[docs]"
cd wiki && mkdocs serve
Luego abre http://localhost:8000.
ANTHROPIC_API_KEYrun.sh)