spix18/dsh-ghidra ↗★ 0

dsh-ghidra

提供 218 个逆向工程工具的 Ghidra 桥接插件 适合需要进行二进制导入、反编译和逆向分析的安全研究人员。

包名
dsh-ghidra
兼容性
待验证
版本
0.10.1
许可证
MIT
最近更新
2026年10月5日

安装

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:spix18/dsh-ghidra

配置(可选 · 可热改)

11 个字段全部 volatile:在 DSH 的 插件管理页(侧边栏「插件」→ Ghidra 桥)的卡片表单里 直接改,保存后立即生效,无需重启 DSH(写侧 reload Loader entry 重跑 apply)。也可以走 cordis patch:

- id: ghidra-bridge
  name: dsh-ghidra
  config:
    ghidraHome: ''          # 留空即用插件数据根里的安装(node_modules\dsh-ghidra-home\ghidra),外部安装仅作回退
    ghidraProjectDir: ''    # 项目缓存目录(缺省 %TEMP%\dsh-ghidra-projects;**不能**放 .dsh 下——Ghidra 拒绝点元素路径)
    projectName: dsh
    pythonVer: '3.13'
    analysisTimeoutSec: 600
    serverStartupTimeoutMs: 180000
    maxOutputChars: 100000
    stream: true            # ghidra_open 默认后台流式
    mcpPort: 8123           # 上游 GhidraMCP headless 服务器端口
    mcpStartupTimeoutSec: 180
    mcpTimeoutSec: 900

Settings 分区(状态 + 配置 + 健康检查 + 下载)

双面插件:浏览器半(client.js,plain JS + React,无打包)注册 settings.section slot (与 dsh-mobilecode 等插件同位),渲染进 设置 → Ghidra 顶级分区:

  • 状态区:PyGhidra 桥与 GhidraMCP 服务器的运行态(端口 / 程序 / pid)、工具计数 (原生 + lifecycle + 生成)、Ghidra 主目录与版本;「刷新」「停止 MCP 服务器」 (优雅停止,先保存已加载程序再退出)「Download Ghidra」按钮。数据来自节点半注册的 GET /api/dsh-ghidra/status(回环-only,headless profile 无 webServer 时显示"配置表单不可用")。
  • 健康检查(Doctor):「Run doctor」按钮 → GET /api/dsh-ghidra/doctor, 逐项检查 Ghidra 主目录 / PyGhidra launcher 脚本 / ghidraMCPHeadless.bat / Python(py -3.13 --version)/ 双服务器运行态 / Ghidra 版本,每项 OK/FAIL + 详情; 前置 4 项全过才 overall 通过,运行态为参考项。
  • 下载安装:「Download Ghidra」→ POST /api/dsh-ghidra/install-ghidra(后台): GitHub 最新 release(ghidra_*_PUBLIC_*.zip)流式下载(进度 % + MB)→ PowerShell Expand-Archive 解压到当前主目录旁 → 校验 support/ghidraMCPHeadless.bat → 自动把 ghidraHome 切到新目录(走迁移流程删旧目录)。进度在 /status 的 install 字段。
  • 配置区:12 字段表单(staged edits → 保存逐条写 + 读回 Host 验收;已覆盖字段带徽标 + 单字段「重置」恢复默认;实时校验)。走 ctx.configForms.get('ghidra-bridge') 的 FormScope。 路径字段带「Browse…」按钮:打开插件自己的文件夹浏览器(模态:驱动器列表 → 逐层进入 → 「Use this folder」写回 draft,另有「Create folder」就地建目录)。选择器由本 UI 渲染,不弹原生 对话框 —— 宿主进程弹的 PowerShell/WinForms 对话框在无交互 window station 的环境里不可见 (表现为「点了没反应」且请求一直挂着),所以宿主只提供两个确定性接口: POST /api/dsh-ghidra/list-dir(只读列目录;空路径回驱动器列表;回 dotSegment 供前端预警)与 POST /api/dsh-ghidra/mkdir(建目录;拒绝分隔符与点开头的名字)。 ghidraHome 变更保存时自动迁移:POST /api/dsh-ghidra/migrate-home(后台)—— 停双服务器 → 旧 home 复制到新目录 → 校验结构(launcher + bat)→ 删除旧 home; 校验不过则保留旧 home 不删。目标已存在且是完整 Ghidra home(含 bat)时按版本切换处理 (不复制,只删旧);目标是非空且非 Ghidra 目录时拒绝。

需要 DSH 重启一次让浏览器半加载(client.js 由 /plugins/dsh-ghidra/client.js serve); 此后节点半的配置改动即时生效,浏览器半刷新即可看到。