首页
社区
课程
招聘
[翻译]基于python的开源LLDB前端GUI Voltron简介
发表于: 2016-10-27 16:15 17307

[翻译]基于python的开源LLDB前端GUI Voltron简介

2016-10-27 16:15
17307
python的开源LLDB前端GUI Voltron简介
译者:拟人(看雪ID: piasvic)
原文链接:https://github.com/snare/voltron原文作者:snare
   
微信公众号:看雪iOS安全小组 我们的微博:weibo.com/pediyiosteam
我们的知乎:zhihu.com/people/pediyiosteam
加入我们:看雪iOS安全小组成员募集中:http://bbs.pediy.com/showthread.php?t=212949
看雪iOS安全小组]置顶向导集合贴: http://bbs.pediy.com/showthread.php?t=212685

基于python的开源LLDB前端GUI Voltron简介
Voltron是一个可扩展的调试器界面配置工具,以Python写成. 它的目标是增强调试器(包括LLDB, GDB, VDB and WinDbg)的用户体验,方式是允许自由组合各种工具视图,这些视图从宿主调试器处获取数据。你可以跟搭积木一样随便组合这些终端界面的视图来构建切合自己需要的调试界面。
Voltron并不试图讨好所有人。与其说它会成为你常用的调试器命令行的完整替代品,不如说它在试图以补充的方式让调试器命令行界面更易用。你可以只是简单的在调试器的命令行旁边加个寄存器视图,也可以把它折腾得跟OllyDbg差不多。
下面是内建的视图类型:
                   寄存器
                   反汇编
                   栈
                   内存
                   断点
                   Backtrace

看看作者本人的设置:

任何调试指令都可以被分割进一个视窗,并用一个指定的Pygments lexer高亮:

更多截图见 这儿.
支持的调试器和架构
voltron 支持 LLDB, GDB, VDB and WinDbg/CDB (通过 PyKD) ,可以跑在macOS, Linux和Windows上.

WinDbg支持刚刚加入, 若发现任何问题请开个issue.

下面是支持的架构:

| | lldb | gdb | vdb | windbg |
|---------|------|-----|-----|--------|
| x86 | ✓ | ✓ | ✓ | ✓ |
| x86_64 | ✓ | ✓ | ✓ | ✓ |
| arm | ✓ | ✓ | ✓ | ✗ |
| arm64 | ✓ | ✗ | ✗ | ✗ |
| powerpc | ✗ | ✓ | ✗ | ✗ |

安装

用下面的脚本下载安装:
$ git clone https://github.com/snare/voltron
$ cd voltron
$ ./install.sh

如果你想把这个python包装到当前用户的 site-packages 目录, 就加个-u 参数:
$ ./install.sh -u
如果你在windows上没有shell装不上, 或者喜欢手动安装, 来看这个 手动安装文档.
速成指南
如果你的调试器支持初始化脚本(lldb是.lldbinit,gdb是.gdbinit), 把它设置成在里面执行entry.py脚本, 来保证每次启动载入Vultron。 完整的路径在voltron包里。 举个例子, 在macOS里它可能是/Library/Python/2.7/site-packages/voltron/entry.py。 install.sh脚本执行时如果在当前路径里探测到了GDB或者LLDB会自动把它加进去。

    LLDB:

command script import /path/to/voltron/entry.py

    GDB:


source /path/to/voltron/entry.py

如果需要的话,手动启动你的调试器,然后初始化Voltron。

比较新的LLDB版本里不需要手动初始化Voltron:

$ lldb target_binary

老点的版本里你就得在载入调试对象后手动调用voltron init了:

$ lldb target_binary
(lldb) voltron init

    GDB:


$ gdb target_binary

    VDB:


$ ./vdbbin target_binary
> script /path/to/voltron/entry.py

WinDbg/CDB仅通过Bash On Windows支持. 作者已通过 Git Bash 和 ConEmu进行了测试. PyKD可以在启动调试器时一并启动Voltron:

$ cdb -c '.load C:\path\to\pykd.pyd ; !py --global C:\path\to\voltron\entry.py' target_binary

在另一个终端(我用iTerm panes)里启动任一UI视图. 在LLDB, WinDbg和GDB这几个调试器下这几个视图会立刻更新. 在VDB下它们需要等到下个更新点 (跑到断点, 走完一步, 等等)才会更新:

$ voltron view register
$ voltron view stack
$ voltron view disasm
$ voltron view backtrace

设个断点,开动.
(*db) b main
(*db) run

当断点被触发时, 视图会被更新到寄存器/堆栈/内存/等等当前的状态。 调试器命令行里的每个指令都会利用调试器的「暂停挂钩」更新视图。所以每次你step,或者触发断点,视图都会更新。

文档
看看github上的 wiki.
问答
Q. 为什么我载入Voltron时碰到一个ImportError?

A. 你机器上可能不只装了一个版本的python,而且你把Voltron装到错误版本的python上了. 看看下面这个细节更多的 安装指南.

Q. GEF? PEDA? PwnDbg? fG's gdbinit?

A. 这些都是超牛的GDB扩展。它们的主要目的是给挖洞提供更多针对性的命令,但是又都提供了各自独立的上下文来显示寄存器啊,栈啊,代码啊等等,跟Voltron一样。这些工具都在每次调试器暂停时打印各自的上下文。Voltron则另辟蹊径,在调试器里塞了个RPC服务器,而让显示数据的视图可以容纳在其他终端(甚至浏览器,乃至synchronising with Binary Ninja中。这样用户就有机会给他们的调试器构建一个更干净的多窗口界面。Volkan不需要这些工具就可以工作的很好,但你也可以改改这些工具,把它们本来在各自上下文里显示的内容钩到另外的Voltron视图里,就可以鱼与熊掌得兼了。

Q. 为什么我载入Voltron时碰到一个巨长的python backtrace,里面有error: [Errno 48] Address already in use?(这个是译者加的,Surge用户特供。。。)

A. 因为Voltron默认的配置使用5555端口进行RPC通讯,这个端口被Surge占了……从Voltron源码里把config/default.cfg拷贝为~/.voltron/config(不存在请自行创建),然后找个文本编辑器改掉即可。

Bugs和修复

来github上的 issue tracker 了解了解,有问题就提问.
要是你还在载入Voltron时碰见ImportError问题, 请瞅瞅是否遵循了你用的平台的 安装指南.
###LLDB
在较旧的LLDB版本下, voltron init命令只能在载入调试目标后手动执行,因为没有目标Voltron不能开始挂钩。Voltron会自动尝试注册其事件处理代码,如果voltron init是必需的会加以提示。

###WinDbg
关于WinDbg/CDB支持的更多信息请看 这儿.

###其他
作者的主要工作平台是macOS和最新的LLDB。我们会尽最大努力解决其他架构和平台上的问题,但是LLDB/macOS/x64到目前为止是测试最全的。希望Volkan别给你造成麻烦——但这事还是得看人品。

协议
-----------
看看授权文件.
如果你在用Voltron——并且不讨厌——参加会议碰见的时候可以给我买杯啤酒。这个协议同样适用于其他的贡献者——richo的贡献可值好几杯呢。
致谢
感谢我之前的雇主Assurance and Azimuth Security给了我在这个项目上工作的时间。
richo致谢,为了他给Voltron的所有贡献。

fG!的gdbinit脚本是这个项目一开始的灵感。

感谢Willi实现VDB支持.
Voltron现在使用Capstone作为反汇编器,以及调试器主机端内部的反汇编机制。这是一个强大的开源跨平台反汇编器,下一代逆向工程和调试工具将在其基础上诞生。看看吧。

感谢grazfather当下和未来的贡献.


本文下载: Voltron简介翻译.pdf

[课程]Linux pwn 探索篇!

上传的附件:
收藏
免费 3
支持
分享
最新回复 (6)
雪    币: 14
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
安装成功,启动lldb提示如下,win7 64
ImportError: No module named '_curses'
2016-11-19 11:08
0
雪    币: 3907
活跃值: (5817)
能力值: ( LV12,RANK:200 )
在线值:
发帖
回帖
粉丝
3
可以去官方的github下提交issue
2016-11-19 11:27
0
雪    币: 223
活跃值: (35)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
emmmmm,安装之后并不能像作者那样分屏,就很难受
2020-4-14 18:26
0
雪    币: 171
活跃值: (380)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
最后你会发现自己写lldb python脚本, 直接使用lldb是最好的
2020-4-30 08:32
0
雪    币: 0
活跃值: (111)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
voltron view register 输入完提示Usage: voltron <init|debug|update> 怎么办呢
2020-7-9 15:16
0
雪    币: 229
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
7
lldb执行之后 出现Voltron loaded.是表示插件正常工作了么,如果是我这里问题就是什么调试窗口都没有出现。
2020-7-9 17:39
0
游客
登录 | 注册 方可回帖
返回
//