MCPcopy Index your code
hub / github.com/0xdea/rhabdomancer

github.com/0xdea/rhabdomancer @v0.9.3

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.9.3 ↗ · + Follow
27 symbols 43 edges 5 files 17 documented · 63%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

rhabdomancer

build doc

"The road to exploitable bugs is paved with unexploitable bugs."

-- Mark Dowd

Rhabdomancer is a blazing fast IDA Pro headless plugin that locates calls to potentially insecure API functions in a binary file. Auditors can backtrace from these candidate points to find pathways allowing access to untrusted input.

Features

  • Blazing fast, headless user experience courtesy of IDA Pro 9.x and Binarly's idalib Rust bindings.
  • Support for C/C++ binary targets compiled for any architecture implemented by IDA Pro.
  • Bad API function call locations are printed to stdout and marked in the IDB.
  • Known bad API functions are grouped in tiers of badness to help prioritize the audit work.
  • [BAD 0] High priority - Functions that are generally considered insecure.
  • [BAD 1] Medium priority - Interesting functions that should be checked for insecure use cases.
  • [BAD 2] Low priority - Code paths involving these functions should be carefully checked.
  • The list of known bad API functions can be easily customized by editing conf/rhabdomancer.toml.

Blog posts

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. Install LLVM/Clang (see https://rust-lang.github.io/rust-bindgen/requirements.html).
  3. On Linux/macOS, install as follows: sh export IDADIR=/path/to/ida # if not set, the build script will check common locations cargo install rhabdomancer On Windows, instead, use the following commands: powershell $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 rhabdomancer

Compiling

Alternatively, you can build from source:

  1. Download, install, and configure IDA Pro (see https://hex-rays.com/ida-pro).
  2. Install LLVM/Clang (see https://rust-lang.github.io/rust-bindgen/requirements.html).
  3. On Linux/macOS, compile as follows: sh git clone --depth 1 https://github.com/0xdea/rhabdomancer cd rhabdomancer 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: powershell git clone --depth 1 https://github.com/0xdea/rhabdomancer cd rhabdomancer $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

Usage

  1. Make sure IDA Pro is properly configured with a valid license.
  2. Customize the list of known bad API functions in conf/rhabdomancer.toml if needed. You can override the default configuration file location by setting the RHABDOMANCER_CONFIG environment variable.
  3. Make sure the IDADIR environment variable is set if your IDA Pro installation is in a non-standard location.
  4. Run as follows: sh rhabdomancer <binary_file> Any existing .i64 IDB file will be updated; otherwise, a new IDB file will be created.
  5. Open the resulting .i64 IDB file with IDA Pro.
  6. Select View > Open subviews > Bookmarks
  7. Enjoy your results conveniently collected into an IDA Pro window.

[!NOTE] Rhabdomancer also adds comments at marked call locations.

Compatibility

Only the latest IDA Pro release is officially supported, but older versions may work as well. The following table summarizes the latest compatible release for each IDA Pro version:

IDA Pro 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.6
v9.3.260213 v0.8.1
v9.3.260327 v0.9.0
v9.3.260421 current release

[!NOTE] Check the idalib documentation for additional information.

Changelog

TODO

Core symbols most depended-on inside this repo

run
called by 4
src/lib.rs
normalize_name
called by 3
src/lib.rs
is_in_plt
called by 2
src/lib.rs
show_everything
called by 2
tests/main.rs
usage
called by 1
src/main.rs
description
called by 1
src/lib.rs
check_function
called by 1
src/lib.rs
normalize_sets
called by 1
src/lib.rs

Shape

Method 14
Function 9
Class 3
Enum 1

Languages

Rust81%
Python19%

Modules by API surface

src/lib.rs17 symbols
ida-plugin-stub.py5 symbols
tests/main.rs2 symbols
src/main.rs2 symbols
build.rs1 symbols

For agents

$ claude mcp add rhabdomancer \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page