Skip to content
KitploitKITPLOIT
ToolsBlog
Log in
Submit
ToolsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

FeedsContactPrivacy© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
rhabdomancer — Vulnerability research assistant that locates calls to potentially insecure API functions in a binary file. | Kitploit
Tools/GitHubGitHub/0xdea/rhabdomancer
Static AnalysisVulnerability AnalysisReverse EngineeringBinary Analysis
GitHub0xdea/rhabdomancer

rhabdomancer

Vulnerability research assistant that locates calls to potentially insecure API functions in a binary file.

View Repository
13115244 days agoReviewed by Kitploit

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →
Website
Share

rhabdomancer

build doc

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

-- Mark Dowd

Rhabdomancer is a blazing-fast IDA 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 9.x and idalib-rs Rust bindings.
  • Support for C/C++ binary targets compiled for any architecture implemented by IDA.
  • Bad API function call locations are printed to stdout and marked in the IDB.
    • In ELF binaries, a function is typically listed twice with the same call locations: once as its .plt stub (marked as thunk) and once as its import. This redundancy is deliberate: it ensures that no call location is missed. Each call location is marked only once 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 is built in and can be easily customized with a configuration file based on conf/rhabdomancer.toml.

Articles

  • https://hex-rays.com/blog/streamlining-vulnerability-research-idalib-rust-bindings
  • https://hnsecurity.it/blog/streamlining-vulnerability-research-with-ida-pro-and-rust

See also

  • https://github.com/0xdea/ghidra-scripts/blob/main/Rhabdomancer.java
  • https://docs.hex-rays.com/release-notes/9_0#headless-processing-with-idalib
  • https://github.com/idalib-rs/idalib
  • https://books.google.it/books/about/The_Art_of_Software_Security_Assessment.html

Installing

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

  1. Download, install, and configure IDA (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:
    export IDADIR=/path/to/ida # if not set, the build script will check common locations
    cargo install rhabdomancer --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 rhabdomancer --locked
    

Compiling

Alternatively, you can build from source:

  1. Download, install, and configure IDA (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:
    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 --locked
    
    On Windows, instead, use the following commands:
    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 --locked
    

Usage

  1. Make sure IDA is properly configured with a valid license.
  2. Optionally customize the list of known bad API functions: copy conf/rhabdomancer.toml (pick the tag that matches your installed version for its exact built-in list), edit the copy, and set the RHABDOMANCER_CONFIG environment variable to its path. The file must define the high, medium, and low arrays, and no other keys. Otherwise (or if the variable is empty), the built-in list is used, which is embedded in the binary at build time from conf/rhabdomancer.toml (editing that file requires a rebuild).
  3. Make sure the IDADIR environment variable is set if your IDA installation is in a non-standard location.
  4. Run as follows:
    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.
  6. Select View > Open subviews > Bookmarks
  7. Enjoy your results conveniently collected into an IDA window.

[!NOTE] Rhabdomancer also adds comments at marked call locations. Both bookmarks and comments are tagged as [BAD n] <function_name>, where n is the priority tier (0 = high, 1 = medium, 2 = low), so that scripts can search IDBs for them. This format is stable across releases.

Compatibility

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 versionLatest compatible release
v9.0.240925v0.2.4
v9.0.241217v0.3.5
v9.1.250226v0.6.2
v9.2.250908v0.7.6
v9.3.260213v0.8.1
v9.3.260327v0.9.0
v9.3.260421v0.9.3
v9.4.260714current release
v9.4.260915current release

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

Credits

This project's development has been supported by the following organizations:

  • HN Security
  • Hex-Rays via their Contributor Program

Changelog

  • CHANGELOG.md

TODO

  • Further enrich the known bad API function list (see https://github.com/0xdea/semgrep-rules).
  • Consider broadening the scope of normalization in normalize_name to account for more cases.
  • Implement serialized output to facilitate automated parsing and analysis.
  • Implement a basic ruleset in the style of VulFi and VulnFanatic.
Download Tool