- 献词
- 致谢
- 前言
- 第一部分 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 交叉引用
第 19 章 IDA 处理器模块
处理器模块是最后一种可以使用 SDK 构建的 IDA 模块,这种模块也是最为复杂的 IDA 模块。处理器模块负责 IDA 中的所有反汇编操作。除了将机器语言操作码转换成对应的汇编语言代码外,处理器模块还负责其他各种任务,如创建函数、生成交叉引用以及跟踪栈指针的行为。通过插件和加载器,Hex-Rays 已经能够使用 IDA 的任何一种脚本语言创建处理器模块(从 IDA 5.7 开始)。
很明显,在对没有处理器模块的二进制文件进行逆向工程时,需要开发处理器模块。另外,这类二进制文件可能包含嵌入式微控制器的固件映像,或者从手持设备中提取出来的可执行映像。在少数情况下,处理器模块还可用于反汇编嵌入到模糊化的可执行文件中的自定义虚拟机的指令。这时,现有的 IDA 处理器模块(如 x86 的 pc
模块)只能帮助你了解虚拟机本身,对于反汇编虚拟机的底层字节码,它无法提供任何帮助。在发表于 OpenRCE.org1 的一篇论文中,Rolf Rolles 说明了处理器模块在这方面的应用。在该论文的附录 B 中,Rolf 还与读者共享了他在创建 IDA 处理器模块方面的经验,这是有关该主题的少数几份文档之一。
1 参见 http://www.openrce.org/articles/full_view/28 网站上的 Defeating HyperUnpackMe2 With an IDA Processor Module 。
在 IDA 模块领域,有无数你可以想到的插件用法。除 IDC 脚本外,插件是 IDA 最为常用的第三方附加件。对自定义加载器模块的需求远比对插件的需求要小。这点并不令人意外,因为二进制文件格式的数量(因此对加载器的需求)要比插件可能的用法数量少得多。自然,除 IDA 专用和随 IDA 发行的模块外,第三方发布的加载器模块相对较少。同样,对处理器模块的需求也较小,因为需要解码的指令集的数量,要比利用这些指令集的文件格式的数量要少。所以,除了 IDA 及其 SDK 发行的少数处理器模块外,几乎完全没有第三方发布的处理器模块存在。根据 Hex-Rays 论坛上发布的帖子的标题判断,很明显,人们正在开发处理器模块,只是这些模块并未向公众发布。
本章将阐明如何创建 IDA 处理器模块,并尽量揭示出 IDA 三种模块中最后一种模块的奥秘(至少在某种程度上)。作为运行示例,我们将开发一个反汇编 Python 字节码的处理器模块。由于处理器模块的组件可能相当大,因此我们不可能提供包含模块每一个部分的完整清单。读者可以在本书的配套网站上找到 Python 处理器模块的完整源代码。注意,如果不使用 Python 加载器模块,你将无法对已编译的.pyc 文件完全自动化地反汇编。缺乏这样的加载器,你需要以二进制模式加载.pyc 文件,选择 Python 处理器模块,识别函数的一个可能的起点,然后使用 Edit Code 将显示的字节转换成 Python 指令。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论