返回介绍

24.1 启动调试器

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

调试器通常用于执行以下两种任务:分析与已崩溃进程有关的内存映像(内核转储),以一种完全受控的方式执行进程。调试会话以选择一个接受调试的进程为起点。通常,你可以通过两种方式选择一个进程。第一,大多数调试器能够 依附到 一个正在运行的进程上(假设用户拥有此权限)。根据你所使用的调试器,调试器本身也许能够提供一个可供它自己选择的可用进程列表。如果调试器不具备这样的能力,则用户必须确定想要依附的进程的 ID,然后命令调试器依附到指定的进程上。调试器依附进程的具体方式因操作系统而异,这一内容不在本书的讨论范围之列。依附一个现有的进程时,你不可能监视或控制这个进程的初步启动顺序,因为在你有机会依附进程之前,它的所有启动和初始化代码已经执行完毕。

你使用 IDA 调试器依附进程的方式取决于 IDA 当前是否打开一个数据库。如果没有数据库打开,那么你可以使用 Debugger ▶Attach 菜单,如图 24-1 所示。

enter image description here

图 24-1 依附到任意一个进程

通过这个菜单中的可用选项,可以选择不同的 IDA 调试器(远程调试将在第 26 章讨论)。这个菜单中的选项因运行 IDA 的平台而有所不同。选择本地调试器,IDA 将显示一个正在运行的进程列表,你可以依附这些进程。这个列表的一个例子如图 24-2 所示。

enter image description here

图 24-2 调试器进程选择对话框

选择一个进程后,调试器将捕获该进程的内存快照,以此创建一个临时数据库。除这个正在运行的进程的内存映像外,临时数据库中还包含该进程加载的所有共享库,这使得这个数据库比我们常见的数据库要复杂得多。以这种方式依附于一个进程的缺点在于:在反汇编这个进程时,IDA 没有多少可用的信息。因为 IDA 的加载器绝不会处理对应的可执行文件映像,因而也不会对相关二进制文件进行自动分析。实际上,一旦调试器依附到这个进程,二进制文件中唯一被反汇编的指令只有指令指针当前指向的指令。依附一个进程会立即暂停这个进程,以便你在恢复进程执行之前设置断点。

依附于一个正在运行的进程的另一个方法是在依附之前,在 IDA 中打开相关的可执行文件。有数据库打开时,Debugger 菜单将呈现一种截然不同的形式,如图 24-3 所示。

enter image description here

图 24-3 有数据库打开时的调试器菜单

如果此菜单(或与之非常相似的菜单)并未显示,则你可能尚未为用户当前打开的文件类型指定调试器。这时,Debugger ▶Select Debugger (调试器▶选择调试器)将根据当前的文件类型显示适合的调试器列表。一个典型的调试器选择对话框如图 24-4 所示。

enter image description here

图 24-4 调试器选择对话框

通过选中该对话框底部的复选框,你可以为当前文件类型选择默认调试器。当前的默认调试器(如果有)将在该复选框上方显示。选择调试器后,你随时可以通过 Debug▶Switch Debugger(调试▶切换调试器)菜单更改调试器。

选择 Debugger ▶Attach to Process (调试器▶依附到进程)时,IDA 的行为各有不同,具体取决于在活动数据库中打开的文件的类型。如果打开的文件为可执行文件,IDA 将显示与数据库中打开的文件同名的所有进程的列表。如果 IDA 找不到名称相匹配的进程,IDA 将显示包含每一个正在运行进程的列表,让你自己来选择所要依附到的正确进程。你可以随时依附到任何显示的进程,但 IDA 无法保证启动该进程使用的是加载到打开的 IDA 数据库中的同一个二进制映像。

如果当前打开的数据库为共享库,则 IDA 的行为会有所不同。在 Windows 系统上,IDA 会对显示的进程列表进行过滤,只留下那些加载了对应的.dll 文件的进程。例如,如果你当前正在 IDA 中分析 wininet.dll 文件,那么当你选择 Debugger ▶Attach to Process 时,只会看到那些当前已加载 wininet.dll 的进程。在 Linux 和 OS X 系统中,IDA 不提供这种过滤功能,并且会显示你有权依附到的所有进程。

另外,要依附于一个正在运行的进程,你可以在调试器的控制下启动一个新进程。由于 IDA 没有打开数据库,你可以通过 Debugger ▶Run 来启动一个新进程。如果 IDA 打开了一个数据库,则可以通过 Debugger ▶Start Process 或 Debugger ▶Run to Cursor 启动一个新进程。如果使用前一个命令,新进程将继续执行,直到它遇到一个断点(你需要在选择 Debugger ▶Start Process 之前设置),或者直到你选择使用 Debugger ▶Pause Process 使该进程暂停。使用 Debugger ▶Run to Cursor 将在启动新进程之前,在当前光标位置设置一个断点。这时,新进程将继续执行,直到它到达当前光标位置或者遇到一个较早的断点。如果执行永远无法到达当前光标位置(或任何其他断点),该进程将继续运行,直到你强制暂停或终止(Debugger ▶Terminate Process)该进程。

在调试器的控制下启动一个进程(而不是依附一个现有的进程)是监控该进程执行的每一项操作的唯一方法。在进程启动之前设置断点,你可以严密监控一个进程的整个启动顺序。如果你调试的是一个模糊程序,那么控制启动顺序就显得特别重要,因为你往往希望在去模糊程序完成任务之后,进程开始执行其正常操作之前,立即暂停该进程。

从 IDA 数据库启动进程的另一个好处在于 IDA 会在启动该进程之前,对进程映像进行初步分析。与将调试器依附于现有进程相比,这样做得到的反汇编代码清单的质量将显著提高。

IDA 调试器可以进行本地调试和远程调试。对本地调试而言,你只能调试可在你的平台上运行的二进制文件。对于在其他平台或 CPU 上运行的二进制文件,没有模拟层允许它们在 IDA 的本地调试器中运行。至于远程调试,IDA 自带了许多调试服务器,包括用于 Windows 32/64、Windows CE/ARM、Mac OS X 32/64、Linux 32/64/ARM 和 Android 的服务器。调试服务器旨在与你要调试的二进制文件并行执行。运行远程调试服务器后,IDA 将能够与该服务器通信,在远程计算机上启动目标进程,或依附到该进程。对于 Windows CE ARM 设备,IDA 使用 ActiveSync 与远程设备通信,并远程安装调试服务器。IDA 还能够与 GUN Debugger(gdb)1 的 gdbserver2 组件通信,或与链接到合适的 gdb 远程存根3 的程序通信。最后,对于 Symbian 设备上的远程调试,你必须安装并配置 Metrowerk 的 App TRK4 以便 IDA 通过串行端口与该设备通信。任何时候,IDA 只能作为在 x86、x64、MIPS、ARM 和 PPC 处理器上运行的进程的调试器前端。远程调试将在第 26 章中讨论。

1. 参见 http://www.gnu.org/software/gdb/
2. 参见 http://www.sourceware.org/gdb/current/onlinedocs/gdb/Server.html#Server
3. 参见 http://www.sourceware.org/gdb/current/onlinedocs/gdb/Remote-Stub.html#Remote-Stub
4. 参见 http://www.tools.ext.nokia.com/agents/index.htm

和任何其他调试器一样,如果你想使用 IDA 的调试器启动新进程,需要在调试主机上提供原始的可执行文件,而且,你需要使用运行 IDA 的用户的完全权限执行这个原始的二进制文件。换句话说,只有一个加载要调试二进制文件的 IDA 数据库并不够。使用 IDA 调试器分析恶意软件时,了解这一点尤其重要。如果你无法正确控制恶意软件样本,你用于调试的机器可能很容易受到恶意软件的感染。任何时候,只要你选择 Debugger ▶Start Process(或者在打开数据库时选择 Debugger ▶Attach to Process ),IDA 将显示如下所示的调试器警告消息,向你警告这种可能性。

您即将启动调试器。调试一个程序意味着它的代码将在您的系统上运行。

请小心恶意程序、病毒和木马。

注意:如果你选择 No,调试器将被自动禁用。

您确定想要继续吗?

对于这个警告,如果你选择 No,“调试器”菜单将从 IDA 主窗口中消失。除非你关闭当前打开的数据库,你才能恢复“调试器”菜单。

我们强烈建议你在一个沙盒环境中调试恶意软件。与之相比,我们在第 21 章中讨论的 x86 模拟器插件既不需要原始的二进制文件,也不需要在实施模拟的机器上执行二进制文的任何指令。

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

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

发布评论

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