dsh-reverse-skill

54Star9Fork1Issue0Watching

为 DeepSeek Harness 打包上游 reverse-skill 的全部 85 个安全研究技能,一键启用。

语言
PowerShell
License
MIT
分支
main
ctfdeepseek-harnessdsh-pluginpentestreverse-engineeringsecurity

安装

$ dsh plugin --profile web add github:dhicoc/dsh-reverse-skill

在终端中运行以上命令,通过 dsh CLI 安装此插件。可在右上角切换 Profile。 第一次用 dsh?看这篇新手教程

一句话定位

把上游 reverse-skill 项目的 85 个安全研究技能(43 个领域技能 + 42 个 CTF 赛道技能)原样封装成一个 dsh Cordis 插件,安装后随宿主启动自动注入技能库,省去手动维护候选清单的麻烦。

核心能力

  • 一键挂载 85 个逆向/渗透/取证/固件/移动/CTF 等安全研究技能到 dsh 技能库
  • 递归扫描 skills/CTF-Sandbox-Orchestrator/ 目录下所有 SKILL.md,新增或删除技能无需改插件代码
  • 解析 SKILL.md 前导 matter(含 BOM、CRLF 兼容),把 metadata.user-invocable 提升为顶层 user-invocable
  • 注册 reverse-skill 命名空间的技能提供方,模型与用户均可按名调用
  • 把上游 when_to_use 等 camelCase 字段归一化为 dsh 支持的 whenToUse,避免 dsh 拒绝加载
  • 提供 BOM/CRLF fixture 自检脚本,确保扫描器不会静默跳过带 BOM 的文件

技术实现

  • 语言: TypeScript(ES2022 / NodeNext,编译到 lib/index.js + lib/types/index.d.ts
  • 关键依赖: @deepseek-ai/cordis@deepseek-ai/dsh-skill(peerDependencies,运行时由 dsh 提供)
  • 架构模式: Cordis 插件 — apply(ctx) 中调用 ctx.skills.registerProvider(),把一个数据驱动的 SkillProvider 注册进宿主;扫描器用 node:fs/promises + node:url + node:path 递归遍历包内目录,结果缓存到模块级 CACHE
  • 入口文件: src/index.ts(export name = 'reverse-skill'inject = ['skills']apply(ctx));运行时通过 cordis.patch.yml 声明的 bundle 入口被 dsh 加载
  • 辅助文件: port.py 把上游 reverse-skill 仓库搬运到本仓库时统一前导 matter 并把路由技能重组为子目录;_selftest.mjs 临时写入带 BOM 的 SKILL.md 验证扫描健壮性

适用场景

做授权的逆向工程、漏洞研究、CTF 比赛、安全审计或渗透测试时,希望模型能按任务类型自动路由到对应的专用技能(例如 IDA 逆向、APK 解包、JS 签名定位、AD 攻击链复现)。也适合把上游 reverse-skill 的整套方法学一次性塞进 dsh 工作流,避免按需逐个复制 SKILL.md。

前置依赖与兼容性

依赖最低版本说明
@deepseek-ai/cordis^4.0.1Cordis 框架(peerDependency,由 dsh 运行时提供)
@deepseek-ai/dsh-skill^0.0.1-rc.1dsh 技能 seam 类型(peerDependency,由 dsh 运行时提供)
Node.js未声明(仓库 CI 使用 Node 22,@types/node ^22.0.0源码使用 ES2022 / NodeNext
平台跨平台仅使用 Node 内建模块(fs、url、path),无原生依赖
原生模块node-ptynode:sqlite 等原生绑定

安装方式

dsh plugin --profile web add github:dhicoc/dsh-reverse-skill

配置项

本插件无需额外配置。所有行为由仓库内 skills/CTF-Sandbox-Orchestrator/ 的目录内容决定,无 Schema、无运行时参数。

常见问题

Q: 安装之后想先确认技能真的注册上了,有没有命令能列出全部 85 个技能?

A: 可以在仓库根目录运行 npm install && npm test,该命令会重新编译并通过实际注册的 SkillProvider 断言 85 个技能可被发现、名称无重复且 get() 返回非空正文。

Q: 我只想要其中一部分技能,可以单独挑出来用吗?

A: 插件以目录为数据源,无法在插件运行时挑选子集。如果只想用其中若干个,可以把对应子目录拷贝到 customSkillDirs 路径下以 preset 方式挂载(README 中给出的非插件回退方案)。

Q: SKILL.md 里写了 allowed-tools / disallowed-tools,会被强制生效吗?

A: 不会。dsh 当前把这两项视为未知字段,延迟执行;技能正文里声明的工具约束需要你在 harness 层自行保证。

Q: 上游里的 agents/*.yaml(OpenAI Agents SDK)配置去哪了?

A: 已剔除。dsh 的 ctx.subagent 只支持拉起 Codex / Claude Code CLI,无法映射 OpenAI Agents SDK 定义;这 43 个 agent 定义刻意没有纳入插件。

Q: 技能里引用的外部 MCP server(burp-mcp、IDA MCP、jshookmcp 等)会自动起来吗?

A: 不会。插件只打包 SKILL.md 与必要的本地资源,外部 MCP server 请按 dsh 的 mcp.servers 配置自行接入并启动。

Q: 卸载这个插件会影响 dsh 本身吗?

A: 不会。本插件仅在 ctx.skills 上注册一个 provider,卸载后该 provider 停止暴露技能,dsh 核心功能不受影响。

Q: 我能在 Windows 上用吗?

A: 可以。源码只用 Node 内建模块,port.py 只在搬运阶段使用(已落盘的目录不需要再跑),运行时跨平台。

上手难度

入门 — 一行命令安装即用,没有 Schema 要填、没有运行时参数;前置条件是理解 dsh 自身的技能调用流程,以及清楚哪些场景属于授权范围内的安全研究。

已知问题与限制

  • allowed-tools / disallowed-tools 不被 dsh 强制,需在 harness 层自行保证
  • camelCase 前导 matter 字段(如 when_to_use)已被 port.py 批量改写为 whenToUse,手工修改后追加新技能时需自行保持一致
  • 上游 agents/*.yaml 的 OpenAI Agents SDK 定义未移植,因 dsh 不支持该 Agent 框架
  • 技能正文里引用的外部 MCP server(burp-mcp、IDA MCP 等)不在插件分发范围内,需自行接入
  • 文档链接已重写为 ../../../CTF-Sandbox-Orchestrator/,以适配 dsh 扁平挂载路径