4.1 启动IDA

只要启动 IDA ,你都会看到一个初始欢迎界面,上面显示你的许可证信息摘要。初始屏幕消失后,IDA 将显示另一个对话框,为你进入桌面环境提供 3 种选项,如图 4-1 所示。

enter image description here

图4-1 启动 IDA

如果不希望看到欢迎信息,可以取消选中该对话框底部的Display at startup(启动时显示)复选框。如果选中这个复选框,将来启动IDA 时,IDA 会认为你已经单击了 Go按钮,因而直接进入一个空白的 IDA 工作区。如果在某个时候,你希望再次使用欢迎对话框(毕竟,它可以方便地返回最近使用过的文件),你可以编辑IDA 的注册表项,将 DisplayWelcome 的值设为 1 即可。还可以选择 Windows▶Reset hidden message ,这将显示之前隐藏的所有信息。

说明 在Windows 上安装IDA 时,IDA 会创建注册表项 HKEY_CURRENT_USER\Software\ Hex-Rays\IDA1。许多可以在 IDA 中配置(而非编辑某个配置文件)的选项都保存在这个注册表项内。但是,在其他平台中,IDA 将这些值存储在一个无法直接编辑的二进制文件($HOME/.idapro/ida.reg )中。

1. 较低版本的IDA 使用HKEY_CURRENT_USER\Software\Datarescue\IDA

图4-1 所示的3 个选项进入IDA 桌面的方式略有不同,下面简单说明。

  • New (新建)。选择New 将启动一个标准的 File Open对话框来选择将要分析的文件。根据选择的文件,IDA 会显示另外一个或多个对话框,你可以选择特定的文件分析选项,然后再加载、分析和显示该文件。

  • Go(运行)。Go按钮终止加载过程,使 IDA 打开一个空白的工作区。这时,如果要打开一个文件,可以将一个二进制文件直接拖放到 IDA 工作区,或者使用 File 菜单中的某个选项打开该文件。前面介绍过,使用 File▶New 命令可启动 File Open对话框。默认情况下,IDA 会利用已知扩展名的过滤器限制 File 对话框的显示。请确保修改或清除该过滤器(如选择 All Files),以便 File 对话框正确显示你想要打开的文件2。以这种方式打开文件时,IDA 会尝试自动识别选定文件的类型。但是,要特别注意Loading对话框,看 IDA 选择了哪个加载器来处理这个文件。

2. 在非Windows 系统中,可执行文件没有扩展名的情况并不少见。

  • Previous (上一个)。使用Previous 按钮可以打开其下“最近用过的文件”列表中的一个文件。“最近用过的文件”列表中包含IDA 的Windows 注册表项的 History 子项中的值。最初这个历史记录列表的最大长度设为 10 ,但你可以编辑 idagui.cfg或idatui.cfg 文件中的相应项目,将这一限制升高到 100(参见第 11 章)。要想重新处理最近用过的数据库文件,使用这个历史记录列表是最方便的选择。

4.1.1 IDA 文件加载

使用File▶Open命令打开一个新文件时,会看到如图 4-2 所示的加载对话框。IDA 会生成一个可能的文件类型列表,并在对话框顶部显示这个列表。这个列表中将显示最适合处理选定文件的IDA 加载器。IDA 通过执行 loaders 目录中的每一个文件加载器3,来确定能够识别新文件的加载器,从而建立了这个列表。注意,在图 4-2 中,Windows PE加载器(pe.ldw )和 MS-DOS EXE加载器(dos.ldw)均声称它们能够识别选定的文件。对此,熟悉 PE文件格式的读者并不会感到惊奇,因为 PE文件格式是 MS-DOS EXE文件格式的扩展形式。Binary File(二进制文件)是这个列表中的最后一个选项,它会一直显示,因为它是 IDA 加载无法识别的文件的默认选项,它提供了最低级的文件加载方法。如果 IDA 提供几个加载器,这时选择默认选项倒是一个不错的策略,除非你拥有推翻 IDA 决定的信息。

3. 我们将在第18 章详细介绍IDA 加载器。

enter image description here

图4-2 IDA 的Load a new file对话框

有时候,Binary File是出现在加载器列表中的唯一选项。这表示没有加载器能够识别选定的文件。这时,如果你希望继续完成加载过程,请确保根据自己对文件内容的理解,选择合适的处理器类型。

在Processor Type(处理器类型)下拉菜单中可以指定在反汇编过程中使用的处理器模块(在IDA 的procs目录中)。多数情况下,IDA 将根据它从可执行文件的头中读取到的信息,选择合适的处理器。如果 IDA 无法正确确定与所打开的文件关联的处理器类型,在继续文件加载操作前,你必须手动选择一种处理器类型。

如果你同时选择了二进制文件输入格式和一种x86 系列处理器,Loading Segment (加载段)和Loading Offset(加载偏移量)字段将处于活动状态。由于二进制加载器无法提取任何内存布局信息,在这里输入的段和偏移量值将共同构成所加载文件内容的基址。在最初的加载过程中,如果忘记指定基址,可以在任何时候使用Edit▶Segments▶Rebase Program命令来修改 IDA 镜像的基址。

Kernel Options(核心选项)按钮用于配置特定的反汇编分析选项,IDA 可利用这些选项改进递归下降过程。绝大多数情况下,默认选项提供的都是最佳的反汇编选项。另外,IDA 帮助文件提供了其他与可用核心选项有关的信息。

Processor Options(处理器选项)按钮用来选择适用于选中的处理器模块的配置选项,但它不一定对每个处理器模块有效。它只能为反汇编过程提供有限的帮助,因为这些选项非常依赖于用户选定的处理器模块,以及模块创建者的编程能力。

其他选项复选框可帮助用户更好地控制文件加载过程。IDA 的帮助文件详细介绍了这里的每一个选项。这些选项并不适用于所有输入文件类型,多数情况下,用户可以使用 IDA 的默认设置。我们将在第 21 章介绍需要修改这些选项的特殊情况。

4.1.2 使用二进制文件加载器

如果选择使用二进制加载器,需要比平常做更多的工作。由于没有文件头信息引导分析过程,你必须手动执行通常由更加强大的加载器自动完成的任务。需要使用二进制加载器的情形包括:分析从网络数据包或日志文件中提取出来的 ROM镜像和破解程序负载。

如果同时选择 x86 处理器模块和二进制加载器,将会显示如图 4-3 所示的对话框。由于 IDA无法获得可用的文件头信息,用户需要指定是将代码作为 16 位模式代码,还是作为 32 位模式代码处理。IDA 还能够为 ARM和MIPS等处理器区分 16 位与32位模式。

enter image description here

图4-3 x86 模式选择

二进制文件并不包含有关内存布局的信息(也就是说,至少不提供 IDA 能够识别的信息)。前面介绍过,如果选择一个x86 类型的处理器,则必须在加载器对话框的Loading Segment 和Loading Offset 字段中指定基址信息。对于所有其他类型的处理器,IDA 会显示如图 4-4 所示的内存布局对话框。为了方便,可以创建一个 RAM块或一个 ROM块,或者同时创建这两个块,并指定每个块的地址范围。Input File 选项用来指定应加载输入文件的哪一个部分(默认为整个文件),以及文件内容所对应的地址。

enter image description here

图4-4 内存组织对话框

图4-5 显示的是加载二进制文件的最后一个步骤:一个友善的提醒——你需要做一些工作。图中的消息表明一个事实:IDA 没有可用的文件头信息帮助它区分二进制文件中的代码字节和数据字节。这时,IDA 会提醒用户指定文件中的一个地址作为入口点,告诉 IDA 将这个地址的字节转换成代码(C 是用于强制 IDA 将字节作为代码处理的热键)。对于二进制文件,IDA 不会进行任何初始反汇编,除非你至少确定了一个代码字节。

enter image description here

图4-5 二进制文件加载

目录