ctf-solve-teach:教学式 CTF 解题技能插件

前言

用 AI 做 CTF 时,常见两种失败:一是三秒给出答案,抄完什么也没学到;二是流水账式的解题记录,只记录做了什么,没说为什么这么做。DSH 的技能系统允许用户为智能体定义能力,但要让技能真正起到”教学”作用,需要在设计上强制约束思考过程。ctf-solve-teach 插件通过一套结构化的流程和目录契约,把解题过程拆解为”七问循环”,每一步都要交代因果,最后生成可复现的 Writeup。

这是什么

ctf-solve-teach 是一个 DSH 插件,维护者是 Wangxiaolu0716。它将 CTF 解题过程改造为”教学式”流程:智能体在解题时必须边解边讲,解释每一步使用的套路、工具背后的知识点,最后在 solves/<题目名>/ 目录下产出完整的 Writeup。插件同时作为 npm 包 dsh-ctf-solve-teach 发布。

插件的核心价值在于:把”会做这道题”变成”会做一类题”,通过强制输出的”卡壳与弯路”和”同类题迁移”章节,让解题记录成为可复用的知识资产。

核心功能

插件内置三条硬约束:

  1. 不许黑箱:任何命令落地前,必须说明现象、判断属于哪类套路、为什么选择这个工具、期望输出是什么。
  2. 知识点讲因果:不说”PNG 改宽高”,要说”IDAT 解压字节数 = (1+宽×通道)×高,所以能反推”。
  3. 产物不外溢:所有中间文件都落在 solves/<题目名>/ 里,工作区根目录不许出现临时文件。

插件通过”七问循环”流程组织解题过程,每一步都包含:现象 → 判断 → 工具选择 → 执行 → 结果解读 → 知识点说明 → 下一步规划。完成后自动生成目录结构:

solves/<题目名>/
├── README.md              # 最终 Writeup(9 个章节)
├── 00-brief.md            # 题目情报卡
├── journal.md             # 解题日志(每步七字段,含失败命令)
├── flag.txt               # 一行 flag
├── artifacts/             # 原始附件只读副本
├── work/                  # 解包产物、修复图、爆破日志
└── scripts/               # 一次性脚本(别人能复跑)

README.md 的 9 个章节是质量门强制项:题目情报、一句话结论、解题路径、关键步骤复盘、工具与用法清单、知识点地图、卡壳与弯路、可复用脚本、同类题迁移。其中”卡壳与弯路”和”同类题迁移”是关键,前者记录失败尝试,后者促进知识迁移。

安装与启用

作为 DSH 插件安装(推荐):

dsh plugin add dsh-ctf-solve-teach

插件装完后重启 DSH,技能目录里会直接出现 ctf-solve-teach。插件的工作方式是:cordis.patch.yml 把插件插进 profile,插件启动时读取包内的 skills/ctf-solve-teach/SKILL.md,调用 ctx.skills.register() 注册成 runtime skill,并把 references/ 与 scripts/ 作为 resourceBase 一起交出去。

作为独立 skill 使用(不装插件,任何 agent 通用):

git clone https://github.com/Wangxiaolu0716/ctf-solve-teach.git /tmp/cst
cp -r /tmp/cst/skills/ctf-solve-teach ~/.dsh/skills/

Claude Code 把目标换成 ~/.claude/skills/,其他 agent 同理。

典型用法

装好之后直接用自然语言触发:

帮我解一下这道杂项题,附件在 D:\ctf\chall.zip
这道流量分析题我的思路卡住了,边解边讲
给我写个 wp,按教学向的那种

Agent 会自动:建目录 → 建情报卡 → 逐步解题并讲解 → 收尾写 README → 跑质量门。

也可以手动调用脚本:

# 建目录骨架
python skills/ctf-solve-teach/scripts/new_solve.py "题目名" --src 附件或目录 --category misc

# 交付前自检
python skills/ctf-solve-teach/scripts/check_doc.py "solves/题目名"

new_solve.py 是幂等的,目录已存在时只补缺失文件。

适用场景与注意

适合需要系统化训练解题思路、希望保留可复现解题记录的开发者和学习者。插件以当前 DSH 进程权限运行,安装前应检查源码与许可证。

插件设计原则是”教学优先”——宁可多花时间解释工具选型,也不要快进到答案;”可复现”——命令原样保留,路径相对化,脚本进 scripts/;”诚实”——做不出来就写 PARTIAL: ...,并在”卡壳与弯路”里说明卡在哪;”不绑平台”——判型表和工具箱按能力组织,本地工具只是示例。

结尾

ctf-solve-teach 通过结构化的约束和目录契约,让 AI 解题过程从”答案导向”转向”知识导向”,生成的 Writeup 不仅是答案,更是可复用、可迁移的学习资料。通过强制输出的”卡壳与弯路”和”同类题迁移”章节,真正实现了从”会做一道题”到”会做一类题”的跨越。

目录页 | GitHub

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

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

小夜