IPyIDA 简介:逆向工程工具包的 Python 插件

ESET Research 宣布 IPyIDA 2.0,这是一个将 IPython 和 Jupyter Notebook 集成到 IDA 中的 Python 插件

国际开发协会专业版 来自 Hex-Rays 的软件可能是当今最流行的逆向工程软件工具。 对于 ESET 研究人员来说,这个工具是最喜欢的反汇编程序,并激发了 IPyIDA 嵌入一个插件 IPython内核 进入 IDA Pro。 经过 2014 年的持续开发,我们很高兴地宣布发布 2.0 版。 IPyIDA 的用途与另一个名为 IDA IPython,但有一点不同:IDA IPython 仅支持 Windows,而 IPyIDA 支持 macOS、Linux 和 Windows。

如果您已经熟悉 IDA Pro 和 IPython,请跳至 最后一节 IPyIDA 上的这篇文章。 如果您不熟悉 IPython,请跳至 中段. 最后,如果您喜欢 IDA Pro 的简要介绍,请继续阅读。

什么是 IDA Pro?

IDA Pro 是一个反汇编程序,可以将机器代码翻译成汇编代码。 加载文件后,IDA Pro 将其反汇编并将分析存储在数据库文件中。 IDA Pro 提供了进入数据库的各种窗口,每个窗口都可以独特地帮助研究人员找到并更好地理解感兴趣的代码。

让我们通过加载 MathLibrary.dll文件, 可以用微软的 创建 DLL 文件的教程.

>输出窗口

“输出”窗口显示有关文件分析状态的消息、用户请求的操作的错误消息以及某些插件的输出。 图 1 显示了第一次加载后的输出窗口 数学库.dll.

img

图 1. IDA 输出窗口

该窗口的底部是一个接受命令的输入字段。 图 2 显示了自 7.3 版以来 IDA 随附的两个默认命令语言提供程序:IDC 用于使用 IDA 原生的类 C 语言编写的命令,以及 IDAPython插件 对于用 Python 编写的命令。

img

图 2. 在 IDA 中输入 Python 命令的输入字段

>IDA 查看窗口

IDA View 窗口,也称为反汇编窗口,有两种显示格式:图形视图和文本视图。 图形视图通过将函数划分为具有单个入口和单个出口点的块来可视化程序流。 图 3 显示了图表视图。

img

图 3. IDA 反汇编图视图

文本视图提供反汇编的线性视图,显示虚拟地址、汇编代码和注释。 图 4 显示了文本视图。

img

图 4. IDA 反汇编文本视图

除了这些以及 IDA 提供的许多其他窗口之外,IDA 还允许您编写自定义插件来扩展其功能并解决实际的逆向工程问题。 让我们转向 IPython 以及它为在 IDA 中使用 Python 脚本的逆向工程师提供的一些有吸引力的特性。

IPython 概览

虽然 IDAPython 满足了在 IDA 中运行 Python 脚本和命令的基本需求,但 Python 爱好者一直被 IPython的 发热。 IPython 是一个工具包,它提供了与 Python 更具交互性的体验。 IPython 使用由内核和客户端组成的双进程模型。 内核是一个从客户端接收命令、执行命令并返回结果的进程。 客户端可以是任何交互式控制台,例如 Jupyter 控制台, Jupyter Qt 控制台Jupyter笔记本.

这些客户端的交互性来自于它们添加到经典 Python shell 中的大量特性。 图 5 显示了使用多行代码块在 IPython 中定义函数。

img

图 5. 使用多行代码块在 IPython 中定义函数

注意整数、关键字、内置函数和字符串的语法突出显示。

通过按 制表 键,IPython 提供了可以完成代码的相关属性、对象或函数的列表。 图 6 显示了与字符串对象相关的选项卡完成列表函数。

img

图 6. IPython 中的 Tab 完成

如果 绝地 安装。

IPython 还提供魔术函数,这些函数通常用 % or %% 使用命令行样式的语法作为前缀和参数。 图 7 显示了 %时间 魔术函数,它为 Python 表达式的执行计时。

img](https://www.welivesecurity.com/wp-content/uploads/2023/01/Figure-7-IPython-magic-function.png)

图 7. IPython 中的魔法函数

通过使用! 命令行开头的字符,IPython 控制台将命令传递给要运行的底层系统 shell。 例如,一个流行的命令是 点子,它安装和管理来自 Python包索引 (皮皮)。 图 8 显示了 !pip 从 IPython 运行的命令。

[img

图 8. 从 IPython 运行系统 shell 命令

IPython 提供了更多可以在 官方文件.

IPyIDA:将 IPython 引入 IDA

随着IPyIDA 2.0的发布,在IDA中编写Python脚本更加友好,因为有以下优势:

  • 在 Windows、Linux 和 macOS 上支持 IDA
  • 易于设置的安装脚本,即使在 虚拟环境
  • 在 IDA 窗口中运行的 Jupyter Qt 控制台
  • 一个 IPython 内核,可以从 IDA 外部连接到前端,例如 Jupyter 控制台。
  • 一个 Jupyter 内核代理,支持打开一个 Jupyter Notebook,它使用 %open_notebook 魔术功能

图 9 显示了从 IPyIDA 打开 Jupyter Notebook 的过程。

img

图9。 %open_notebook IPyIDA 中的魔法函数

图 10 显示了在 IDA 外部连接到 IDA 中的 IPython 内核的终端会话中运行的 Jupyter 控制台。

img

图 10. IDA 外部的 Jupyter 控制台连接回 IDA 中的 IPython 内核

为 IPyIDA 选择 Jupyter Qt 控制台为传统的 IPython 控制台带来了额外的交互功能,例如内联图形、当前会话的保存和打印以及完整的语法高亮显示。 这些说明在 Jupyter Qt 控制台的官方文档.

IPyIDA 甚至提供受 IDA 启发的自己的交互功能。 图 11 显示在 IPython 控制台中按住 Ctrl 键并单击(在 macOS 上按住 Cmd 键单击)地址或变量名会将视图跳转到反汇编窗口中的虚拟地址。

introducing-ipyida-a-python-plugin-for-your-reversee28091engineering-toolkit-1

图 11. 在 IPyIDA 中按住 Ctrl 并单击变量或地址会跳转到 IDA 反汇编窗口中的地址

图 12 显示了具有非 ASCII 内容的字节数组的十六进制转储。

img

图 12. IPyIDA 显示十六进制转储

如果您是 IDA Pro 的新手,IPyIDA 是熟悉 IDA Pro 的巨大帮助 开发者应用程序接口. 如果您是老手,IPyIDA 会使 Python 脚本编写变得更加容易,因此花在逆向工程上的时间有望更加集中和富有成效。

添加微信交流群, 联系微信:cjh-18888