dsh-ghidra:在 DSH 里把 Ghidra 当工具用的桥接插件

前言

在 DeepSeek Harness(DSH)里做逆向或恶意样本分析时,常见做法是:本地开 Ghidra GUI,再把反编译片段、函数列表手工贴回对话。Agent 拿不到统一的「打开二进制 → 分析 → 查 xref → 改注释并落盘」链路,也很难和 GhidraMCP 那套 REST 能力对齐。

dsh-ghidra(维护者 spix18)是 DSH 的 Ghidra 桥接客户端插件:把导入、分析、反编译、读写 Ghidra 项目、复合分析与恶意代码 triage 等能力注册为 DSH 工具,可在任意工作区项目里调用。插件在 npm 上发布为 dsh-ghidra,当前 package 版本为 0.11.4(MIT 许可证);社区目录见 SkillHub 插件页,源码与说明见 GitHub 仓库。

这是什么

一句话:给 DSH(及其中运行的 Agent)一套完整的逆向工作台,底层通过 PyGhidra 拉起 Ghidra headless,并用 JSON-RPC 常驻桥接;默认 单 JVM 统一模式(mcpMode=unified),上游 GhidraMCP REST 与原生 PyGhidra 工具绑定同一已打开程序,避免两套会话状态不一致。

Ghidra 12 的 headless Java 脚本路径受上游已知问题影响(README 引用 NSA/ghidra#9551),本插件因此走 PyGhidra 官方 Python 接口:插件 spawn pyghidra_launcher.py,在本地 127.0.0.1 上与常驻服务器通信;ghidra_open 首次导入并完整分析可能需数分钟(后台任务可流式看进度),之后多数操作毫秒级返回。

核心功能

资料中可核对的能力如下(工具总数 219:48 个原生 + 3 个生命周期相关 + 168 个由上游 GhidraMCP REST schema 生成的 ghidra_mcp_* 工具;另含跨平台 ghidra_doctor)。

读侧与反编译

  • 导入并分析二进制、反编译函数(ghidra_decompile)
  • 列函数、字符串、段、导入/导出(ghidra_functions、ghidra_strings、ghidra_segments、ghidra_imports、ghidra_exports)
  • 交叉引用、反汇编、读内存、变量与 pcode(ghidra_xrefs、ghidra_disassemble、ghidra_read_memory、ghidra_variables、ghidra_pcode)
  • 正则搜字符串/函数、调用关系与 BFS 调用图(ghidra_search_strings、ghidra_search_functions、ghidra_calls、ghidra_call_graph)

写侧并持久化

支持改名、注释、标签、函数原型、局部变量、创建/删除函数等,并通过 ghidra_save 做 flush(优雅停桥 → 落盘 → 再开)。README 强调:headless 仅在脚本正常结束时写回项目,停止桥接须发 {op:'shutdown'} 优雅退出,硬杀会导致未落盘的分析/改动丢失。

分析与自动化

内联/文件运行 Ghidra 脚本、列出/配置分析器、重分析、字节模式搜索、找代码空洞与死代码等(如 ghidra_run_script_inline、ghidra_run_analysis、ghidra_search_byte_patterns)。

复合分析与恶意代码

  • 复合:ghidra_function_context、ghidra_search_instructions、ghidra_hash、ghidra_compare_functions、ghidra_data_flow 等
  • 恶意代码:ghidra_detect_crypto_constants、ghidra_detect_malware_behaviors、ghidra_extract_iocs_with_context、ghidra_find_anti_analysis_techniques 等(具体签名与类别以 README 表格为准)

环境与设置

  • ghidra_doctor:只读自检,不启动 Ghidra;检查平台、Ghidra 安装与版本、headless 启动器、PyGhidra/Python/Java、用户目录、扩展 jar、路径 ASCII、项目目录可写、端口等,失败项带修复提示
  • Settings → Ghidra:状态、Run doctor、Download Ghidra、可选指定已有 Ghidra 安装目录、12 个可热重载配置项(改配置无需重启 DSH)
  • 自包含数据目录:Ghidra 安装、项目缓存、日志等在 <DSH_HOME>\profiles\<profile>\node_modules\dsh-ghidra-home\
  • 按需暴露工具:桥与 REST 未就绪时只 advertise 6 个入口工具,并说明隐藏组原因;ghidra_open / ghidra_mcp_start 可在同一会话拉起其余工具
  • 加载时注册 skills/dsh-ghidra/SKILL.md,便于 Agent 判断何时该用本插件

安装与启用

环境要求(来自 README):Windows / Linux / macOS;Ghidra 12.x;Python 3.13 且已安装 pyghidra;Node ≥ 20;DSH ≥ 0.2。不确定环境时先跑 ghidra_doctor 或在设置页点 Run doctor。

下面三步是 README 给出的标准安装流程(安装命令原文如下,勿自行改写成 github:owner/repo 形式):

# 1. install the plugin into your DSH profile
dsh plugin --profile web add dsh-ghidra

# 2. restart DSH  (browser-half changes need a restart)
# 3. open  Settings → Ghidra  in the sidebar, then press  "Download Ghidra"
#    → fetches the latest Ghidra release into the plugin's own data dir and configures it for you

经过上面的步骤,插件会拉取 Ghidra 到插件自有数据目录并完成配置。若本机已有 Ghidra,可在 Settings → Ghidra → Ghidra install directory (optional) 用 Browse 指向安装目录,跳过下载。

Linux / macOS 上 doctor 会处理 Ghidra 用户目录、headless 启动器与进程工具等;细节见仓库内 LINUX-PORT.md。

典型用法

安装并 Download Ghidra 完成后,在 DSH 里让 Agent 打开样本即可,README 示例:

  • 对 Agent 说:使用 ghidra_open <path-to-binary> 打开二进制并开始工作

常用会话工具还包括:

  • ghidra_status / ghidra_info:查看状态与程序信息
  • ghidra_save:将内存中的改名、注释等改动 flush 到磁盘
  • ghidra_close:关闭当前会话
  • 需要 GhidraMCP REST 面时:ghidra_mcp_start(可带 file 自动导入分析)、ghidra_mcp_stop、ghidra_mcp_status

无 GUI 时可做加载检查(路径随 profile 变化):

node <profile>/node_modules/dsh-ghidra/verify-load.mjs <profile>/node_modules/dsh-ghidra

适用场景与注意

适合谁:在 DSH 里做二进制逆向、漏洞分析、样本 triage,希望 Agent 直接调 Ghidra 而不是反复手工导出;也需要与 GhidraMCP REST 能力对齐、且希望默认单 JVM 统一会话的开发者。

权限与安全:插件以当前 DSH 进程的用户权限运行,会读写本机二进制、Ghidra 项目目录与插件数据目录。安装前应阅读 源码与 LICENSE,仅处理你有权分析的样本。

生态说明:DSH 采用「一切皆插件」;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系,本文介绍的是社区插件本身的能力与安装方式,而非官方应用商店条目。

跨平台:README 标明支持 Windows、Linux、macOS;遇环境问题时优先 ghidra_doctor,避免凭猜测改 JAVA_HOME 或路径。

结尾

dsh-ghidra 把 Ghidra 12 + PyGhidra + GhidraMCP REST 收成 DSH 里的一包工具:自带下载/目录选择/Doctor、219 个逆向相关入口,以及写侧落盘的明确语义。要从零搭环境,按 README 的三步安装并在设置里 Download Ghidra;已有 Ghidra 则指向安装目录即可。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜