dsh-rea: Lazy Mounting of the REA Reverse Engineering Tool Table in DeepSeek Harness

前言

在 DeepSeek Harness(DSH)里做逆向相关任务时,常见做法是单独起一个 MCP 服务、再在宿主里手工对接工具名和 schema。REA(morluto/rea,npm 包 rea-agents)本身已经提供完整的逆向 MCP 工具面,但把 207 个工具的 input schema 全部塞进每轮请求的 Agent 工具表,常驻体积大约 194 KB(资料中约合 4.9 万 token),很容易挤占上下文。下面介绍社区插件 dsh-rea(维护者 xiaobaga281,分类:工作流):它把 REA 的工具表注册进 DSH,并用宿主原生的延迟加载把常驻开销压到约 1.4 KB,同时附带运行时解包、环境侧栏和若干治理类辅助工具。

这是什么

dsh-rea 是 REA 的 DSH 插件(当前版本 1.3.1,MIT 许可,需 Node.js ≥ 18)。插件不重新发明逆向能力,而是桥接 rea mcp 子进程:工具在 Agent 侧公开名为 mcp__rea__<tool>,输入 schema 与 REA 一致;REA 增删工具时会自动重新同步。插件目录页:SkillHub · xiaobaga281/dsh-rea;源码与说明:GitHub · xiaobaga281/dsh-rea。

核心功能

207 个 REA 工具与延迟加载

插件注册 REA MCP 服务器的完整工具表。默认配置下,207 个工具的 schema 标记为 deferLoading,不进入请求体;模型真正调用某个工具时才加载对应 schema。资料中的对比:deferCatalog: true(默认)常驻约 1.4 KB(341 token);若设为 false 则恢复全量广告,约 194 KB(48 560 token)。工具数量不变,仍可按名调用。

插件刻意不把 207 个入口合并成单一 rea_run(tool, input):REA 按「一工具一职责 + 严格输入契约」设计,合并会改变模型从 schema 读取参数结构的方式;延迟加载走的是 DSH 到 DeepSeek defer_loading 的原生链路,而不是插件侧 hack。

检索与状态类辅助工具

因 schema 延迟加载,模型无法直接从工具表浏览全部 REA 工具,插件提供常驻索引:

  • rea_catalog:几百字节的常驻工具;无参调用列出全部 207 个精确工具名(约 6.9 KB);带关键词时在名字/描述中搜索,输出里每一行已是可直接调用的 mcp__rea__* 全名。
  • rea_doctor:运行 REA 的 mcp doctor --json,报告 MCP 子进程能否启动、服务端状态与可用分析引擎;只读,不打开分析目标。
  • rea_status:一次调用说明是否已打开目标、绑定的 provider、哪些引擎就绪、因此当前能做什么;207 个工具中有 55 个依赖「当前文档」,无目标时在 headless 下容易空转,先看状态比直接撞工具便宜。

技能与运行时

  • 技能:将 REA 自带的 reverse-engineer-anything 技能及 references/ 安装到 ~/.dsh/skills/reverse-engineer-anything/,按 REA 版本打戳,版本未变则不重复拷贝。
  • 运行时:rea-agents 6.7.0 与完整依赖闭包(136 个包)打包为 vendor/rea-runtime.tgz(28 MB,带 SHA-256)。首次启用时原子解包到 ~/.dsh/rea-runtime/,之后 MCP 用宿主 Node 以绝对路径运行,调用时不经 npm/npx、不需要网络。解包失败会保留上一版运行时,避免出现「半解包、207 工具全挂」的状态。资料中 1.0.3 全量回归:缺依赖包为 0;冷启动握手约 13 s,之后约 2.4 s(1.1.0 复测)。

环境侧栏与本机引擎

插件本体约 28 MB,不捆绑 Ghidra。侧栏展示 Java/JDK、Ghidra、JADX、Apktool、WABT、Kuna/Rizin 等实际状态,可保存绝对路径,并对 Ghidra/JADX/Apktool/WABT 提供按需准备与进度。资料中的固定版本与方式摘要:

引擎 版本 准备方式
Ghidra 12.1.4 侧栏一键下载(约 543 MiB),校验后解包到 ~/.dsh/rea-engines/ghidra/
JADX 0.7.1(headless MCP jar) 侧栏一键下载
Apktool 3.0.3 侧栏下载 jar 并生成启动器
WABT 1.0.42 仅 Windows x64 有固定版本;其他平台需手填路径
Kuna/Rizin 用户提供 只接受绝对路径
IDA / Hopper / JEB 商业授权 只接受路径

Java 探测会枚举常见安装位置;只有带 javac 的完整 JDK 才算就绪(Ghidra 不能在 JRE 上跑)。

大结果落盘、静态初筛与证据导出

  • 结果落盘:单次结果超过 maxResultChars(默认 24 000 字符)时写入 ~/.dsh/rea-artifacts/<会话>/,返回摘要与路径,可用 rea_read_artifact 分页读取。
  • rea_triage(path):纯本地、不执行样本;熵、PE/ELF/Mach-O 异常、壳/混淆签名、字符串与 XOR 探测、可选 YARA 等,输出带证据的判定与下一步建议(读取上限由 triageMaxBytes 控制,默认 64 MB)。
  • rea_export_report:将 Evidence bundle 转为 Markdown 与 SARIF 2.1.0。
  • 产物治理:默认保留 7 天并有容量上限;sensitiveArtifacts 开启时超大结果只回摘要、不落盘;rea_purge_artifacts 可手动清理。

安全与审计(1.3.0 起)

变更留痕采用 fail-closed:207 个工具中 41 个默认审计、162 个只读;会删改设备的 4 类操作默认关闭,需配置 allowDeviceMutations: true。反编译/重建类结果强制标注「推断,非源码」;写操作结果标注「已审计」。子进程不继承宿主完整环境变量,工作目录固定为 ~/.dsh/rea-workspace;侧栏改路径、触发下载等 POST 路由有同源与 JSON 等约束(详见 README「安全边界」)。

版本更新

侧栏可检查 GitHub 最新 Release 并一键安装;下载走多层镜像,失败自动切换,按 Release 公布的 SHA-256 校验;可用 pinnedSha256 钉死摘要。代理读取 HTTPS_PROXY / HTTP_PROXY(含 NO_PROXY)。

安装与启用

DSH 生态里插件通常通过社区目录或对话安装,而非固定的一条 git clone。SkillHub 目录页提供「发送给 DeepSeek Harness 安装」说明,核心意图是让 Harness 安装插件 xiaobaga281/dsh-rea(页面文案以目录站当时展示为准,安装前请在 目录页 复制完整提示,勿自行拼接未在文档出现的 CLI)。

启用后插件默认 enabled: true;首次使用会解包 REA 运行时到 ~/.dsh/rea-runtime/。配置写在 cordis.patch.yml 的 config 段,常用项包括:

deferCatalog: true          # 默认延迟 207 个 REA 工具 schema
maxResultChars: 24000     # 超限结果落盘
allowDeviceMutations: false
allowedTargets: []        # 非空时会话内绝对路径必须落在这些根下
artifactRetentionDays: 7
toolCallTimeoutMs: 900000 # Ghidra/Hopper 首次启动可能较久

完整键名与默认值见仓库 README 的配置表(如 schemaProfile、sensitiveArtifacts、yaraRulesDir 等)。

典型用法

经过上面的步骤,在 Agent 对话中可以按「先状态、再索引、再调 REA 工具」的顺序操作:

  1. 调用 rea_status,确认是否已打开目标、哪些引擎可用。
  2. 调用 rea_doctor,确认 MCP 子进程与健康检查通过。
  3. 用 rea_catalog 检索工具名(例如关键词 javascript;资料示例命中 22 个),从输出复制 mcp__rea__* 全名再调用对应工具。
  4. 对未知样本先做 rea_triage,再决定是否打开 Ghidra/JADX 等深度分析。
  5. 若某次工具返回提示路径,用 rea_read_artifact 分页读落盘内容;需要归档时用 rea_export_report。

侧栏中可填写引擎绝对路径,或对 Ghidra/JADX/Apktool 使用「准备」按钮;WABT 在非 Windows x64 上需手填路径。

适用场景与注意

适合谁:已在 DSH 里用 Agent 做移动/二进制/多语言逆向,希望复用 REA 207 工具面,又需要控制上下文 token、本机引擎一键准备与结果落盘治理的开发者。

务必注意:

  • 插件以当前 DSH 进程权限运行;逆向工具可能读写你指定的样本路径、调用本机 Ghidra/Java 等,安装前应阅读 源码 与 MIT 许可证,并理解 README 中的安全边界。
  • REA 与 Ghidra/JADX 等各自许可证归原项目;商业引擎(IDA/Hopper/JEB)仅路径配置,不提供自动安装。
  • SkillHub 为独立社区目录,与 DeepSeek / 幻方无官方从属关系;星标与版本以仓库 Release 为准(目录页标注 v1.3.1)。

结尾

dsh-rea 把 REA 的逆向 MCP 工具表接进 DSH,用延迟加载把常驻 schema 从约 194 KB 降到约 1.4 KB,并补齐 rea_catalog 索引、运行时原子解包、环境侧栏、doctor/status/triage 与产物治理。若要安装或查看更新说明,可访问 SkillHub 目录页 与 GitHub 仓库。

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

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

Xiaoye