- 献词
- 致谢
- 前言
- 第一部分 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 交叉引用
第 9 章 交叉引用与绘图功能
在对二进制文件进行逆向工程时,人们提出的一些常见问题包括:“这个函数是从什么地方调用的”和“哪些函数访问了这个数据”。这些及其他类似的问题其实是对程序中各种资源的引用进行分类。有两个例子可说明这类问题的用处。
假设你已经确定了一个函数的位置,该函数包含一个栈分配的可溢出的缓冲区,你可对此加以利用。由于这个函数可能深深隐藏在一个复杂的应用程序中,因此,下一步你需要确定到底如何访问该函数。除非你能够执行这个函数,否则它就对你毫无用处。我们会提出这样一个问题:哪些函数会调用这个易受攻击的函数呢?而数据是由哪些函数传递给易受攻击的函数的呢。在你回溯潜在的调用链,查找那个有助于你利用缓冲区溢出的函数调用时,你必须继续上述推理过程。
另外,如果一个二进制文件包含大量 ASCII 字符串,你会觉得其中至少有一个字符串值得怀疑,如“Executing Denial of Service attack! ”(拒绝服务攻击)。存在这个字符串表明这个二进制文件确实会拒绝服务攻击吗?不是,它只是表示该二进制文件碰巧包含上述特殊的 ASCII 序列。你可能会据此推断,这条消息可能会在实施攻击之前以某种方式显示出来。但是,你需要查找相关代码,以证实自己的怀疑。那么,“程序从什么地方引用这个字符串呢?”这个问题将有助于你迅速跟踪到利用该字符串的程序位置,进而确定具体的拒绝服务攻击代码。
通过强大的交叉引用功能,IDA 将帮助你回答这些问题。IDA 提供大量显示和访问交叉引用数据的机制,包括图形生成功能,它以更加直观的方式显示代码与数据之间的关系。在本章中,我们将讨论 IDA 提供的各种交叉引用信息和访问交叉引用数据的工具,以及解释这些数据的方法。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论