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

bin+lib haruspex

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

19 releases (4 breaking)

Uses new Rust 2024

0.5.6 Mar 29, 2025
0.5.5 Mar 27, 2025
0.4.2 Feb 28, 2025
0.3.2 Feb 13, 2025
0.1.1 Nov 29, 2024

#1307 in Command line utilities

Download history 63/week @ 2025-01-08 189/week @ 2025-01-15 5/week @ 2025-01-22 114/week @ 2025-01-29 31/week @ 2025-02-05 264/week @ 2025-02-12 146/week @ 2025-02-19 328/week @ 2025-02-26 141/week @ 2025-03-05 34/week @ 2025-03-12 412/week @ 2025-03-19 274/week @ 2025-03-26 20/week @ 2025-04-02 8/week @ 2025-04-09

718 downloads per month
Used in augur

MIT license

22KB
215 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–13MB
~175K SLoC