# 2 调试器设计
调试器就是黑客的眼睛。你能够使用它对程序进行动态跟 踪和分析。特别是当涉及到 exploit ,fuzzer 和病毒分析的时候, 动态分析的能力决定你的技术水平。对于调试器的使用大家都再熟悉不过 了,但是对调试器的实现原理,估计就不是那么熟悉了。当我们对软件缺陷进行评估的时候,
调试器提供了非常多的便利和优点。比如运行,暂停,步进,一个进程;设置断点;操作寄存器和内存;捕捉内部异常,这些底层操作的细节,正是我这章要详细探讨的。
在深入学习之前,先让我们先了解下白盒调试和黑盒调试的不同。许多的开发平台都会 包含一个自带的调试器,允许开发工具结合源代码对程序进行精确的跟踪测试。这就是白盒 调试。当我们很难得到源代码的时候,开发者,逆向工程师, Hacker 就会应用黑盒调试跟 踪目标程序。黑盒调试中,被测试的软件对黑客来说是不透明的,唯一能看到的就是反汇编 代码。这时候要分析出程序的运作流程,找出程序的错误将变得更复杂,花费的时间也会更 多。但是高超的逆向技术集合优秀的逆向工具将使这个过程变得简单,轻松,有时候善于此 道的黑客,甚至比开发者更了解软件:)。
黑盒测试分成两种不同的模式:用户模式 和 内核模式。用户模式(通常指的是 ring3 级的程序)是你平时运行用户程序的一般模式(普通的程序)。用户模式的权限是最低的。 当你运行“运算器(cacl.exe)”的时候,就会产生一个用户级别的进程;对这个进程的调试 就是用户模式调试。核心模式的权限是最高的。这里运行着操作系统内核,驱动程序,底层 组件。当运行 Wireshark 嗅探数据包的时候,就是和一个工作在内核的网络驱动交互。如果 你想暂停驱动或者检测驱动状态,就需要使用支持内核模式的调试器了。
下面的这些用户模式的调试器大家应该再熟悉不过了:WinDbg(微软生产),OllyDbg(一个免费的调试器 作者是 Oleh Yuschuk)。当你在 Linux 下调试程序的时候,就需要使用 标准的 GNU 调试器(gdb)。以上的三个调试器相当的强大,都有各自的特色和优点。
最近几年,调试器的智能调试技术也取得了长足的发展,特别是在 Windows 平台。 智能调试体现在强大可扩展性上,常常通过脚本或者别的方式对调试器进行进一步的开发利 用,比如安装钩子函数,以及其他的专门为 Hacker 和逆向工程师专门定制的各种功能。在 这 方 面 出 现 了 两 个 新 的 具 有 代 表 性 的 作 品 分 别 是 PyDbg (byPedram Amini) 和 Immunity Debugger (from Immunity, Inc.)。
PyDbg 是一个纯 Python 实现的调试器,让黑客能够用 Python 语言全面的控制一个进程, 实现自动化调试。Immunity 调试器则是一个会让你眼前一亮的调试器,界面相当的友好, 类似 OllyDbg,但是拥有更强大的功能以及更多的 Python 调试库。这两个调试器在本书的 后面章节将会详细的介绍。现在先让我们深入了解调试器的一般原理。
在这章,我们将把注意力集中在 x86 平台下的用户模式,通过对 CPU 体系结构,(堆) 栈以及调试器的底层操作细节的深入探究,理解调试器的工作原理,为实现我们自己的调试 器打下基础。
- 序
- 1 搭建开发环境
- 1.1 操作系统准备
- 1.2 获取和安装 Python2.5
- 1.3 配置 Eclipse 和 PyDev
- 2 调试器设计
- 2.1 通用 CPU 寄存器
- 2.2 栈
- 2.3 调试事件
- 2.4 断点
- 3 自己动手写一个 windows 调试器
- 3.2 获得 CPU 寄存器状态
- 3.3 实现调试事件处理
- 3.4 全能的断点
- 4 PyDBG---纯 PYTHON 调试器
- 4.1 扩展断点处理
- 4.2 处理访问违例
- 4.3 进程快照
- 5 IMMUNITY----最好的调试器
- 5.1 安装 Immunity 调试器
- 5.2 Immunity Debugger 101
- 5.3 Exploit 开发
- 5.4 搞定反调试机制
- 6 HOOKING
- 6.1 用 PyDbg 实现 Soft Hooking
- 6.2 Hard Hooking
- 7 Dll 和代码注入
- 7.1 创建远线程
- 7.2 邪恶的代码
- 8 FUZZING
- 8.1 Bug 的分类
- 8.2 File Fuzzer
- 8.3 改进你的 Fuzzer
- 9 SULLEY
- 9.1 安装 Sulley
- 9.2 Sulley primitives
- 9.3 猎杀 WarFTPD
- 10 Fuzzing Windows 驱动
- 10.1 驱动通信
- 10.2 用 Immunity fuzzing 驱动
- 10.4 构建 Driver Fuzzer
- 11 IDAPYTHON --- IDA 脚本
- 11.1 安装 IDAPython
- 11.2 IDAPython 函数
- 11.3 脚本例子
- 12 PyEmu
- 12.1 安装 PyEmu
- 12.2 PyEmu 一览
- 12.3 IDAPyEmu