Xevion/idakit

GitHub: Xevion/idakit

idakit 是 IDA Pro 9.x idalib 的地道 Rust 绑定,通过安全的高层封装让开发者能用 Rust 驱动 IDA 内核进行程序分析和自动化处理。

Stars: 0 | Forks: 0

# idakit 适用于 IDA Pro `idalib` (9.x) 的地道 Rust 绑定。 `idakit` 封装了 IDA Pro 内核,因此你可以通过安全的 Rust 来驱动分析过程。它包含两个 crate: - **`idakit-sys`** —— 原始的 FFI:一个小型的 C++ 外观模式(`facade/idakit_facade.{cpp,H}`),将 C++ SDK 封装为干净的 C ABI 暴露出来,并包含对 `libida.so` / `libidalib.so` 已导出的未混淆(unmangled)符号的直接 `extern "C"` 绑定。 - **`idakit`** —— 地道(符合 Rust 惯用法)的封装层:`Ida::here` 会在当前线程启动内核,供直接、无需闭包的使用;而 `Ida::run` + `Ida::call` 则将其托管在一个专用线程上,适用于 GUI/异步/多线程调用者。`Idb`(打开的数据库)是 `!Send` 的,因此它会一直留在拥有内核的线程上。 ## 运行模型 IDA 内核是单线程且线程亲和(thread-affine)的——它必须由初始化它的那个线程来驱动。打开的数据库 `Idb` 是 `!Send + !Sync` 的:读取操作借用 `&Idb` 并返回轻量级的视图(`Func`、`Segment` 等),写入操作则获取 `&mut Idb`,因此借用检查器(borrow checker)会防止读视图的生命周期超过修改操作。 如果你的程序拥有自己的线程——例如脚本、测试或 CLI——`Ida::here` 会在当前线程启动内核,并直接交回数据库。无需内核线程,也无需闭包: ``` let mut idb = idakit::Ida::here()?; idb.open("/path/to/db.i64").call()?; for func in idb.functions() { println!("{:#x} {}", func.ea().get(), func.name().unwrap_or_default()); } idb.close(false); ``` 当当前线程必须保持空闲(例如 GUI 事件循环、异步 runtime),或者当多个线程需要驱动内核时,`Ida::run` 会生成一个专用的内核线程,并在调用线程上运行你的应用;任何线程都可以通过 `Ida::call` 将任务调度到内核上: ``` use idakit::{Ida, Idb}; Ida::run(|ida| { ida.call(|idb: &mut Idb| -> idakit::Result<()> { idb.open("/path/to/db.i64").call()?; for func in idb.functions() { println!("{:#x} {}", func.ea().get(), func.name().unwrap_or_default()); } idb.close(false); Ok(()) })? })??; ``` 内核是一个进程级别的全局对象,因此这两种方式是互斥的:同一时间只能有一个 `Idb` 处于活动状态(在第一个被 drop 之前,第二次调用 `here`/`run` 会返回 `InitError::AlreadyRunning`)。 ## 编译说明 你需要自备已授权的 IDA 安装——`idakit` 会链接它,但本项目中绝不会提供该程序。 - **`IDADIR`** —— 你的 IDA 安装目录,包含 `libida.so`(默认为 `~/ida-pro-9.3`)。 - **SDK 头文件** —— 编译过程中会根据公开的 IDA SDK 头文件([`HexRaysSA/ida-sdk`](https://github.com/HexRaysSA/ida-sdk))对外观模式进行编译。它会检测你安装的 IDA 版本,并将匹配的发布标签拉取到本地缓存中(需要 `git`)。无需额外的标志;这些头文件始终会与你链接的 runtime 保持一致。 - **`IDA_SDK_DIR`** *(可选)* —— 指向本地的 SDK 检出版,以跳过拉取过程(用于离线编译、CI)。**`IDA_SDK_CACHE_DIR`** *(可选)* —— 重定向拉取缓存的位置。 数据库必须是 64 位的 `.i64` —— 外观模式在编译时使用了 `__EA64__`。 最低支持的 Rust 版本为 **1.88**。 ## 许可证 MIT(指这些绑定代码)。IDA SDK 及 runtime 归 Hex-Rays 专有,不包含在此处,也不会被重新分发;编译过程会根据你的请求从上游仓库获取公开的 SDK 头文件。
标签:IDA Pro, Rust, 二进制分析, 云安全监控, 云安全运维, 云资产清单, 可视化界面, 绑定库, 网络流量审计, 逆向工程, 通知系统, 静态分析