dsh-purge-021:在你自己本机的 DeepSeek Harness 上分开「模型拒绝」与「宿主拦截」

前言

做智能体安全评测时常遇到一个模糊点:你问「模型会不会答」,实际得到的是「宿主让不让答」。DeepSeek Harness 不只是把提示词转发给模型,它会在运行时改写提示词、审批门、沙箱策略与会话格式。只看最终回答,会把宿主层的拦截误当成模型拒绝,也看不到默认策略是不是收得过紧。

下面介绍 cxkctrl24-lgtm/dsh-purge-021。它是 dsh-purge 的社区 fork,上游是 YuJunZhiXue/dsh-purge,由 cxkctrl24-lgtm 维护,面向 DSH 0.2.1-rc.2,作用范围限定在使用者本机已安装的官方 Harness。它的思路是把「模型层」和「宿主层」拆开观察,而不是直接给你一个”能破甲”的结论。

先交代生态背景:DSH 的设计理念是「一切皆插件」。本文引用的目录页 skillhub.cn 是独立社区站点,与 DeepSeek / 幻方没有官方从属关系,不是官方应用商店。

这是什么

一句话:dsh-purge-021 是装在本机官方 DeepSeek Harness 上的网络安全红队评测插件,按补丁分组展示状态,并提供应用、还原、卸载入口。

可核对的事实:

  • 维护者:cxkctrl24-lgtm
  • 分类:admin-security
  • GitHub 星标:2
  • 许可证:Apache-2.0(随上游)
  • 版本号:1.1.83-0.2.1.rc.2-fork2(README 正文里仍写作 1.1.81,属文档未同步;包内 package.json 与 README 头部均为 fork2)
  • 未发布到 npm,只能从仓库或 Releases 安装

关于 fork 与上游的关系,仓库的 CHANGELOG-fork2.md 写得比较清楚:上一轮 fork1 的基座是 1.1.73,上游此后已发到 1.1.82(1.1.79、1.1.80、1.1.81、1.1.82 四个版本,约 1300 行差异)。本轮直接把上游 1.1.82 整棵树作为新基座,再把 fork 独有修复逐条移植回来,而不是继续在旧基座上打点对点补丁。

核心能力

插件在会话标题旁放一个按钮,打开右侧栏,里面是两个页面:清洗(Clean)和演练台(Drill)。

入口 作用
dsh-purge 侧栏 会话标题旁按钮打开右侧栏,两页:清洗、演练台
清洗 分组查看补丁状态,应用 / 还原 / 卸载,编辑提示词与多套规则
演练台 授权后查看资产与本机环境。开源版不下发技能库和知识库,只用于本机 / 内网本地靶场
宿主策略 调整默认文案、权限策略、工具上限;官方能力保留,不另写一套身份
启动时 自动再检查并应用。npm 升级盖掉 node_modules 之后不用手工改文件

写入时机也值得注意:插件不直接改 Harness 源码仓库,改动由「清洗」页点「应用」时写入。路径不写死盘符,按 $DSH_HOME、dsh 启动器旁边的 .dsh,再退回 ~/.dsh。身份来自插件内随包携带的加密提示词,也就是提示词框默认显示的那一份,不读取宿主磁盘上的提示词文件。

fork 独有修复(上游 1.1.82 没有,CHANGELOG-fork2.md 逐条给出落点):

  1. F1 宿主被信号杀时写 <userData>/logs/dsh-purge-host-exit.log(时间 / exit code / signal / pid / stderr 摘要),落点在 lib/core.js 补丁 #83 的载荷
  2. F2 asar 改名失败也拉起客户端,避免宿主随后无条件 process.exit(0) 导致客户端消失且不自动回来,落点在 lib/desktop.js 的 ASAR_SWAP_PS1
  3. G10 注入正文覆盖判定:血统三句从「一票否决」降级为「无用户证据时兜底」,引入 customized 标记与 mtime 证据,手改 prompt-inject.md 或点保存不再被盖回内置默认
  4. P1-3 / P1-7 hung 缓存 TTL 从 200ms 提到 30s,缓存键从 mtime 换成 (mtime:size),只在戳变或换 home 时才 syncPromptInjectOnDiskSync
  5. P1-4 injectMatchers 模块级缓存,键为注入正文,落点 lib/identity.js
  6. P1-6 日志批量写(250ms / 8KB 双门 + 退出强刷),把每装配 6 次同步 syscall 降到每秒不超过 4 次
  7. b0 探针 独立第二通道 %TEMP%/dsh-purge-probe.log,记录 life.module / life.apply / life.dispose 等生命周期事件、30s 心跳与落盘失败采样,落点 lib/probe.js

上游 1.1.79–1.1.82 带来的内容也被直接继承,不需要再打补丁,包括 #166 / #167(pnpm 拦 postinstall 时补 allowBuilds、升级后补回 bundles + 本体 insert)、#168(allowBuilds 覆盖 dsh-purge@codeload… 键)、#172(skills.js 补 fs)、#174(识别 DSH NEXT 社区桌面)、#180(修 allowBuilds 被反复写坏的一整套坑)。上游 1.1.82 的 lib/profile-insert.js 会在用户层 profile/cordis.patch.yml 补一条 insert,这是解决「主行必须用 insert 创建」的正确位置。

一个重要限制写在 README 的作者说明里:开源版攻击任务只认本地靶场 IP(本机回环和 RFC1918 私网)。域名会先按系统解析(含 hosts),解析到的每一个地址都必须是私网或回环;把 .lab 指到公网、解析失败、混有公网地址,一律拦截。同时禁止制作游戏外挂(自瞄、透视、改内存打游戏、过反作弊),提示词与会话门口一起拦。

适配范围

README 给出的对应关系如下,装之前先确认宿主版本:

  • DSH 0.2.1-rc.2(官方桌面 / 官方 dsh web):用 1.1.81 及以上,即本页这档
  • DSH 0.2.0-rc.2:用 1.1.40 及以上
  • DSH 0.1.7(含 rc.1 / rc.2):用 1.1.39 及更早,在 Releases 里选对应标签
  • 不支持 DSH 0.2.1-rc.3 / rc.4 及更新

宿主对不上时,补丁会显示待应用或跳过,不会乱改文件。README 建议退回 0.2.1-rc.2 再装。

作用边界:插件只处理使用者本机已安装的官方 @deepseek-ai 包和本机配置,不是公网扫描器,也不是针对第三方站点的攻击套件。

安装与启用

先排除两个容易踩的坑:不要走插件市场(dsh-plugin.org 或设置里的「插件市场」一键安装会报 already queued: dsh-purge),npm 仓库也没有 dsh-purge 这个包名,不要 pnpm add dsh-purge。安装命令来自 README 原文。

快速安装,PATH 里有 dsh 时一条命令加一次重启:

# 官方 `dsh web`
dsh plugin --profile web add https://codeload.github.com/cxkctrl24-lgtm/dsh-purge-021/tar.gz/refs/heads/main

# 官方桌面 EXE
dsh plugin --profile desktop add https://codeload.github.com/cxkctrl24-lgtm/dsh-purge-021/tar.gz/refs/heads/main

装完做两件事:

  1. 完全退出再打开刚装的那个宿主。Web 停掉 dsh web 再开;桌面端托盘也要退出,再开 exe
  2. 在这个宿主点会话标题旁的 dsh-purge →「清洗」→「应用」。应用成功后会自动重启一次

官方 Web 和官方桌面端分开装、分开应用,只装你正在打开的那一个。压缩包地址只用 codeload.github.com 这个写法,不要用 github.com/.../archive——后者会 302,pnpm 会 fetch failed。

没有 dsh、只有 pnpm 时,进入正在使用的那个 profile(不要在仓库根执行):

cd "$DSH_HOME/profiles/web"    # 桌面端改为 profiles/desktop
pnpm add https://codeload.github.com/cxkctrl24-lgtm/dsh-purge-021/tar.gz/refs/heads/main

Windows PowerShell:

cd "$env:USERPROFILE\.dsh\profiles\web"   # 桌面端改为 profiles\desktop
pnpm add https://codeload.github.com/cxkctrl24-lgtm/dsh-purge-021/tar.gz/refs/heads/main

如果当前目录已经是本仓库,把网址换成 .。

典型用法

应用成功后插件会自动重启一次,然后在聊天里跑 /purge status 验证状态。README 里给出的可复现验证路径就这一条。

更细的操作都收敛在侧栏界面上:清洗页分组查看补丁、点「应用 / 还原 / 卸载」,编辑提示词和多套规则;演练台需要先授权,然后查看资产和本机环境。启动时插件会再检查并应用一次,所以 npm 升级覆盖 node_modules 之后不用手改文件。

需要特别说明的是,README 的 Usage / Restore / 更新章节在抓取资料里被截断,本文没有核实到更多命令行用法,因此不展开,请以仓库 README 为准。

适用场景与注意

适合的场景:在你有权管理的本机官方 Harness 上做受控红队评测与鲁棒性测试,或者用来观察默认策略该不该收紧。README 明确要求一切测试限制在本机已授权安装的官方 Harness、离线本地合成靶标、授权演练靶场及合规实验室受控环境中,严禁在未经授权的目标、公网在线系统或生产业务上运行。

安装前请检查源码与许可证。几点具体的:

  • 插件以当前 dsh 进程权限运行,「应用」会写本机文件与本机 profile,属于对自身安装环境的修改
  • 许可证是 Apache-2.0,二开和再分发必须保留版权声明与 NOTICE,并写明来源 YuJunZhiXue/dsh-purge
  • README 声明原版不允许倒卖,二开可以但必须署名;借用名称、思路、代码或提示词同样要署名
  • README 内的严正免责声明说明这是非营利开源项目、与 DeepSeek 官方无隶属或背书关系,使用者独立承担全部法律责任

结尾

dsh-purge-021 的价值不在于”让模型什么都答”,而在于把宿主层和模型层分开,让你在自己的安装里做受控评测。它目前维护 DSH 0.2.1-rc.2,未发布 npm,安装路径和 fork 修复点都有明确文档,适合愿意先读源码再动手的人。

  • 目录页:https://www.skillhub.cn/plugins/cxkctrl24-lgtm/dsh-purge-021
  • GitHub:https://github.com/cxkctrl24-lgtm/dsh-purge-021
  • 上游仓库:https://github.com/YuJunZhiXue/dsh-purge

本文事实来源:仓库 README.md / README.zh-CN.md、package.json、CHANGELOG-fork2.md(均已抓取核对)。Usage / Restore / 更新章节因抓取截断未纳入,未核实的内容未作推断。

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

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

Xiaoye