Home

Awesome

IDAVSCode

在 VSCode 中调试 IDAPython!

参考了idacode

<p align="center"> [中文] [<a href="doc/README-en.md">English</a>] </p>

Features

Requirement

  1. python >= 3.10 # 理论上替换掉 match case 语句应该就可以3.x全兼容
  2. python -m pip install debugpy tornado
  3. Python extension for VSCode

Install

  1. 下载 IDA 插件,并解压到 Plugin 文件夹;
  2. 安装 Vscode 拓展

launch.json

{
    "name": "IDAPython debug",
    "type": "idapython",
    "request": "launch",
    "program": "${file}",
    "host": "localhost",                                // control hostname
                                                        // 和 IDA 端一致
    "port": 5677,                                       // control port
                                                        // 和 IDA 端一致
    "timeout": 3000,                                    // 连接失败超时
    "pythonPath": "${command:python.interpreterPath}",  // python path (IDA used)
                                                        // VSCode 和 IDA 使用同版本的话就不用管这字段了
    "logFile": "",                                      // debug log file
    "debugConfig": {                                    // Python extension debug config
                                                        // 传递给 Vscode Python 拓展的调试配置
        "type": "python",
        "request": "attach",
        "justMyCode": true,
        "connect": {
            // "host": "localhost",                     // optional, default as seam as control host
                                                        // 可选,不填的话默认用上层的"host"
            "port": 5678                                // debug port
        },
        "cwd": "${workspaceFolder}"
    }
}

原理

IDA 端插件启动两个服务,一个控制服务、一个调试服务(debugpy)。

VSCode 端拓展拦截调试任务,将调试上下文信息发送到 IDA 控制服务端,IDA 控制服务负责启动调试服务,并按照上下文运行目标脚本。准备完成后,VSCode 拓展将调试任务替换为 Python Remote Attach 任务。脚本运行结束后,VSCode 拓展主动停止调试。

已知缺陷和待办

该插件诸多的缺陷、不如意大都因为这是一个 IDAPython 插件,它和被调试脚本运行在同一个 Python 实例下,某种意义上说它是自己调试自己。

所以解决以下以及其他潜在缺陷最好的方案是使用 C++ 重构。