
haruspex v0.10.0
Asistente de investigación de vulnerabilidades que extrae pseudocódigo del descompilador IDA Hex-Rays.
haruspex
"Hacking is the discipline of questioning all your assumptions all of the time."
-- Dave Aitel
Haruspex es un plugin headless de IDA extremadamente rápido que extrae el pseudocódigo generado por el decompilador de IDA en un formato que debería ser adecuado para importarse en un IDE, o para ser analizado por herramientas de análisis estático como Semgrep, weggli, o oneiromancer.

Características
- Experiencia de usuario headless extremadamente rápida gracias a IDA 9.x y los bindings de Rust idalib-rs.
- Soporte para objetivos binarios de cualquier arquitectura implementada por el decompilador Hex-Rays de IDA.
- El pseudocódigo de cada función se almacena en un archivo separado en el directorio de salida para facilitar su inspección.
- Las definiciones de tipos globales y por función se extraen a archivos de cabecera junto al pseudocódigo.
- Crates externos pueden invocar [
decompile_to_file] para decompilar una función y guardar su pseudocódigo y definiciones de tipos en disco.
Artículos
- https://hex-rays.com/blog/streamlining-vulnerability-research-idalib-rust-bindings
- https://hnsecurity.it/blog/streamlining-vulnerability-research-with-ida-pro-and-rust
Véase también
- https://github.com/0xdea/ghidra-scripts/blob/main/Haruspex.java
- https://github.com/0xdea/semgrep-rules
- https://github.com/0xdea/weggli-patterns
- https://docs.hex-rays.com/release-notes/9_0#headless-processing-with-idalib
- https://github.com/idalib-rs/idalib
- https://github.com/xorpse/parascope
- https://hnsecurity.it/blog/automating-binary-vulnerability-discovery-with-ghidra-and-semgrep
Instalación
La forma más sencilla de obtener la última versión es a través de crates.io:
- Descarga, instala y configura IDA (ver https://hex-rays.com/ida-pro).
- Instala LLVM/Clang (ver https://rust-lang.github.io/rust-bindgen/requirements.html).
- En Linux/macOS, instala de la siguiente manera:
En Windows, en cambio, usa los siguientes comandos:export IDADIR=/path/to/ida # if not set, the build script will check common locations cargo install haruspex --locked$env:LIBCLANG_PATH="\path\to\clang+llvm\bin" $env:PATH="\path\to\ida;$env:PATH" $env:IDADIR="\path\to\ida" # if not set, the build script will check common locations cargo install haruspex --locked
Compilación
Alternativamente, puedes compilar desde el código fuente:
- Descarga, instala y configura IDA (ver https://hex-rays.com/ida-pro).
- Instala LLVM/Clang (ver https://rust-lang.github.io/rust-bindgen/requirements.html).
- En Linux/macOS, compila de la siguiente manera:
En Windows, en cambio, usa los siguientes comandos:git clone --depth 1 https://github.com/0xdea/haruspex cd haruspex export IDADIR=/path/to/ida # if not set, the build script will check common locations cargo build --release --lockedgit clone --depth 1 https://github.com/0xdea/haruspex cd haruspex $env:LIBCLANG_PATH="\path\to\clang+llvm\bin" $env:PATH="\path\to\ida;$env:PATH" $env:IDADIR="\path\to\ida" # if not set, the build script will check common locations cargo build --release --locked
Uso
- Asegúrate de que IDA esté configurado correctamente con una licencia válida.
- Asegúrate de que la variable de entorno
IDADIResté configurada si tu instalación de IDA se encuentra en una ubicación no estándar. - Ejecuta de la siguiente manera:
haruspex <binary_file> - Encuentra el pseudocódigo extraído y las definiciones de tipos en el directorio
binary_file.dec:vim <binary_file>.dec code <binary_file>.dec
Compatibilidad
Solo la última versión de IDA es oficialmente compatible, pero versiones anteriores también pueden funcionar. La siguiente tabla resume la última versión compatible para cada versión de IDA:
| IDA version | Latest compatible release |
|---|---|
| v9.0.240925 | v0.2.4 |
| v9.0.241217 | v0.3.5 |
| v9.1.250226 | v0.6.2 |
| v9.2.250908 | v0.7.5 |
| v9.3.260213 | v0.8.1 |
| v9.3.260327 | v0.9.0 |
| v9.3.260421 | v0.9.3 |
| v9.4.260714 | current release |
| v9.4.260915 | current release |
[!NOTE] Consulta la documentación de idalib-rs para obtener información adicional.
Créditos
El desarrollo de este proyecto ha sido apoyado por las siguientes organizaciones:
- HN Security
- Hex-Rays a través de su Contributor Program
Registro de cambios
TODO
- Añadir una prueba de regresión de Semgrep CI para asegurar que el porcentaje de líneas analizadas no disminuya.
- ¿Usar la extensión
.cppen lugar de.cpara generar el pseudocódigo (ver este issue)? - Implementar salida serializada para facilitar el análisis y parseo automatizados.
- Integrar con el escaneo de Semgrep (ver https://github.com/0xdea/semgrep-rules).
- Integrar con el escaneo de weggli (ver https://github.com/0xdea/weggli-patterns).
- Mejorar la salida del decompilador al estilo de HexRaysPyTools y abyss.
- Implementar análisis en paralelo (ver https://github.com/fugue-re/fugue-mptp).