- 献词
- 致谢
- 前言
- 第一部分 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 交叉引用
前言
撰写一本关于 IDA Pro 的书是一个充满挑战的任务。事实上,IDA 是一款非常复杂的软件,它的功能特别强大,要在一本书中详细介绍所有这些功能,几乎是一项无法完成的任务。而且,IDA 一直在不断推出新版本,因此,任何介绍 IDA 的图书在出版时都会落后一两个版本。在本书第 1 版即将出版时,IDA 发布了版本 5.3,但自本书第 1 版出版以来,IDA 已发布了 7 个新版本(包括版本 5.3)。IDA 6.0 采用了一个新的、基于 Qt1 的图形用户界面,这促使我对本书进行更新,以介绍许多第 1 版并未介绍的功能。当然,和往常一样,IDA 的另一个版本(6.1)也即将发布,2 这确实让人非常兴奋。
1.Qt 是诺基亚开发的一个跨平台的 C++ 图形用户界面应用程序框架。——译者注
2.2011 年 4 月发布了 IDA 6.1,2011 年 10 月发布了 IDA 6.2。——编者注
我撰写这一版的目的是帮助更多用户了解 IDA ,并培养他们对逆向工程的兴趣(如果可能)。对于希望进入逆向工程领域的读者,我希望向你们强调掌握熟练的编程技巧的重要性。理想情况下,你们应热爱编程,甚至要时时刻刻都想着编程。如果你对编程感到畏惧,那么逆向工程可能并不适合你。你可能会认为,逆向工程根本不需要编程,因为这只需要分解其他人的程序,但如果无法开发出能帮助你自动完成各种任务的脚本和插件,你永远也不可能成为真正高效的逆向工程人员。对我而言,编程和逆向工程就像是《纽约时报》周日版的纵横字谜游戏,对此我乐在其中。
为保持一致性,这个版本保留了第 1 版的总体结构,并且更为详细地阐述了部分章节,同时增加了一些新内容。阅读本书的方式多种多样。对逆向工程知之甚少的用户可以从第 1 章和第 2 章开始,了解有关逆向工程和反汇编器的一些信息;对 IDA 了解不多、希望深入学习的读者可以从第 3 章开始,这一章主要介绍 IDA 的基本布局;第 4 章则描述如何启动 IDA 并加载文件进行分析;第 5 章到第 7 章介绍 IDA 的用户界面窗口和基本功能。
对 IDA 有一定了解的读者可以从第 8 章开始阅读,这一章讨论如何使用 IDA 处理复杂的数据结构,包括 C++ 类;而第 9 章则介绍 IDA 交叉引用,它是 IDA 基于图形的显示(也在第 9 章介绍)的基础;第 10 章说明如何在非 Windows 平台上(Linux 或 OS X)运行 IDA 。
更加高级的 IDA 用户可能会发现,第 11 章到第 14 章是不错的起点,主要介绍 IDA 的高级用法及其配套工具。第 11 章简要说明 IDA 的一些配置选项;第 12 章描述 IDA 的 FLIRT/FLAIR 技术和相关工具,我们利用它们开发签名,并利用这些签名将库代码与应用程序代码区分开来;第 13 章讨论 IDA 类型库及如何扩展类型库;而第 14 章则回答一些常见的问题,说明 IDA 是否可用于修补二进制文件。
IDA 是一款即装即用的强大工具,可扩展性是它最大的优点之一,这些年来,用户利用这一优点让 IDA 完成了一些非常有趣的任务。IDA 的可扩展性在第 15 章到第 19 章讨论。第 15 章介绍 IDA 的脚本功能(新增了 IDAPython ),并系统讨论 IDA 的 SDK (软件开发工具包)提供的编程 API;第 16 章全面介绍 SDK ;而第 17 章到第 19 章则讨论插件、文件加载器和处理器模块。
介绍完 IDA 的全部功能后,第 20 章至第 23 章转而讨论 IDA 在逆向工程方面更加实际的用法,分析各种编译器的区别(第 20 章),介绍如何使用 IDA 分析恶意软件中常见的模糊代码(第 21 章),以及如何利用 IDA 发现和分析漏洞(第 22 章)。第 23 章则介绍这些年来发布的一些有用的 IDA 扩展(插件)。
最后,第 24 章至第 26 章介绍 IDA 的内置调试器。第 24 章首先介绍调试器的基本功能;第 25 章讨论使用调试器分析模糊代码遇到的一些挑战,其中包括处理可能出现的反调试功能所带来的挑战;第 26 章则讨论 IDA 的远程调试功能,以及使用 Bochs 模拟器作为集成的调试平台,以此结束本书的讨论。
写作本书时,IDA 的最新版本为 6.1,本书在很大程度上以 IDA 6.1 为介绍对象。Hex-Rays 公司非常慷慨,为用户提供了一个免费版本。IDA 免费版是 IDA 5.0 的一个删减了部分功能的版本。本书讨论的大部分 IDA 功能也适用于免费版本,附录 A 简要介绍了用户在使用免费版本时可能遇到的一些不同之处。
首先学习 IDA 脚本功能,然后逐步学习如何创建编译插件,这似乎是一个自然的发展过程。因此,我们在附录 B 中全面介绍了每一个 IDC 函数及其对应的 SDK 操作。有时候,你可以在 IDC 函数与 SDK 函数之间建立起一一对应的关系(尽管这些函数的名称并不相同);而有时候,实现单独一个 IDC 函数可能需要调用几个 SDK 函数。附录 B 回答了这个问题:“我知道如何用 IDC 完成某个任务,但是,如何使用插件完成这个任务呢?”附录 B 中的信息通过逆向工程 IDA 内核获得,根据 IDA 的非传统许可协议,这样做完全合法。
在整本书中,我都尽量使用较短的代码说明问题。绝大多数的示例代码,以及许多用于生成示例的二进制文件,都可以在本书的官方网站上找到,其地址为 http://www.idabook.com/ 。在那里,你还可以找到本书并未包含的一些示例,以及本书所使用的所有参考文献(如脚注中引用的 URL 的最新链接)。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论