IDACode
IDACode 可以让您在 IDA 环境中轻松执行和调试 Python 脚本,而无需离开 Visual Studio Code。VS Code 扩展可以在市场上找到。
IDACode 仍处于非常早期的状态,预计会有错误。如果遇到任何问题,请打开一个新问题。
特征
- 速度:快速创建和执行脚本。
- 调试:随时附加 Python 调试器。
- 兼容性:IDACode 不要求您以特定方式修改脚本。所有脚本都可以在 IDA 内执行而无需更改。
- 模块化:IDACode 没有大量使用安全包装器进行线程同步,这允许您在任何给定时间从任何路径导入任何模块。相反,IDACode 将脚本执行线程与 IDA 主线程同步,以避免性能和意外问题。
- 同步:当 IDACodedebugpy用于通信时,它自然地将输出窗口与 VS Code 的输出面板同步。
IDACode 支持 Python 2 和 Python 3!
设置
要设置 IDA 插件的依赖项,请运行:
- 确保使用正确的 Python 版本
- IDACode 支持最新的 debugpy 版本 3.0.0,确保升级!
克隆此存储库或从此处下载发布包。ida.zip反映ida此存储库中文件夹的内容。将所有文件复制到 IDA 插件目录。python -m pip install --user debugpy tornado
下一步是配置您的设置以匹配您的环境。相应地编辑idacode_utils/settings.py:
- HOST: 这是主机地址。127.0.0.1除非您希望可以从远程位置访问它,否则总是如此。请记住,此插件不使用身份验证。
- PORT: 这是你希望 IDA 监听的端口。这用于 IDA 和 VS Code 之间的 websocket 通信。
- DEBUG_PORT:这是您要侦听传入调试会话的端口。
- PYTHON:这是您的 IDA 设置使用的 Python 发行版的绝对路径。
- LOGGING:确定调试器是否应该登录文件。这在您遇到 IDACode 问题时特别有用。如果您发现任何问题,请提交一个新问题。这些文件始终位于您的临时目录中(例如 Windows: %TEMP%)。这些文件称为debugpy.*.log.
您现在可以通过单击插件菜单中的IDACode
来启动插件。
VS Code 扩展在市场上可用。要配置扩展,请参阅扩展的自述文件。
用法
IDA
点击IDACode
插件菜单。您应该看到以下文本:
IDACode listening on 127.0.0.1:7065
VS Code
从 0.2.0 版开始,IDACode 支持默认启用的“保存时执行”。VS Code 将在您保存当前文档后立即在 IDA 中自动执行您的脚本(例如使用 CTRL+S)。可以在设置中禁用此行为。
您可以使用 4 个命令:
一旦你打开了一个文件夹,你想把你的脚本放进去,你就可以连接到 IDA 了。
您可以通过执行 Connect to IDA
或Connect and attach a debugger to IDA
来实现。
请记住,在您重新启动 IDA 之前,调试会话是永久性的。 调试器启动后,您将无法更改工作区文件夹。
确保工作区文件夹是您的主要脚本所在的文件夹。
连接后,您可以在Execute script in IDA
。
调试
IDACode 使用 VS Code 的远程调试器连接到 IDA。支持所有 VS Code 功能。但是,您必须使用 Python 内置功能指定脚本入口点:breakpoint
。该指令告诉调试器暂停执行,如果没有调试器,它将忽略该函数。
IDACode 导入一个名为的帮助程序包dbg
,它实现了breakpoint
被调用的重载bp
。此函数支持日志记录和条件:
name = idc.get_segm_name(segment)
dbg.bp(name==".text", f"found {name} at {segment}")
另请注意:
- breakpoint()调用永远不应发生在文件末尾,它必须始终位于任何其他代码行之前,因为它会在代码中的下一条指令中断。
- 如果您决定使用该dbg包,则必须删除所有引用或将变量idacode用作条件变量,然后再将其作为普通 IDA 脚本执行。
附加调试器将创建一个新的调试器实例也很重要。在大多数情况下,这不是您想要的。如果您断开与调试器的连接,请使用 VS Code 的远程调试器重新连接。