返回介绍

25.2 IDA 数据库与 IDA 调试器

发布于 2024-10-11 21:05:51 字数 1783 浏览 0 评论 0 收藏 0

首先,我们需要了解,当你启动(和终止)一个调试器会话时,调试器如何处理数据库。调试器需要使用一个进程映像。通常,调试器通过依附一个现有的进程,或由可执行文件创建新的进程,从而获得进程映像。IDA 数据库并不包含有效的进程映像,多数情况下,你也不可能由一个数据库重建一个有效的进程映像(如果你可以,使用 File▶Produce File▶Create EXE File 命令即可)。当你在 IDA 中启动一个调试器会话时,反汇编器会告知调试器初始输入文件的名称,调试器再使用这个文件创建并依附于一个新的进程。反汇编器提供给调试器的信息反汇编器格式化、符号名、数据格式化以及任何你输入到数据库中的注释。重要的是,你对数据库进行的任何修补(字节内容的变化)都不会在被调试的进程中反映出来。换言之,即使你对数据库进行了修补,也不能在启动调试器时观察到这些修补产生的效果。

反之也是如此。当你调试完一个进程并返回反汇编模式时,默认情况下,数据库反映出来的仅有的变化全都属于表面上的变化(如重命名变量或函数)。任何内存变化(如自修改代码),都不会在数据库中反映出来,使你能够对其分析。如果你希望将所有新近经过去模糊处理的代码从调试器移回到反汇编数据库中,可以使用 IDA 的 Debugger ▶Take Memory Snapshot(拍摄内存快照)命令来实现。它生成的确认对话框如图 25-1 所示。

enter image description here

图 25-1 内存快照确认对话框

默认选项是将加载器段由正在运行的进程复制到数据库中。 加载器段 (loader segment)是指那些由 IDA 的一个加载器模块加载到数据库中的段。在模糊程序中,一个或几个这样的段可能包含一些已经被模糊处理,因而几乎不可能在反汇编器中分析的数据。这些段恰恰是你想要从正在运行的进程映像中复制的段,用来利用在调试器控制下该进程执行的去模糊工作。

单击 All segments 按钮,则调试器创建的所有段都被复制到数据库中。这些段包括为支持该进程而加载的所有共享库的内容,以及其他进程相关的段,如栈内容和堆内容。

如果调试器被用于依附一个没有相关数据库的现有进程,那么将没有任何调试器段被标记为加载器段,因为该文件并不是由 IDA 的加载器加载的。这时,你可以选择将所有可用的段捕获到一个新的数据库中。此外,你也可以选择编辑段属性,并且将一个或几个段指定为加载器段。要编辑段属性,你首先需要打开 Segments 窗口(View▶Open Subviews▶ Segments)。任何标记为加载器段的段将包含 Program Segmentation 窗口中 L 列中的L 右击一个感兴趣的段,并在出现的菜单中选择 Edit Segment,这时生成的段属性对话框如图 25-2 所示。

enter image description here

图 25-2 具有 Loader segment 复选框的段编辑对话框

选择 Loader segment 复选框会将一个段标记为加载器段,并将它和所有其他加载器段一起复制到数据库中。

当你已从打开的数据库创建了进程,并希望在拍摄内存快照之前添加其他加载器段时,“段属性”对话框也非常有用。例如,如果模糊进程将原始代码提取到位于堆中的内存块(或内存映射的块)中,你会希望在拍摄内存快照前将该内存块标记为加载器段,否则,去模糊代码将不会被复制到数据库中。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文