“通往可利用漏洞的道路,是由不可利用的漏洞铺就的。”
-- Mark Dowd
Rhabdomancer 是一个极速的 IDA 无头插件,用于在二进制文件中定位对潜在不安全 API 函数的调用。审计人员可以从这些候选点回溯,以找到允许访问不可信输入的路径。

(lib)。.plt 条目,或 PE 和 Mach-O 二进制文件的导入桩,列为 thunk)进行的调用会被回溯到其调用者。.plt 桩(标记为 thunk),一次作为其导入。每个调用位置在 IDB 中只会被标记一次。conf/rhabdomancer.toml 的配置文件轻松自定义。_strcpy)、库别名前缀(例如 Universal CRT 中的 __o_malloc、glibc 中的 __libc_system 和 __GI___snprintf),并且仅对桩和此类别名,忽略 IDA 为已在使用中的名称追加的数字后缀(例如 memset_0)。[!NOTE] 加固函数(例如
__strcpy_chk,在使用_FORTIFY_SOURCE构建时替代strcpy)会被有意不匹配,因为它们是所列函数的已检查变体。若要同时标记对它们的调用,请将它们显式添加到自定义配置中(例如,将"__strcpy_chk"设置为与strcpy相同的优先级)。
获取最新版本的最简单方式是通过 crates.io:
export IDADIR=/path/to/ida # if not set, the build script will check common locations
cargo install rhabdomancer --locked
在 Windows 上,请改用以下命令:
$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
或者,你可以从源代码构建:
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
在 Windows 上,请改用以下命令:
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
conf/rhabdomancer.toml(选择与你所安装版本匹配的标签,以获取其确切的内置列表),编辑该副本,并将 RHABDOMANCER_CONFIG
环境变量设置为其路径。该文件必须定义 high、medium 和 low 数组,且不得包含其他键。
否则将使用内置列表,该列表在构建时从 conf/rhabdomancer.toml 嵌入到二进制文件中
(编辑该文件需要重新构建)。IDADIR 环境变量。rhabdomancer <binary_file>
任何现有的 .i64 IDB 文件都将被更新;否则,将创建一个新的 IDB 文件。.i64 IDB 文件。View > Open subviews > Bookmarks[!NOTE] Rhabdomancer 还会在标记的调用位置添加注释。书签和注释都标记为
[BAD n] <function_name>,其中n是优先级层级(0 = 高,1 = 中,2 = 低),以便脚本可以 在 IDB 中搜索它们。此格式在各版本间保持稳定。
官方仅支持最新的 IDA 版本,但较旧的版本也可能正常工作。下表 总结了每个 IDA 版本对应的最新兼容版本:
| IDA 版本 | 最新兼容版本 |
|---|---|
| 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 | v0.9.3 |
| v9.4.260714 | 当前版本 |
| v9.4.260915 | 当前版本 |
[!NOTE] 请查看 idalib-rs 文档以获取更多信息。
本项目的开发得到了以下组织的支持:
.plt 段之外的 thunk 进行的调用(例如,MSVC 增量链接的 j_ thunk)。(lib))。