🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

冈格尼尔战役指挥 86cloudyun-afk/dsh-gungnir

DeepSeek Harnessv0.2.0
86cloudyun-afk25 天前有提交已提供中文文档扫描:含敏感能力

GUNGNIR - DSH 红队战役指挥框架:攻击路径合成的工程化。事实库+门闸+跳板池,执行层可插拔。编排层,不含漏洞利用代码;仅限授权测试。

30.8/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/6 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

自动兼容检查未通过:缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add 86cloudyun-afk/dsh-gungnir
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么
dsh 原生插件 · security
装得上吗
npm 包存在但缺 main/exports/bin 入口声明,源码安装也可能起不来
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 25 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装

缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包warroom @ 0.2.0
✓Node 引擎要求 >=22.13 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✗入口文件缺少入口声明

源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/12 21:23:11

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件
查看扫描证据(共 105 处,展示前 89 条)
  • 执行外部命令来自配置/变量
    executors/dsh-plugin-cmd.example.mjs:25
    execFile(cmd, args, { timeout: timeoutMs, maxBuffer: 16 * 1024 * 1024 }, (err, stdout, stderr) => {
  • 执行外部命令来自配置/变量
    executors/dsh-redteam-executor.mjs:18
    const child = execFile(cmd, args, { timeout: timeoutMs, maxBuffer: 8 * 1024 * 1024 }, (err, stdout, stderr) => {
  • 执行外部命令固定命令
    executors/tool-runner.mjs:118
    const pids = spawnSync('pgrep', ['-g', String(pgid)], { encoding: 'utf8', timeout: 5_000 }).stdout ?? '';
  • 执行外部命令固定命令
    executors/tool-runner.mjs:121
    const ps = spawnSync('ps', ['-o', 'pid=,args=', '-p', list.join(',')], { encoding: 'utf8', timeout: 5_000 }).stdout ?? '';
  • 读取本地文件
    executors/tool-runner.mjs:152
    const body = envFile && existsSync(envFile)
  • 写入本地文件
    executors/tool-runner.mjs:158
    mkdirSync(dir, { recursive: true });
  • 执行外部命令固定命令
    executors/tool-runner.mjs:168
    const r = spawnSync('bash', ['-c', script], {
  • 读取本地文件
    executors/tool-runner.mjs:176
    const readOut = (f) => { try { return readFileSync(f, 'utf8'); } catch { return ''; } };
  • 读取本地文件
    packages/warroom-core/src/aggregate.js:10
    if (!path || !existsSync(path)) return null;
  • 读取本地文件
    packages/warroom-core/src/aggregate.js:33
    if (existsSync(engDir)) {
  • 读取本地文件
    packages/warroom-core/src/aggregate.js:34
    for (const id of readdirSync(engDir)) {
  • 读取本地文件
    packages/warroom-core/src/aggregate.js:36
    if (!existsSync(dbPath)) continue;
  • 读取本地文件
    packages/warroom-core/src/broker.js:586
    const markdown = readFileSync(exported.paths.markdown ?? exported.path, 'utf8');
  • 写入本地文件
    packages/warroom-core/src/broker.js:682
    mkdirSync(dir, { recursive: true });
  • 写入本地文件
    packages/warroom-core/src/broker.js:684
    writeFileSync(path, renderChecklist(c) + '\n', 'utf8');
  • 读取本地文件
    packages/warroom-core/src/broker.js:713
    return readdirSync(dir).filter((n) => existsSync(join(dir, n, 'fact.db')));
  • 读取本地文件
    packages/warroom-core/src/broker.js:713
    return readdirSync(dir).filter((n) => existsSync(join(dir, n, 'fact.db')));
  • 写入本地文件
    packages/warroom-core/src/broker.js:1062
    mkdirSync(dir, { recursive: true });
  • 读取本地文件
    packages/warroom-core/src/checklist.js:75
    const reports = existsSync(reportsRoot)
  • 读取本地文件
    packages/warroom-core/src/checklist.js:76
    ? readdirSync(reportsRoot).filter((f) => f.endsWith('.md'))
  • 读取本地文件
    packages/warroom-core/src/checklist.js:77
    .map((f) => ({ f, m: statSync(join(reportsRoot, f)).mtimeMs })).sort((a, b) => b.m - a.m)
  • 读取本地文件
    packages/warroom-core/src/checklist.js:82
    reproducible = verifyReportAgainstStore(readFileSync(join(reportsRoot, reports[0].f), 'utf8'), store).reproducible;
  • 读取本地文件
    packages/warroom-core/src/checklist.js:91
    const indexFiles = existsSync(evidenceRoot)
  • 读取本地文件
    packages/warroom-core/src/checklist.js:92
    ? readdirSync(evidenceRoot).filter((f) => f === 'EVIDENCE_INDEX.md').length : 0;
  • 读取本地文件
    packages/warroom-core/src/config.js:30
    if (!existsSync(path)) {
  • 读取本地文件
    packages/warroom-core/src/config.js:34
    .map((f) => join(home, f)).filter((f) => existsSync(f));
  • 读取本地文件
    packages/warroom-core/src/config.js:44
    try { raw = JSON.parse(readFileSync(path, 'utf8')); }
  • 读取本地文件
    packages/warroom-core/src/config.js:68
    if (existsSync(path) && !force) throw warroomError(ERR.E_GATE_MISSING_TUPLE, `已存在:${path}(用 --force 覆盖)`);
  • 写入本地文件
    packages/warroom-core/src/config.js:70
    writeFileSync(path, JSON.stringify(cfg, null, 2) + '\n', 'utf8');
  • 写入本地文件
    packages/warroom-core/src/db.js:135
    mkdirSync(dir, { recursive: true });
  • 写入本地文件
    packages/warroom-core/src/db.js:145
    mkdirSync(home, { recursive: true });
  • 执行外部命令固定命令
    packages/warroom-core/src/egress-probe.mjs:28
    : spawnSync('curl', args, { encoding: 'utf8', timeout: (timeoutSec + 3) * 1000, env: clean });
  • 写入本地文件
    packages/warroom-core/src/evidence.js:24
    mkdirSync(dir, { recursive: true });
  • 写入本地文件
    packages/warroom-core/src/evidence.js:98
    writeFileSync(checklistFile, renderChecklist(c) + '\n', 'utf8');
  • 写入本地文件
    packages/warroom-core/src/evidence.js:108
    writeFileSync(indexPath, index.join('\n'), 'utf8');
  • 写入本地文件
    packages/warroom-core/src/evidence.js:109
    writeFileSync(watermarkPath, JSON.stringify({
  • 写入本地文件
    packages/warroom-core/src/knowledge.js:36
    mkdirSync(home, { recursive: true });
  • 读取本地文件
    packages/warroom-core/src/maintenance.js:9
    if (depth > 4 || !existsSync(root)) return out;
  • 读取本地文件
    packages/warroom-core/src/maintenance.js:10
    for (const name of readdirSync(root)) {
  • 读取本地文件
    packages/warroom-core/src/maintenance.js:12
    const st = statSync(p);
  • 写入本地文件
    packages/warroom-core/src/maintenance.js:29
    mkdirSync(destRoot, { recursive: true });
  • 写入本地文件
    packages/warroom-core/src/maintenance.js:35
    mkdirSync(join(target, '..'), { recursive: true });
  • 删除本地文件
    packages/warroom-core/src/maintenance.js:36
    rmSync(target, { force: true });
  • 读取本地文件
    packages/warroom-core/src/maintenance.js:55
    const dirs = readdirSync(root)
  • 读取本地文件
    packages/warroom-core/src/maintenance.js:57
    .filter((e) => { try { return statSync(e.path).isDirectory(); } catch { return false; } })
  • 读取本地文件
    packages/warroom-core/src/maintenance.js:58
    .map((e) => ({ ...e, mtime: statSync(e.path).mtimeMs }))
  • 删除本地文件递归
    packages/warroom-core/src/maintenance.js:61
    rmSync(stale.path, { recursive: true, force: true });
  • 写入本地文件
    packages/warroom-core/src/maintenance.js:102
    mkdirSync(join(dst, '..'), { recursive: true });
  • 写入本地文件
    packages/warroom-core/src/maintenance.js:103
    copyFileSync(src, dst);
  • 写入本地文件
    packages/warroom-core/src/preflight.js:46
    writeFileSync(probe, 'x');
  • 删除本地文件
    packages/warroom-core/src/preflight.js:47
    unlinkSync(probe);
  • 读取本地文件
    packages/warroom-core/src/preflight.js:107
    if (!existsSync(backupsDir) || readdirSync(backupsDir).length === 0) {
  • 读取本地文件
    packages/warroom-core/src/preflight.js:107
    if (!existsSync(backupsDir) || readdirSync(backupsDir).length === 0) {
  • 读取本地文件
    packages/warroom-core/src/preflight.js:110
    const latest = readdirSync(backupsDir)
  • 读取本地文件
    packages/warroom-core/src/preflight.js:111
    .map((n) => ({ n, m: statSync(join(backupsDir, n)).mtimeMs }))
  • 读取本地文件
    packages/warroom-core/src/preflight.js:119
    if (existsSync(keyPath)) {
  • 读取本地文件
    packages/warroom-core/src/preflight.js:120
    const mode = statSync(keyPath).mode & 0o777;
  • 执行外部命令固定命令
    packages/warroom-core/src/probes.js:30
    const out = execFileSync('node', ['-e', script], { encoding: 'utf8', timeout: timeoutMs + 500 });
  • 执行外部命令固定命令
    packages/warroom-core/src/probes.js:41
    const out = execFileSync('docker', ['inspect', '-f', '{{.State.Running}}', String(id)],
  • 写入本地文件
    packages/warroom-core/src/report.js:511
    mkdirSync(outDir, { recursive: true });
  • 写入本地文件
    packages/warroom-core/src/report.js:539
    writeFileSync(path, markdown, 'utf8');
  • 写入本地文件
    packages/warroom-core/src/report.js:544
    writeFileSync(path, renderHtml({
  • 写入本地文件
    packages/warroom-core/src/report.js:556
    writeFileSync(path, JSON.stringify(json, null, 2), 'utf8');
  • 读取本地文件
    packages/warroom-core/src/report.js:596
    return readFileSync(path, 'utf8');
  • 写入本地文件
    packages/warroom-core/src/secrets.js:14
    mkdirSync(path, { recursive: true, mode });
  • 写入本地文件
    packages/warroom-core/src/secrets.js:15
    chmodSync(path, mode);
  • 读取本地文件
    packages/warroom-core/src/secrets.js:20
    if (!existsSync(path)) {
  • 写入本地文件
    packages/warroom-core/src/secrets.js:21
    writeFileSync(path, randomBytes(32), { mode: 0o600 });
  • 写入本地文件
    packages/warroom-core/src/secrets.js:23
    chmodSync(path, 0o600);
  • 读取本地文件
    packages/warroom-core/src/secrets.js:24
    const key = readFileSync(path);
  • 读取本地文件
    packages/warroom-core/src/secrets.js:32
    if (!existsSync(p)) throw warroomError(ERR.E_SECRET_KEY_INVALID, `缺少历史密钥 ${keyId}(${p})——无法解密该条秘密`);
  • 写入本地文件
    packages/warroom-core/src/secrets.js:33
    chmodSync(p, 0o600);
  • 读取本地文件
    packages/warroom-core/src/secrets.js:34
    return readFileSync(p);
  • 写入本地文件
    packages/warroom-core/src/secrets.js:133
    mkdirSync(join(this.root, KEYS_DIR), { recursive: true, mode: 0o700 });
  • 读取本地文件
    packages/warroom-core/src/secrets.js:134
    if (!existsSync(archived)) {
  • 读取本地文件
    packages/warroom-core/src/weekly.js:28
    const reports = existsSync(reportsDir)
  • 读取本地文件
    packages/warroom-core/src/weekly.js:29
    ? readdirSync(reportsDir).filter((f) => f.endsWith('.md'))
  • 读取本地文件
    packages/warroom-core/src/weekly.js:30
    .map((f) => ({ f, m: statSync(join(reportsDir, f)).mtimeMs })).sort((a, b) => b.m - a.m)
  • 写入本地文件
    packages/warroom-core/src/weekly.js:99
    mkdirSync(dir, { recursive: true });
  • 写入本地文件
    packages/warroom-core/src/weekly.js:102
    writeFileSync(path, `${renderWeekly(w)}\n`, 'utf8');
  • 读取本地文件
    packages/warroom-core/src/weekly.js:103
    const existing = readdirSync(dir).filter((f) => f.endsWith('.md')).sort().reverse();
  • 读取本地文件
    packages/warroom-dashboard/src/dsh-entry.mjs:136
    return readFile(join(ROOT, asset[0])).then((body) => {
  • 读取本地文件
    packages/warroom-dashboard/src/server.js:38
    const body = await readFile(join(ROOT, asset[0]));
  • 读取本地文件
    packages/warroom-dashboard/src/snapshot.js:14
    if (!existsSync(paths.engagementsRoot)) return [];
  • 读取本地文件
    packages/warroom-dashboard/src/snapshot.js:16
    try { directories = readdirSync(paths.engagementsRoot, { withFileTypes: true }); }
  • 读取本地文件
    packages/warroom-dashboard/src/snapshot.js:95
    if (existsSync(globalPath)) assertRealPathWithin(base, globalPath, 'global.db');
  • 读取本地文件
    packages/warroom-dashboard/src/snapshot.js:96
    if (existsSync(engagementsRoot)) assertRealPathWithin(base, engagementsRoot, 'Engagement root');
  • 读取本地文件
    packages/warroom-dashboard/src/snapshot.js:104
    if (!existsSync(factPath)) {
  • 读取本地文件
    packages/warroom-plugin/src/dsh-entry.mjs:77
    data = JSON.parse(readFileSync(config.preset, 'utf8'));
扫描于 2026/10/31(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 攻击路径合成
  • 事实库与门闸
  • 跳板池管理

README

由 DeepSeek 最新模型翻译生成
DSH GUNGNIR(冈格尼尔) 永恒之枪,出手必中——攻击路径合成的工程化:把分散、隐蔽、看似无关的弱点,拼成一条到 shell 的完整链路。 DSH 红队战役指挥框架。100% 红队工具:仅限已获授权的攻防演练与渗透测试。 仓库只含编排层,不含任何漏洞利用代码。 状态 | 项 | 现状 | | 版本 | v0.1.0(v0.1 冻结闭环达成:16 批次 / 134 PR;最终审计见 FINAL-AUDIT.md) | | 测试 | 884 例登记用例;本次 Mac 安全离线复核计数见 ACCEPTANCE.md | | CI 闸 | 六道本地闸(验收套件 / 工具 schema / 预设允许清单 / 故障矩阵 / 工具文档与看板契约同步 / 自审闸)+ 三个真跑 CI job:围栏真实容器(fence)、执行层跨进程演练(drill)、真实 DSH 挂载验收(native-host → HOST_VERIFIED) | | 故障矩阵 | 21 场景(丢回包/乱序/写失败/残留/重启/撤销/备份恢复/密钥/配置/版本/迁移/路由/心跳/知识库/交付边界/门禁/确认边界/归档幂等/门禁同源) | | 工具 | 36 个 warroom_(schema 严格校验;以 presets/warroom.preset.json 允许清单为准) |
展开完整文档(README 剩余 1 节)
DSH GUNGNIR(冈格尼尔)

永恒之枪,出手必中——攻击路径合成的工程化:把分散、隐蔽、看似无关的弱点,拼成一条到 shell 的完整链路。

DSH 红队战役指挥框架。100% 红队工具:仅限已获授权的攻防演练与渗透测试。
仓库只含编排层,不含任何漏洞利用代码。

状态

| 项 | 现状 |
| 版本 | v0.1.0(v0.1 冻结闭环达成:16 批次 / 134 PR;最终审计见 FINAL-AUDIT.md) |
| 测试 | 884 例登记用例;本次 Mac 安全离线复核计数见 ACCEPTANCE.md |
| CI 闸 | 六道本地闸(验收套件 / 工具 schema / 预设允许清单 / 故障矩阵 / 工具文档与看板契约同步 / 自审闸)+ 三个真跑 CI job:围栏真实容器(fence)、执行层跨进程演练(drill)、真实 DSH 挂载验收(native-host → HOST_VERIFIED) |
| 故障矩阵 | 21 场景(丢回包/乱序/写失败/残留/重启/撤销/备份恢复/密钥/配置/版本/迁移/路由/心跳/知识库/交付边界/门禁/确认边界/归档幂等/门禁同源) |
| 工具 | 36 个 warroom_(schema 严格校验;以 presets/warroom.preset.json 允许清单为准) |
| 验收对照 | docs/ACCEPTANCE.md(逐条状态 + 证据命令) |
| 最终审计 | docs/FINAL-AUDIT.md(§8 十二项 11/12 闭环;未闭环项均需操作员 DSH 环境) |
| 故障矩阵 | docs/FAULT-MATRIX.md(21 场景:场景/期望/契约归属) |

六件套与动线(一屏)

| 阶段 | 命令 | 产出 |
| 起好 | init → doctor → config init | 家目录、配置、体检 |
| 开工 | engage(授权冻结)→ jump acquire → egress → preflight | 可动手的战役 + 出口 + 预检结论 |
| 干活 | wave --dry-run(先演练)→ wave(依赖驱动)→ watch/rate(值班) | 事实入库、任务结项、油表可见 |
| 收口 | checklist(缺什么)→ deliver(一键交付)→ evidence/report | 报告(md/json/html,客户版/蓝队版)+ 证据包 + 门禁结论 |
| 留存 | weekly --archive → backup --keep 7 → aggregate | 周报、备份、跨会话聚合(只读) |
| 对外 | gate-check.mjs(外部门禁)→ CI-INTEGRATION.md | 你的流水线可直接用 |

判断顺序:告警 → 油表 → 漂移;值班一屏 = watch(内置油表),跨战役 = watch --all。

规格与架构决策(本仓库为唯一真源)

- 规格(v1.4):docs/WARROOM-FRAMEWORK.md
- ADR-001 权限与执行边界(rev1):docs/adr/ADR-001-permission-execution-boundary.md
- ADR-002 数据与证据契约(rev2):docs/adr/ADR-002-data-evidence-contract.md
- ADR-003 Adapter 生命周期(rev2):docs/adr/ADR-003-adapter-lifecycle.md
- ADR-004 v0.2 边界与验收:docs/adr/ADR-004-v0.2-scope.md
- ADR-006 执行层能力面(八项动作全实装 + 显式证据协议):docs/adr/ADR-006-executor-capability-surface.md
- ADR-007 批准与动作绑定(批准指纹 + 原子单次消费 + 授权手段校验):docs/adr/ADR-007-approval-action-binding.md
- ADR-008 证据来源与资源清单真实性(目标文本不得成为事实 + 后台进程进清单):docs/adr/ADR-008-evidence-provenance-and-resource-manifest.md
- ADR-009 终态与资源收口(完成不掩盖活资源;终态取消仍必须真的停 + 逐项证实):docs/adr/ADR-009-terminal-state-and-resource-settlement.md
- 冻结快照:docs/adr/frozen/
- 快速开始(真实演练输出):docs/QUICKSTART.md
- 工具清单(自动生成):docs/TOOLS.md
- 桥协议: docs/DSH-BRIDGE-PROTOCOL.md | 预设挂载:docs/PRESET.md | 备份恢复:docs/BACKUP.md
- 合并审查记录:docs/MERGE-REVIEW-2026-10-02.md

治理:ADR 一经 Accepted 即不可变,修正以新 rev 重写并留修订记录;规格/doctrine 改动走 PR + RFC。
贡献流程、六闸门槛、写作用域与外部 PR 审查方式见 CONTRIBUTING.md(含 CODEOWNERS)。

快速开始(CLI,不依赖 DSH)

node bin/warroom.mjs engage --target 10.0.0.0/24 --rhythm open # 开工指令即授权,冻结授权对象
node bin/warroom.mjs exec --engagement eng_... --command-id c1 --target 10.0.0.5 --class active
node bin/warroom.mjs status --engagement eng_... --task wt_...
node bin/warroom.mjs cancel --engagement eng_... --task wt_...
node bin/warroom.mjs report --engagement eng_...
node bin/warroom.mjs secret put --plaintext '...' --label ssh-pw # 明文只进加密库
node bin/warroom.mjs jump import --id jh-1 --addr-v4 203.0.113.9

全部子命令支持 --json;默认 home 为 $WARROOM_HOME 或 ./.warroom。

包结构

| 包 | 平面 | 内容 |
| packages/shared-types | 共同契约 | 状态机与迁移表、错误码、四元组/契约/回执校验 |
| packages/warroom-core | host | 事实库(fact.db/global.db)、门闸 broker、跳板池、秘密库、报告、adapter(fake / redteam-mode / DSH 桥) |
| packages/warroom-tools | agent | 36 个 warroom_ 工具定义(允许清单制的唯一副作用入口) |
| packages/warroom-plugin | DSH 插件 | host 服务骨架 + warroom_* 工具包装(挂载层入口) |
| presets/ | 预设 | 三角色(commander/recon/chain)+ 允许清单 |

测试与四闸

npm run ci # 六道闸一次跑完(推荐;验收套件 884 例)
node scripts/executor-drill.mjs # 执行层落地演练(fake / --mode bridge)
node scripts/ci.mjs --quiet # 只看汇总(别用 | tail,管道会吞退出码)
node --test # 只跑验收套件
node scripts/validate-tool-schemas.mjs # 工具 schema(DSH 挂载硬要求)
node scripts/check-preset.mjs # 预设允许清单闭合
node scripts/fault-matrix.mjs # 故障矩阵 21 场景(与 docs/FAULT-MATRIX.md / SCENARIOS 同源)
node scripts/self-review.mjs # 自审:秘密/链接/验收引用/代码卫生

数据位置

$WARROOM_HOME/engagements/<engagement_id>/fact.db(战役事实)+ $WARROOM_HOME/global.db (跳板/租约/op_log/命令队列/秘密)+ $WARROOM_HOME/secrets/(密钥,700/600,不随备份走)。
预览分享卡片长什么样 ↓86cloudyun-afk/dsh-gungnir
分享 · DeepSeek Harness Hub
86cloudyun-afk/dsh-gungnir

GUNGNIR - DSH 红队战役指挥框架:攻击路径合成的工程化。事实库+门闸+跳板池,执行层可插拔。编排层,不含漏洞利用代码;仅限授权测试。

回到顶部