#reverse-engineering #binary-file #ida #idalib #vuln-dev

bin+lib haruspex

Vulnerability research assistant that extracts pseudo-code from IDA Hex-Rays decompiler

17 releases (4 breaking)

Uses new Rust 2024

new 0.5.4 Mar 21, 2025
0.5.3 Mar 20, 2025
0.4.2 Feb 28, 2025
0.3.2 Feb 13, 2025
0.1.1 Nov 29, 2024

#1299 in Command line utilities

Download history 150/week @ 2024-12-02 36/week @ 2024-12-09 254/week @ 2024-12-16 1/week @ 2025-01-06 223/week @ 2025-01-13 33/week @ 2025-01-20 6/week @ 2025-01-27 138/week @ 2025-02-03 210/week @ 2025-02-10 80/week @ 2025-02-17 288/week @ 2025-02-24 195/week @ 2025-03-03 131/week @ 2025-03-10 363/week @ 2025-03-17

978 downloads per month
Used in augur

MIT license

21KB
211 lines

haruspex

build doc

"Hacking is the discipline of questioning all your assumptions all of the time."

-- Dave Aitel

Haruspex is a blazing fast IDA Pro headless plugin that extracts pseudo-code generated by IDA Pro's decompiler in a format that should be suitable to be imported into an IDE or parsed by static analysis tools such as Semgrep, weggli, or oneiromancer.

Features

  • Blazing fast, headless user experience courtesy of IDA Pro 9 and Binarly's idalib Rust bindings.
  • Support for binary targets for any architecture implemented by IDA Pro's Hex-Rays decompiler.
  • Pseudo-code of each function is stored in a separated file in the output directory for easy inspection.
  • External crates can invoke decompile_to_file to decompile a function and save its pseudo-code to disk.

Blog post

See also

Installing

The easiest way to get the latest release is via crates.io:

  1. Download, install, and configure IDA Pro (see https://hex-rays.com/ida-pro).
  2. Download and extract the IDA SDK (see https://docs.hex-rays.com/developer-guide).
  3. Install LLVM/Clang (see https://rust-lang.github.io/rust-bindgen/requirements.html).
  4. On Linux/macOS, install as follows:
    export IDASDKDIR=/path/to/idasdk
    export IDADIR=/path/to/ida # if not set, the build script will check common locations
    cargo install haruspex
    
    On Windows, instead, use the following commands:
    $env:LIBCLANG_PATH="\path\to\clang+llvm\bin"
    $env:PATH="\path\to\ida;$env:PATH"
    $env:IDASDKDIR="\path\to\idasdk"
    $env:IDADIR="\path\to\ida" # if not set, the build script will check common locations
    cargo install haruspex
    

Compiling

Alternatively, you can build from source:

  1. Download, install, and configure IDA Pro (see https://hex-rays.com/ida-pro).
  2. Download and extract the IDA SDK (see https://docs.hex-rays.com/developer-guide).
  3. Install LLVM/Clang (see https://rust-lang.github.io/rust-bindgen/requirements.html).
  4. On Linux/macOS, compile as follows:
    git clone --depth 1 https://github.com/0xdea/haruspex
    cd haruspex
    export IDASDKDIR=/path/to/idasdk # or edit .cargo/config.toml
    export IDADIR=/path/to/ida # if not set, the build script will check common locations
    cargo build --release
    
    On Windows, instead, use the following commands:
    git 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:IDASDKDIR="\path\to\idasdk"
    $env:IDADIR="\path\to\ida" # if not set, the build script will check common locations
    cargo build --release
    

Usage

  1. Make sure IDA Pro is properly configured with a valid license.
  2. Run as follows:
    haruspex <binary_file>
    
  3. Find the extracted pseudo-code of each decompiled function in the binary_file.dec directory:
    vim <binary_file>.dec
    code <binary_file>.dec
    

Compatibility

  • IDA Pro 9.0.240925 - Latest compatible: v0.1.3.
  • IDA Pro 9.0.241217 - Latest compatible: v0.4.2.
  • IDA Pro 9.1.250226 - Latest compatible: current version.

Note: check idalib documentation for additional information.

Changelog

TODO

Dependencies

~3–14MB
~175K SLoC