返回介绍

15.6 IDAPython

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

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 脚本会自动导入 idcidautils 模块。另一方面,如果你需要 idaapi 模块,你必须自己导入该模块。

在使用 IDAPython 时,请记住该插件将一个 Python 解释器实例嵌入到 IDA 中。在关闭 IDA 之前,该解释器将正常运行。因此,你可以查看所有脚本和语句,就好像它们在 Python shell 会话中运行一样。例如,在 IDA 会话中首次导入 idaapi 模块后,在重新启动 IDA 之前,你根本不需要再次导入该模块。同样,已初始化的变量和函数定义将保留它们的值,直到被重新定义,或直到你退出 IDA 。

有大量方法可帮助你学习 IDA 的 Python API 。如果你在使用 IDC 或使用 IDA SDK 编程方面已经具有一些经验,那么你应该相当熟悉 idaapiidc 模块。在这种情况下,在开始充分利用 IDAPython 之前,你只需要简单回顾 idautils 模块的其他功能。如果之前有过使用 IDC 或 SDK 的经验,那么你可以研究 Hex-Ray 有关 Python API 的文档,深入了解它的功能。请记住, idc 模块基本上是 IDC API 的写照,因此,你会发现,IDA 内置帮助文档中的 IDC 函数列表将非常有用。同样,本章前面的 IDC 函数说明也适用于 idc 模块中的对应函数。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

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