
Vulnerability research assistant that extracts pseudocode from the IDA Hex-Rays decompiler.
"Hacking is the discipline of questioning all your assumptions all of the time."
-- Dave Aitel
Haruspex is a blazing-fast IDA headless plugin that extracts pseudocode generated by IDA'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.

decompile_to_file] to decompile a function and save its pseudocode and type definitions to
disk, telling apart functions that can't be decompiled from errors such as an unavailable Hex-Rays license.The easiest way to get the latest release is via crates.io:
export IDADIR=/path/to/ida # if not set, the build script will check common locations
cargo install haruspex --locked
On Windows, instead, use the following commands:
$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
Alternatively, you can build from source:
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 --locked
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:IDADIR="\path\to\ida" # if not set, the build script will check common locations
cargo build --release --locked
IDADIR environment variable is set if your IDA installation is in a non-standard location.haruspex <binary_file>
<binary_file>, named after
it with its extension, if any, replaced by .dec (e.g., foo.exe and foo both produce foo.dec, so binaries
that differ only in their extension share the same output directory):
vim foo.dec
code foo.dec
Only the latest IDA release is officially supported, but older versions may work as well. The following table summarizes the latest compatible release for each IDA version:
| 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] Check the idalib-rs documentation for additional information.
This project's development has been supported by the following organizations:
.cpp extension instead of .c to output pseudocode (see
this issue)?