- 献词
- 致谢
- 前言
- 第一部分 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 交叉引用
15.6 IDAPython
IDAPython 是由 Gergely Erdelyi 开发的一种插件,它在 IDA 中集成了 Python 解释器。除提供 Python 的功能外,使用这个插件还可以编写出能够实现 IDC 脚本语言所有功能的 Python 脚本。IDAPython 的一个显著优势在于,它可以访问 Python 的数据处理功能以及所有 Python 模块。此外,IDAPython 还具有 IDA SDK 的大部分功能,与使用 IDC 相比,使用它可以编写出功能更加强大的脚本。在 IDA 社区中,IDAPython 拥有众多支持者。Ilfak 的博客1 中包括大量使用 Python 脚本解决的有趣问题,同时相关问题、答案和许多其他有用的 IDAPython 脚本也经常发布在 OpenRCE.org 论坛2 中。此外,一些第三方工具(如 Zynamics 的 BinNavi3 )也依靠 IDA 和 IDAPython 执行各种所需的子任务。
1. 参见 http://www.hexblog.com 。
2. 参见 http://www.openrce.org/articles/ 。
3. 参见 http://www.zynamics.com/binnavi.html 。
从 IDA 5.4 以来,Hex-Rays 一直将 IDAPython 作为 IDA 的标准插件。该插件的源代码可从 IDA-Python 的项目页面下载4 ,而 API 文档则位于 Hex-Rays 网站5 上。只有在运行 IDA 的计算机安装了 Python 的情况下,IDA 才会启用该插件。Windows 版本的 IDA 附带并安装有兼容版本的 Python6 ,而 Linux 和 OS X 版本的 IDA 需要你自行安装 Python 。在 Linux 中,当前版本的 IDA(6.1)使用的是 Python 2.6。IDAPython 与 Python 2.7 兼容,如果创建由所需的 Python 2.6 库指向你现有的 Python 2.7 库的符号链接, IDA 将正常运行。如果你拥有 Python 2.7,使用与下面类似的命令可创建 IDA 所需的符号链接:
4. 参见 http://code.google.com/p/idapython/ 。
5. 参见 http://www.hex-rays.com/idapro/idapython_docs/index.html 。
6. 参见 http://www.python.org/ 。
# ln –s /usr/lib/libpython2.7.so.1.0 /usr/lib/libpython2.6.so.1
OS X 用户可能会发现,OS X 附带的 Python 版本要低于 IDA 所需的版本。如果出现这种情况,则需要从 www.python.org 下载适当的 Python 安装程序7 。
7. 参见 http://www.python.org/download/mac/ 。
使用 IDAPython
IDAPython 通过 3 个 Python 模块(每个模块服务于特定的用途)将 Python 代码注入到 IDA 中。 idaapi
模块负责访问核心 IDA API(如通过 SDK 揭示的那样)。IDAPython 的 idc
模块负责提供 IDC 中的所有函数功能。IDAPython 附带的第三个模块为 idautils
,它提供大量实用函数,其中许多函数可生成各种数据库相关对象(如函数或交叉引用)的 Python 列表。所有 IDAPython 脚本会自动导入 idc
和 idautils
模块。另一方面,如果你需要 idaapi
模块,你必须自己导入该模块。
在使用 IDAPython 时,请记住该插件将一个 Python 解释器实例嵌入到 IDA 中。在关闭 IDA 之前,该解释器将正常运行。因此,你可以查看所有脚本和语句,就好像它们在 Python shell 会话中运行一样。例如,在 IDA 会话中首次导入 idaapi
模块后,在重新启动 IDA 之前,你根本不需要再次导入该模块。同样,已初始化的变量和函数定义将保留它们的值,直到被重新定义,或直到你退出 IDA 。
有大量方法可帮助你学习 IDA 的 Python API 。如果你在使用 IDC 或使用 IDA SDK 编程方面已经具有一些经验,那么你应该相当熟悉 idaapi
与 idc
模块。在这种情况下,在开始充分利用 IDAPython 之前,你只需要简单回顾 idautils
模块的其他功能。如果之前有过使用 IDC 或 SDK 的经验,那么你可以研究 Hex-Ray 有关 Python API 的文档,深入了解它的功能。请记住, idc
模块基本上是 IDC API 的写照,因此,你会发现,IDA 内置帮助文档中的 IDC 函数列表将非常有用。同样,本章前面的 IDC 函数说明也适用于 idc
模块中的对应函数。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论