# dsh-reverse-skill

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

## Metadata

- Author: [@dhicoc](https://github.com/dhicoc)
- Repo: <https://github.com/dhicoc/dsh-reverse-skill.git>
- GitHub: [dhicoc/dsh-reverse-skill](https://github.com/dhicoc/dsh-reverse-skill)
- Stars: 54
- Language: PowerShell
- License: [MIT](https://spdx.org/licenses/MIT.html)
- Topics: `ctf`, `deepseek-harness`, `dsh-plugin`, `pentest`, `reverse-engineering`, `security`
- Forks: 9
- Open Issues: 1
- Last push: 2026-08-17T03:50:08.000Z
- Added: 2026-08-14T00:00:00.000Z

## Install

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

## Wiki

## 一句话定位
把上游 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.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` 等原生绑定 |

## 安装方式
```bash
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 扁平挂载路径

---

This document is auto-generated by [deepseek-plugin.org](https://deepseek-plugin.org). HTML page: [dsh-reverse-skill](https://deepseek-plugin.org/plugins/dhicoc/dsh-reverse-skill)
Wiki generated by AI (model: `MiniMax-M3`)
