Voltron 是一个用 Python 编写的可扩展调试器 UI 工具包。它旨在通过附加可从调试器主机检索和显示数据的实用程序视图来改善各种调试器(LLDB、GDB、VDB 和 WinDbg)的用户体验。通过在其他 TTY 中运行这些视图,您可以构建自定义的调试器用户界面来满足您的需求。
Voltron 并不打算成为每个人的一切。它不是调试器 CLI 的全面替代品。相反,它旨在补充您现有的设置,并允许您根据需要尽可能多或尽可能少地扩展 CLI 调试器。如果您只想在调试器旁边的窗口中查看寄存器内容,您可以这样做。如果你想全力以赴并拥有看起来更像 OllyDbg 的东西,你也可以这样做。
内置视图用于:
作者的设置看起来像这样:
任何调试器命令都可以拆分为视图并使用指定的 Pygments 词法分析器突出显示:
更多屏幕截图在这里。
Voltron 支持 LLDB、GDB、VDB 和 WinDbg/CDB(通过 PyKD),并在 macOS、Linux 和 Windows 上运行。
WinDbg 支持仍然相当新,如果您有问题,请提出问题。
支持以下架构:
LLDB | 数据库 | 虚拟数据库 | 风数据库 | |
---|---|---|---|---|
x86 | ✓ | ✓ | ✓ | ✓ |
x86_64 | ✓ | ✓ | ✓ | ✓ |
手臂 | ✓ | ✓ | ✓ | ✗ |
ARM64 | ✓ | ✗ | ✗ | ✗ |
电源电脑 | ✗ | ✓ | ✗ | ✗ |
注意:安装脚本仅完全支持 macOS 和 Debian 衍生版本。希望它不会在其他 Linux 发行版上失败,但它不会尝试安装软件包依赖项。如果您使用的是其他发行版,请查看install.sh
以了解在运行之前可能需要安装哪些依赖项。
下载源并运行安装脚本:
$ git clone https://github.com/snare/voltron
$ cd voltron
$ ./install.sh
默认情况下,安装脚本将安装到用户的site-packages
目录中。如果要安装到系统site-packages
中,请使用-s
标志:
$ ./install.sh -s
您还可以安装到虚拟环境中(仅适用于 LLDB),如下所示:
$ ./install.sh -v /path/to/venv -b lldb
如果您使用的是没有 shell 的 Windows,安装时遇到问题,或者希望手动安装,请参阅手动安装文档。
如果您的调试器有一个 init 脚本(对于 LLDB 为.lldbinit
,对于 GDB 为.gdbinit
),请通过获取entry.py
入口点脚本将其配置为在启动时加载 Voltron。完整路径将位于voltron
包内。例如,在 macOS 上,它可能是/Library/Python/2.7/site-packages/voltron/entry.py 。如果install.sh
脚本在您的路径中检测到 GDB 或 LLDB,则会自动将其添加到您的.gdbinit
或.lldbinit
文件中。
LLDB:
command script import /path/to/voltron/entry.py
广东发展局:
source /path/to/voltron/entry.py
如有必要,启动调试器并手动初始化 Voltron。
在最新版本的 LLDB 上,您不需要手动初始化 Voltron:
$ lldb target_binary
在旧版本的 LLDB 上,您需要在加载次等版本后调用voltron init
:
$ lldb target_binary
(lldb) voltron init
广东发展局:
$ gdb target_binary
虚拟数据库:
$ ./vdbbin target_binary
> script /path/to/voltron/entry.py
WinDbg/CDB 仅支持通过 Linux 用户空间的 Bash 运行。作者使用Git Bash和ConEmu进行测试。启动调试器时,可以通过一个命令加载 PyKD 和 Voltron:
$ cdb -c '.load C:pathtopykd.pyd ; !py --global C:pathtovoltronentry.py' target_binary
在另一个终端(我使用 iTerm 窗格)中启动一个 UI 视图。在 LLDB、WinDbg 和 GDB 上,视图将立即更新。在 VDB 上,它们不会更新,直到下级停止(在断点处、步骤之后等):
$ voltron view register
$ voltron view stack
$ voltron view disasm
$ voltron view backtrace
设置断点并运行你的下级。
(*db) b main
(*db) run
当调试器到达断点时,视图将更新以反映寄存器、堆栈、内存等的当前状态。在调试器 CLI 中执行每个命令后,使用调试器的“stop hook”机制更新视图。因此,每次您单步执行或继续执行并遇到断点时,视图都会更新。
请参阅 github 上的 wiki。
问:为什么我在加载 Voltron 时遇到ImportError
?
答:您可能安装了多个版本的 Python,并且使用了错误的版本安装了 Voltron。请参阅更详细的安装说明。
问:全球环境基金?佩达? PwnDbg? fG的gdbinit?
A. GDB 的所有超级出色的扩展。这些工具主要为开发任务提供一组附加命令,但每个工具还提供“上下文”显示,其中包含寄存器、堆栈、代码等视图,如 Voltron。每次调试器停止时,这些工具都会在调试器控制台中打印其上下文显示。 Voltron 采用了不同的方法,在调试器中嵌入 RPC 服务器植入,并启用来自其他终端(甚至是 Web 浏览器,或者现在与 Binary Ninja 同步)的视图附件,这允许用户构建更干净的多窗口界面他们的调试器。 Voltron 与所有这些工具配合得很好。您只需在选择的 GDB 扩展中禁用上下文显示并连接一些 Voltron 视图,同时仍然可以获得这些工具添加的有用命令的所有好处。
请参阅 github 上的问题跟踪器以获取更多信息或提交问题。
如果您在加载 Voltron 时遇到ImportError
,请确保您已按照适合您平台的安装说明进行操作。
在旧版本的 LLDB 上,加载调试目标后必须手动运行voltron init
命令,因为必须先加载目标,然后才能安装 Voltron 的钩子。 Voltron 将尝试自动注册其事件处理程序,并且如果需要voltron init
,它将通知用户。
有关 WinDbg/CDB 支持的更多信息请参见此处。
作者主要在 macOS 上使用 Voltron 和最新版本的 LLDB。在发布之前,我们将尝试在尽可能多的平台和架构上测试所有内容,但 LLDB/macOS/x64 将是迄今为止最常用的组合。希望战神金刚不会让你的宠物着火,但是 YMMV。
请参阅许可证文件。
如果你使用这个并且不讨厌它,请找个时间在会议上给我买一杯啤酒。该许可证还适用于其他贡献者 - richo 绝对值得为他的贡献喝点啤酒。
感谢我的前雇主 Assurance 和 Azimuth Security 给我时间来做这件事。
感谢 richo 对战神金刚的所有贡献。
fG! 的 gdbinit 是这个项目的最初灵感。
感谢 Willi 实施 VDB 支持。
Voltron 现在使用 Capstone 进行反汇编以及调试器主机的内部反汇编机制。 Capstone 是一个功能强大、开源、多架构的反汇编器,下一代逆向工程和调试工具正在其基础上构建。一探究竟。
感谢grazfather持续的贡献。