- 献词
- 致谢
- 前言
- 第一部分 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 交叉引用
4.1 启动 IDA
只要启动 IDA ,你都会看到一个初始欢迎界面,上面显示你的许可证信息摘要。初始屏幕消失后,IDA 将显示另一个对话框,为你进入桌面环境提供 3 种选项,如图 4-1 所示。
图 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\IDA
1 。许多可以在 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 加载器。
图 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 位模式。
图 4-3 x86 模式选择
二进制文件并不包含有关内存布局的信息(也就是说,至少不提供 IDA 能够识别的信息)。前面介绍过,如果选择一个 x86 类型的处理器,则必须在加载器对话框的 Loading Segment 和 Loading Offset 字段中指定基址信息。对于所有其他类型的处理器,IDA 会显示如图 4-4 所示的内存布局对话框。为了方便,可以创建一个 RAM 块或一个 ROM 块,或者同时创建这两个块,并指定每个块的地址范围。Input File 选项用来指定应加载输入文件的哪一个部分(默认为整个文件),以及文件内容所对应的地址。
图 4-4 内存组织对话框
图 4-5 显示的是加载二进制文件的最后一个步骤:一个友善的提醒——你需要做一些工作。图中的消息表明一个事实:IDA 没有可用的文件头信息帮助它区分二进制文件中的代码字节和数据字节。这时,IDA 会提醒用户指定文件中的一个地址作为入口点,告诉 IDA 将这个地址的字节转换成代码(C 是用于强制 IDA 将字节作为代码处理的热键)。对于二进制文件,IDA 不会进行任何初始反汇编,除非你至少确定了一个代码字节。
图 4-5 二进制文件加载
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论