udbg
1.0.0
用 Rust 编写的用于二进制调试和内存黑客的跨平台库。
minidump
、 PE file
,甚至是具有额外扩展名的操作系统内核空间。 udbg中主要有两类接口,目标信息接口和调试接口。
目标信息的接口,抽象为UDbgTarget
特征,代表一个可观察的调试目标,在大多数情况下它是一个active process
,也可以是一个minidump
,一个PE file
,甚至是具有额外扩展的OS-Kernel空间。
UDbgTarget
包含这些函数, memory operation
(读/写/枚举), module
枚举, thread
枚举, handle/FDs
枚举等。基于这些函数,我们可以在不同类型的目标上实现一些实用程序,例如模块转储,内存搜索、 hook扫描、恶意代码扫描等
调试接口,抽象为UDbgEngine
Trait,主要提供流程控制的能力。有一个default implementation
,通常它包装 Windows 上的调试功能,并包装 Linux 上的 ptrace 接口。
上述大部分接口都被设计为动态对象,这是为了脚本绑定友好,udbg默认提供lua bindings
。
目标信息接口当前状态
平台/目标 | 内存操作 | 内存列表 | 线 | 模块/符号 | 句柄/FD列表 |
---|---|---|---|---|---|
窗口进程 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Linux进程 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
MacOS进程 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
小型转储 | ✔️(只读) | ✔️ | ✔️ | ✔️ | ? |
PE文件 | ✔️(只读) | ✔️ | - | - | - |
调试接口当前状态
平台/目标 | 调试符号 | 断点 | 观察点(HWBP) | 多目标 |
---|---|---|---|---|
Windows(x86/x64) | ✔️(PDB) | ✔️ | ✔️ | ✔️ |
Windows(aarch64) | ✔️(PDB) | ✔️ | ✔️ | ✔️ |
Linux(x86_64) | ✔️(精灵) | ✔️ | ✔️ | ✔️ |
Linux(aarch64) | ✔️(精灵) | ✔️ | ✔️ | ✔️ |
src/test.rs
fn target
src/test.rs
fn test_debug