为 DeepSeek Harness 打包上游 reverse-skill 的全部 85 个安全研究技能,一键启用。
- 语言
- PowerShell
- License
- MIT
- 分支
- main
安装
$ 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(exportname = '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.1 | Cordis 框架(peerDependency,由 dsh 运行时提供) |
| @deepseek-ai/dsh-skill | ^0.0.1-rc.1 | dsh 技能 seam 类型(peerDependency,由 dsh 运行时提供) |
| Node.js | 未声明(仓库 CI 使用 Node 22,@types/node ^22.0.0) | 源码使用 ES2022 / NodeNext |
| 平台 | 跨平台 | 仅使用 Node 内建模块(fs、url、path),无原生依赖 |
| 原生模块 | 无 | 无 node-pty、node: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 扁平挂载路径
reverse-skill 的完整 DeepSeek Harness(dsh)插件版。 把上游
zhaoxuya520/reverse-skill(25k★,MIT)全部 85 个 SKILL.md 原样封装成一个 dsh Cordis 插件,随包分发、随插件加载,无需手动维护候选清单。
这是什么
- 完整移植:85 个 skills =
skills/下 43 个(60+ 领域技能经去重后的真实 SKILL.md 数)+CTF-Sandbox-Orchestrator/下 42 个(CTF 赛道技能)。与上游一一对应,不裁剪、不挑捡。 - 插件形态(你选的):以 dsh 一等公民的
skillseam(ctx.skills)注册一个 provider,harness 启动时自动把全部技能注入可用技能库。 - 对比已有不完全移植:社区里的
dsh-reverse-security只移植了 45 个、且是 preset-only(无 Cordis 插件)。本仓库补齐到 85 个并提供正式插件入口。
适用范围(请遵守)
本仓库内容仅用于 授权的 逆向工程、渗透测试与安全研究。使用者须确保对目标系统拥有合法授权。一切未授权行为与本仓库无关。
目录结构
dsh-reverse-skill/
├── src/
│ └── index.ts # 数据驱动的 Cordis 插件:递归扫描并注册全部 SKILL.md
├── skills/ # 43 个领域技能(上游 skills/ 1:1 复制)
│ ├── reverse-skill-router/ # 路由技能(由上游 skills/SKILL.md 重构成目录)
│ ├── pentest-tools/ # 含嵌套子技能 src-hunter 等
│ └── reverse-engineering/ # 含嵌套子技能 dsl-vm-reverse 等
├── CTF-Sandbox-Orchestrator/ # 42 个 CTF 赛道技能
├── port.py # 归一化脚本(上游 → 本仓库的搬运/前导matter修正)
├── package.json
├── tsconfig.json
└── LICENSE # MIT(与上游一致)
相对路径:
src/index.ts通过fileURLToPath(new URL('../skills', import.meta.url))定位资源(编译后lib/index.js同样成立,因为skills/与lib/同属包根目录的相邻子目录)。注意这里不能再套一层dirname()——../skills这个 URL 已经指向目录本身,多套dirname会把它截断成包根目录,从而把node_modules里的 SKILL.md 也算进来。
安装(插件形态)
1. 安装依赖与构建
# 安装 peer 依赖(cordis / dsh-skill 由 dsh 运行时提供,这里用于类型与构建)
npm install
npm run build # tsc → 生成 lib/ 与 lib/types/
package.json 中已声明:
"main": "lib/index.js",
"types": "lib/types/index.d.ts",
"peerDependencies": {
"@deepseek-ai/cordis": "^4.0.1",
"@deepseek-ai/dsh-skill": "^0.0.1-rc.1"
}
2. 在 dsh 中启用本插件
本仓库已声明 dsh.bundle manifest(见 cordis.patch.yml),因此可直接用一行命令安装并激活:
# 从 GitHub 安装并激活(推荐)
dsh plugin add github:dhicoc/dsh-reverse-skill
安装后 dsh 会读取 cordis.patch.yml 把 reverse-skill 这个 Cordis 插件插入当前 profile,启动时自动注册 85 个技能。若你想在 profile / package 配置里手动引用,包名是 @dhicoc/dsh-reverse-skill:
# dsh 配置(示例,键名可能因版本而异)
plugins:
- "@dhicoc/dsh-reverse-skill"
加载后,插件在 apply(ctx) 里调用 ctx.skills.registerProvider(...),把 85 个技能注册进 ctx.skills。模型可通过 ctx.skills → tool-skill 自动调用,用户也可通过技能名手动调用(受各 SKILL.md 的 user-invocable 控制)。
3. (可选)非插件回退:直接当 preset 用
本仓库同时携带完整的 skills/ 与 CTF-Sandbox-Orchestrator/ 目录,可作为 preset 直接挂载,无需构建:
skills:
local:
customSkillDirs:
- "./dsh-reverse-skill/skills"
- "./dsh-reverse-skill/CTF-Sandbox-Orchestrator"
dsh 技能发现优先级(先命中先生效):项目
.dsh→ 项目.agents→customSkillDirs→ 用户.dsh→ 用户.agents。扁平发现,不接受递归**/SKILL.md,所以路由技能必须是reverse-skill-router/SKILL.md这样的目录结构(本仓库已处理好)。
插件工作原理(数据驱动,零手写清单)
src/index.ts 不做任何硬编码候选列表,而是:
- 递归遍历
skills/与CTF-Sandbox-Orchestrator/,找到每个SKILL.md; - 解析前导 matter(含把
metadata.user-invocable提升为顶层user-invocable、when_to_use→whenToUse的归一化); - 构造
SkillCandidate(含resourceBase: {kind:'directory', path}、结果缓存); - 注册一个
SkillProvider,get()时返回完整 body。
新增/删除技能只需改目录,插件自动同步。
可复跑验证
在仓库根目录运行:
npm test
该命令会重新编译插件,并通过实际注册的 SkillProvider 断言 85 个已打包技能都能被 list() 发现、名称无重复且均能按需 get() 返回非空正文。测试还会临时创建一个带 UTF-8 BOM 和 CRLF 的 SKILL.md,确认扫描器不会静默跳过此类文件;fixture 在测试结束后会自动删除。发布工作流也会在 npm publish 前运行同一检查。
已知限制(诚实告知)
agents/*.yaml不可移植:上游 43 个 OpenAI Agents SDK 的 agent 定义无法映射到 dsh 的ctx.subagent(dsh 仅支持拉起 Codex / Claude Code CLI)。这些 agent 定义未纳入插件。allowed-tools/disallowed-tools不被 dsh 强制:dsh 当前把这两项视为未知字段,延迟执行。技能内的工具约束需自行在 harness 层保证。- camelCase 前导 matter 字段(如
when_to_use)会被 dsh 拒绝:port.py已统一修正为whenToUse、user-invocable等受支持字段。 - MCP 工具(如 burp-mcp)需另行配置:技能正文里引用的外部 MCP server 不在本插件范围内,请按 dsh 的
mcp.servers自行接入。 - 文档链接已重写:正文内相对链接已改为
../(及 CTF 相关为../../CTF-Sandbox-Orchestrator/),以适配 dsh 扁平挂载路径。
License
LICENSE 为 MIT,与上游 reverse-skill 保持一致。内容版权归原 upstream 作者与贡献者;本仓库为 dsh 适配封装。