返回介绍

第 19 章 IDA 处理器模块

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

处理器模块是最后一种可以使用 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 技术交流群。

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

发布评论

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