- 献词
- 致谢
- 前言
- 第一部分 IDA 简介
- 第 1 章 反汇编简介
- 第 2 章 逆向与反汇编工具
- 第 3 章 IDA Pro 背景知识
- 第二部分 IDA 基本用法
- 第 4 章 IDA 入门
- 第 5 章 IDA 数据显示窗口
- 第 6 章 反汇编导航
- 第 7 章 反汇编操作
- 第 8 章 数据类型与数据结构
- 第 9 章 交叉引用与绘图功能
- 第 10 章 IDA 的多种面孔
- 第三部分 IDA 高级应用
- 第 11 章 定制 IDA
- 第 12 章 使用 FLIRT 签名来识别库
- 第 13 章 扩展 IDA 的知识
- 第 14 章 修补二进制文件及其他 IDA 限制
- 第四部分 扩展 IDA 的功能
- 第 15 章 编写 IDA 脚本
- 第 16 章 IDA 软件开发工具包
- 第 17 章 IDA 插件体系结构
- 第 18 章 二进制文件与 IDA 加载器模块
- 第 19 章 IDA 处理器模块
- 第五部分 实际应用
- 第 20 章 编译器变体
- 第 21 章 模糊代码分析
- 第 22 章 漏洞分析
- 第 23 章 实用 IDA 插件
- 第六部分 IDA 调试器
- 第 24 章 IDA 调试器
- 第 25 章 反汇编器/ 调试器集成
- 第 26 章 其他调试功能
- 附录 A 使用 IDA 免费版本 5.0
- 附录 B IDC/SDK 交叉引用
25.2 IDA 数据库与 IDA 调试器
首先,我们需要了解,当你启动(和终止)一个调试器会话时,调试器如何处理数据库。调试器需要使用一个进程映像。通常,调试器通过依附一个现有的进程,或由可执行文件创建新的进程,从而获得进程映像。IDA 数据库并不包含有效的进程映像,多数情况下,你也不可能由一个数据库重建一个有效的进程映像(如果你可以,使用 File▶Produce File▶Create EXE File 命令即可)。当你在 IDA 中启动一个调试器会话时,反汇编器会告知调试器初始输入文件的名称,调试器再使用这个文件创建并依附于一个新的进程。反汇编器提供给调试器的信息反汇编器格式化、符号名、数据格式化以及任何你输入到数据库中的注释。重要的是,你对数据库进行的任何修补(字节内容的变化)都不会在被调试的进程中反映出来。换言之,即使你对数据库进行了修补,也不能在启动调试器时观察到这些修补产生的效果。
反之也是如此。当你调试完一个进程并返回反汇编模式时,默认情况下,数据库反映出来的仅有的变化全都属于表面上的变化(如重命名变量或函数)。任何内存变化(如自修改代码),都不会在数据库中反映出来,使你能够对其分析。如果你希望将所有新近经过去模糊处理的代码从调试器移回到反汇编数据库中,可以使用 IDA 的 Debugger ▶Take Memory Snapshot(拍摄内存快照)命令来实现。它生成的确认对话框如图 25-1 所示。
图 25-1 内存快照确认对话框
默认选项是将加载器段由正在运行的进程复制到数据库中。 加载器段 (loader segment)是指那些由 IDA 的一个加载器模块加载到数据库中的段。在模糊程序中,一个或几个这样的段可能包含一些已经被模糊处理,因而几乎不可能在反汇编器中分析的数据。这些段恰恰是你想要从正在运行的进程映像中复制的段,用来利用在调试器控制下该进程执行的去模糊工作。
单击 All segments 按钮,则调试器创建的所有段都被复制到数据库中。这些段包括为支持该进程而加载的所有共享库的内容,以及其他进程相关的段,如栈内容和堆内容。
如果调试器被用于依附一个没有相关数据库的现有进程,那么将没有任何调试器段被标记为加载器段,因为该文件并不是由 IDA 的加载器加载的。这时,你可以选择将所有可用的段捕获到一个新的数据库中。此外,你也可以选择编辑段属性,并且将一个或几个段指定为加载器段。要编辑段属性,你首先需要打开 Segments 窗口(View▶Open Subviews▶ Segments)。任何标记为加载器段的段将包含 Program Segmentation 窗口中 L 列中的L 右击一个感兴趣的段,并在出现的菜单中选择 Edit Segment,这时生成的段属性对话框如图 25-2 所示。
图 25-2 具有 Loader segment 复选框的段编辑对话框
选择 Loader segment 复选框会将一个段标记为加载器段,并将它和所有其他加载器段一起复制到数据库中。
当你已从打开的数据库创建了进程,并希望在拍摄内存快照之前添加其他加载器段时,“段属性”对话框也非常有用。例如,如果模糊进程将原始代码提取到位于堆中的内存块(或内存映射的块)中,你会希望在拍摄内存快照前将该内存块标记为加载器段,否则,去模糊代码将不会被复制到数据库中。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论