5 个版本
0.3.1 | 2023年10月1日 |
---|---|
0.3.0 | 2023年9月12日 |
0.2.3 | 2023年8月27日 |
0.2.2 | 2023年7月3日 |
0.1.0 |
|
在 调试 中排名 #420
每月下载量 48 次
580KB
16K SLoC
udbg
udbg 是用 Rust 编写的跨平台二进制调试和内存黑客工具库。
- 👍 跨平台:udbg 包装了不同平台上不同接口的细节,并提供统一的接口
- 👍 多目标:在大多数情况下,你可以控制多个调试目标
- 👍 非侵入性:你只能查看目标的信息,而不能将其附加到目标上
- 👍 丰富的目标类型:除了进程,目标还可以是
minidump
、一个PE 文件
,甚至是带有额外扩展的操作系统内核空间。
API 概述
udbg 中有两种主要的接口,目标信息和调试接口。
目标信息接口,抽象为 UDbgTarget
特性,表示一个可观察的调试目标,在大多数情况下是一个 活动进程
,也可以是一个 minidump
、一个 PE 文件
,甚至是带有额外扩展的操作系统内核空间。
UDbgTarget
包含以下功能,内存操作
(读取/写入/枚举),模块
枚举,线程
枚举,句柄/FDs
枚举等。基于这些功能,我们可以实现针对不同类型目标的某些实用工具,如模块转储、内存搜索、钩子扫描、恶意代码扫描等。
调试接口,抽象为UDbgEngine
特性,主要提供进程控制能力。存在一个默认实现
,通常它封装了Windows上的调试函数,并在Linux上封装了ptrace接口。
大多数上述接口都设计为动态对象,这有利于脚本绑定,udbg默认提供lua绑定
。
目标信息接口的当前状态
平台/目标 | 内存操作 | 内存列表 | 线程 | 模块/符号 | 句柄/FD列表 |
---|---|---|---|---|---|
Windows进程 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Linux进程 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
MacOs进程 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Mini Dump | ✔️ (只读) | ✔️ | ✔️ | ✔️ | 🚧 |
PE文件 | ✔️ (只读) | ✔️ | - | - | - |
调试接口的当前状态
平台/目标 | 调试符号 | 断点 | 观察点(HWBP) | 多目标 |
---|---|---|---|---|
Windows(x86/x64) | ✔️ (pdb) | ✔️ | ✔️ | ✔️ |
Windows(aarch64) | ✔️ (pdb) | ✔️ | ✔️ | ✔️ |
Linux(x86_64) | ✔️ (elf) | ✔️ | ✔️ | ✔️ |
Linux(aarch64) | ✔️ (elf) | ✔️ | ✔️ | ✔️ |
示例
- 获取目标信息的跨平台接口,请参阅
src/test.rs
fn target
- 编写一个基本的调试器,请参阅
src/test.rs
fn test_debug
依赖关系
~28–76MB
~1.5M SLoC