#target #cross-platform #interface #memory #binary #process

nightly bin+lib udbg

跨平台二进制调试和内存黑客工具库

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 2022年3月20日

调试 中排名 #420

每月下载量 48

MIT 许可证 MIT

580KB
16K SLoC

udbg

crates.io docs.rs

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