= IPyIDA
IPyIDA 是一个纯 Python 解决方案,用于为 IDA Pro 添加 IPython 控制台。使用
<Shift-.> 可打开一个嵌入了 Qt 控制台 的窗口。随后你便可以享受 IPython
的自动补全、在线帮助、等宽字体输入框、图表等功能。
你也可以在 IDA 之外使用 ipython console --existing 连接到该内核。
image::ipyida-screenshot.png[IPyIDA screenshot,width=100%]
== 安装
IPyIDA 应当兼容 Windows、OS X 和 Linux 上的 IDA 6.6 及更高版本。它已在最高至 IDA 9.2 的版本上测试通过。
=== 快速简便安装
我们提供了一个脚本,用于从 IDA 控制台全自动安装 IPyIDA 及其依赖项。只需将以下命令行复制到 IDA 控制台即可。
在 macOS 上,Python3.framework 不提供受信任的 CA 文件。你可以使用系统级文件 /etc/ssl/cert.pem。
该脚本将执行以下操作:
pip(如果尚未安装)ipyida 包ipyida_plugin_stub.py 复制到用户的 plugins 目录如果你想确切了解它的作用,可以查看 link:install_from_ida.py[] 脚本。
==== 升级
重新运行安装脚本以更新到最新版本,然后重启 IDA。
=== 按 IDA 的方式安装
如果你更愿意自己管理依赖项和更新,可以将 ipyida_plugin_stub.py 和 ipyida 目录复制到 IDA 的 plugins 目录内。
此方法要求你自行管理依赖项。IPyIDA 需要 ipykernel 和 qtconsole 包;如果使用 ipykernel 5 或更高版本,则还需要 qasync 包。
== Jupyter Notebook 集成
IPyIDA 包含一个魔术命令 %open_notebook,用于打开一个浏览器窗口,其中带有连接到 IPyIDA 的 notebook。该命令会在首次运行时负责安装依赖项,并在没有 Notebook 服务器已在运行的情况下启动一个。输入 %open_notebook? 查看命令帮助,以了解其他选项。
== 自定义 IPython 控制台
默认情况下,控制台中没有任何可用的全局变量。如果你希望在控制台打开之前导入某些模块,IPyIDA 会从 IDA 用户目录(idaapi.get_user_idadir())读取 ipyidarc.py 文件。你在此文件中导入的任何内容都将在 IPython 控制台中可用。
这与 idapythonrc.py 文件类似。
=== 深色模式
在 IDA Pro 使用深色主题时,让 IPython 控制台也采用深色主题会更方便。要激活 qtconsole 内置的深色主题,请在 ipyidarc.py 中添加以下内容:
== IDE 集成
iPyIDA 值得一提的特性之一是与 PyCharm IDE 集成的能力。这可以实现单步调试代码、语法高亮、GitHub CoPilot 集成等功能。要使用此功能,只需启动 IDA 并打开一个数据库,在 PyCharm 中创建一个 Jupyter Notebook,添加一些代码,然后点击运行即可。IPyIDA 会在后台完成所有神奇的工作。
image::pycharm-screenshot.png[IPyIDA screenshot,width=100%]
== 注意事项
=== 如果 IDA 窗口在后台停留过久,外部控制台将无响应
此问题特定于 OS X 10.9 及更高版本中的 App Nap 功能。在运行时为 IDA Pro 禁用 App Nap 似乎可以修复该问题,但这目前只是一个 hack,并且会使笔记本电脑更耗电,我们应该找到一个更好的解决方案。
以下是禁用 IDA Pro 的 App Nap 的方法:
== 类似项目
@james91b 也成功地在 IDA 中集成了 IPython 内核。由于我是非 Windows 平台的 IDA 用户,我需要一个跨平台的解决方案,因此采用了纯 Python 的方法来实现。尽管部分实现思路来自该项目,但 IPyIDA 是从零开始编写的。向 @james91b 和所有 IDA_IPython 贡献者致敬。IDA_IPython 可在 https://github.com/james91b/ida_ipython 上获取。