- 献词
- 致谢
- 前言
- 第一部分 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 交叉引用
18.1 未知文件分析
有无数的文件格式可用于存储可执行代码。IDA 自带了一些加载器模块,可识别许多常见的文件格式,但是,文件格式日益增多,IDA 无法为它们都提供加载器模块。二进制映像可能包含为特定的操作系统而格式化的可执行文件、提取自嵌入式系统的 ROM 映像、提取自闪存更新的固件映像或是提取自网络数据包的机器语言源代码块。这些映像的格式可能取决于操作系统(可执行文件)、目标处理器和系统体系结构(ROM 映像),也可能与任何事物都无关(嵌入在应用层数据中的破解程序 shellcode )。
假设处理器模块能够反汇编未知的二进制文件的代码,那么在告诉 IDA 这个二进制文件的哪些部分代表代码,哪些部分代表数据之前,你需要正确安排文件映像在 IDA 数据库中的位置。对多数处理器而言,使用二进制格式加载一个文件,你将只得到一个文件内容,这些内容构成一个以地址 0 开头的段,如代码清单 18-1 所示。
代码清单 18-1 以二进制模式加载的 PE 文件的前几行
seg000:00000000 db 4Dh ; M seg000:00000001 db 5Ah ; Z seg000:00000002 db 90h ; É seg000:00000003 db 0 seg000:00000004 db 3 seg000:00000005 db 0 seg000:00000006 db 0 seg000:00000007 db 0
有时候,根据所选处理器模块的复杂程度,IDA 可能会进行少量反汇编。例如,如果所选的处理器是一个嵌入式微处理器,能够对 ROM 映像的布局做出假设,这时就会出现上述情况。Andy Whittaker 为那些对这类应用程序感兴趣的读者创建了一个完美的视频教程1 ,说明如何逆向工程 Siemens C166 微处理器应用程序的二进制映像。
1. 参见 http://www.andywhittaker.com/ECU/DisassemblingaBoschME755/tabid/96/Default.aspx 。
分析二进制文件时,你肯定需要尽可能多地收集与该文件有关的资源。这些资源包括 CPU 参考文献、操作系统参考文献、系统设计文档,以及通过调试或硬件辅助(如逻辑分析器)分析获得的内存布局信息。
在下一节中,为了举例方便,我们假设 IDA 无法识别 Windows PE 文件格式。PE 是一种众所周知的文件格式,许多读者都熟悉它。更重要的是,有大量详细介绍 PE 文件结构的文档可供我们使用,这使得分析任何 PE 文件都会比较简单。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论