VJakoby/pragma-workbench

GitHub: VJakoby/pragma-workbench

PRAGMA 是一款专为渗透测试项目和 CTF 竞赛设计的本地操作工作台,将结构化笔记、知识库搜索与证据捕获整合在同一视图中,解决渗透测试过程中笔记散落、上下文频繁切换的问题。

Stars: 1 | Forks: 0

PRAGMA Logo
**PRAGMA** 是一款专为渗透测试项目和 CTF 构建的操作工作台应用——集成本地与在线 KB(知识库)并支持项目进行时的实时笔记记录,完全在本地运行。 其核心是:一个围绕会话和目标组织的、专注的 Markdown 编辑器,带有右侧上下文面板,可在不影响你工作流的情况下呈现你的 KB、战术和搜索结果。证据和战利品的捕获是首要功能,而非后续的强行附加。 ## ⚠️ 注意事项 PRAGMA 是一款用于安全测试的文档和工作流工具。 它不直接与目标交互,但仅限于在经过授权的环境中使用,例如专业项目、实验室环境和 CTF 平台。 你有责任确保你的工作符合适用的法律法规和交战规则。 ## 🚩 解决的问题 渗透测试工作需要专注,但现有工具并不支持这一点。笔记散落在一处,发现位于另一处,方法参考则在完全不同的地方。通用编辑器没有“项目”的概念。报告平台是为输出而构建的,而非为过程。 PRAGMA 将所有内容保持在同一视图中——结构化足以发挥作用,本地化足以赢得信任。 ## ❌ 它不是什么 - **不是报告工具** —— 笔记仅用于操作目的,只是草稿而非最终交付物 - **不是团队平台** —— 单操作员,设计上本地优先 - **不是漏洞利用框架** —— 它不会对你的目标发起攻击 - **不依赖云端** —— 所有内容都在你的机器上本地运行,不会发生任何数据外传 ## ✅ 它是什么 - **本地 Web 应用** —— PRAGMA 完全在你的机器上运行,结合了结构化笔记与可搜索的知识库 - **工作流工作台** —— 旨在支持渗透测试的自然流程,从初始访问到后渗透及发现,全程保持专注不中断 - **知识集成界面** —— 内置本地 KB 搜索,可选集成 ENGRAM,以便在应用内搜索索引的外部源 ## 截图 以下是一些可快速展示该平台外观的截图。它们有助于展示工作流的形态,但真正的价值在于直接使用它,并体验在实际工作中各个视图是如何协同运作的。
PRAGMA Main UI PRAGMA Sessions PRAGMA Encryption
Main View — central workbench for active engagement notes and context Sessions — organize multiple engagements within a single workbench Encryption — client-side encrypted storage for workbench data
PRAGMA Command Palette PRAGMA KB Cards PRAGMA Indexed Search
Command Palette — quick-open search across notes, KB, tactics, and commands KB Cards — browse services, tactics, and KB sections in a card layout Indexed Search — ENGRAM-powered results inside the workbench
## 👤 适用人群 PRAGMA 之所以存在,是因为这正是我自己想要的工作流。 它无意解决其他所有人的笔记、报告或项目管理问题。它是坚定的、本地优先的,并且是围绕我在评估期间偏好的工作方式构建的。如果这符合你的操作方式,请使用它。如果不符,则不用。 这是有意为之。目标不是成为通用工具。目标是提供结构更好的工作流。 ## 🗂️ 工作区模型 PRAGMA 在结构上分为三个层级: - **工作台** —— 你机器上的本地工作区。一个工作台可以包含多个会话。 - **会话** —— 一个项目、工程、机器集或工作上下文。一个会话可以包含一个或多个目标。 - **目标** —— 会话内具体的 IP、域名或标记的主机条目。 这意味着 PRAGMA 不会强制规定单一工作流: - 一个工作台可以容纳多个并行的项目 - 一个会话可以代表一台单独的机器 - 一个会话也可以代表包含多个目标的更广泛的项目 标题和笔记内容保持灵活,同时通过会话分配和目标分配提供明确的结构。 ## 🎯 焦点模型 PRAGMA 围绕一个简单的交互规则构建: - **项目笔记是主要的工作区** - **知识库、战术、搜索和快速日志是辅助工具** - 辅助视图应帮助你检索上下文,而不是不必要地将你从笔记记录流中拉出 在实践中,这意味着应用程序对保持操作性有着坚定的立场: - 笔记是当前项目上下文存在的地方 - 服务、战术和索引的 KB 内容是为了支持当前的笔记/工作,而不是取代它 - 在可能的情况下,辅助内容应在当前笔记旁边打开,而不是强制进行完全的上下文切换 有关在项目期间如何使用该应用程序的实际操作演示,请参阅 [USAGE.md](./USAGE.md)。 ## 🧱 技术栈 | 区域 | 技术 | 备注 | |---|---|---| | 运行环境 | Node.js | 应用服务器和本地运行时 | | 后端 | Express | API 路由、静态资源及 EJS 视图服务 | | 模板 | EJS | 服务器端渲染的应用外壳和局部视图 | | 前端 | Vanilla JavaScript | 位于 `public/app/` 下的模块化浏览器脚本 | | 编辑器 | CodeMirror 6 | 用于笔记和 KB 内容的 Markdown 编辑 | | Markdown 渲染 | `marked` | KB 及服务器端 Markdown 渲染 | | 搜索 | Fuse.js | 本地模糊搜索和 KB 相关性评分 | | 加密 | Web Crypto API | 客户端 AES-256-GCM + PBKDF2-SHA-512 | | 存储 | 基于文件的 JSON + Markdown | 磁盘上的会话/工作台状态,KB 为 `.md` 文件 | | 容器化 | Docker / Docker Compose | 可选的本地容器运行时 | ## 🏷️ 功能 **会话和目标** - 带有多目标跟踪(IP、域名、标签)的命名会话 - 会话级别的攻击者 IP 字段,用于回调/反向 shell 样式的占位符 - 活动目标在复制时自动注入到 KB 和战术中的所有代码块 - 会话状态跟踪(Active / Paused / Complete),带有时间线视图 - 将会话导出/导入为 JSON 以实现可移植性;会话导出还支持结构化的 Markdown 捆绑包和统一的 Markdown 导出 **加密** - 完整的工作台加密(AES-256-GCM,PBKDF2-SHA-512,600k 次迭代)——仅在客户端进行 - 服务器存储密文;密码永远不会触及磁盘、localStorage 或网络 - 工作台文件是可移植的——迁移到另一台机器只需复制文件 **笔记** - 带有结构化 Markdown 模板的类型化笔记——见下方的 [Note Templates](#-note-templates) - 笔记模板支持按模板区分的变体,因此一个模板类型可以暴露多个预定义的工作流或笔记布局 **快速日志 (`Ctrl+L`)** 可从顶部栏访问的持久性会话内捕获工具: - **端口** —— 手动记录开放端口和服务,或通过粘贴来自 `nmap`、`rustscan` 或 `masscan` 的原始输出来记录。自动解析为结构化行(端口、协议、服务、版本、备注) - **路径** —— 记录来自目录和虚拟主机枚举的 Web 路径。接受来自 `gobuster`、`ffuf` 和 `dirbuster` 的原始输出,或带有可选 HTTP 状态代码的手动输入 - **战利品** —— 记录在项目期间发现的凭证、哈希、token 和密钥。每个条目都有一个类型标签(Cleartext / Hash / Token / Key / Other)、一个主机字段(从活动目标自动填充)和一个上下文备注。凭证支持点击复制 端口、路径和战利品与会话一起持久保存。端口和凭证还可以同步到结构化笔记中,如 `Network Enumeration` 和 `Credentials`,从而减少重复捕获。 **待办** 一个会话级别的复选框列表,用于记录下一步操作,与会话一同保存,以便未完成的任务在重新加载和稍后重新打开时仍然存在。 **证据** PRAGMA 还包含一个专用的证据工作流,用于直接从会话笔记中保留证明,而不是将其重新输入到第二个表格中。 - **选择驱动的捕获** —— 在笔记编辑器中选择命令、行或 Markdown 块,然后使用 **Add as Evidence** - **类型化证据条目** —— 支持的类别包括 Enumeration、Initial Access、Execution、Persistence、Privilege Escalation、Credential Access、Discovery、Lateral Movement、Pivoting、Collection、Exfiltration、Cleanup 和 Proof - **源链接跟踪** —— 每个证据条目都保持链接到原始笔记,并支持跳转回确切的标记源块 - **可选的战利品创建** —— 在添加证据时,你还可以从相同的选区创建一个战利品条目,并选择性地将明文/哈希材料同步到 `Credentials` 笔记中 - **证据管理** —— 证据面板支持按类型和目标进行过滤、内联编辑和取消标记,同时保留原始笔记内容 - **整洁的 Markdown 导出** —— 证据标记在笔记内部使用,但会从导出的 Markdown/会话导出中剥离,从而使生成的文件保持可读性 这使得证据成为从笔记中保留证明的主要工作流,而战利品仍然是凭证、token、密钥及类似材料的专用结构化存储库。 **知识库和战术** - 索引来自 `knowledge_base/` 的本地 `.md` 文件,具有三个不同的呈现面:`knowledge_base/services/` 提供给 Services 视图,`knowledge_base/tactics/` 提供给 Tactics 视图,其他顶级文件夹成为独立的 KB 分区 - 代码库随附的真实 KB 语料库。每位用户需将 PRAGMA 指向自己的本地知识库内容 - 可在 UI 中编辑,并带有实时磁盘回写和更改时自动重新索引 - 每个代码块和内联反引号跨度都支持点击复制,并注入目标 IP - 全文搜索具有加权相关性评分、模糊匹配和按结果划分的匹配类型(exact / fuzzy / partial) - 本地/远程范围过滤器、源过滤器和结果中的查询词片段高亮显示 - 如果 ENGRAM 处于离线状态,会优雅降级,并提供一键可达性检查 - 本地 KB 预览支持在同一类别/文件夹下的相邻笔记之间快速切换 **工作台可靠性** - 原子写入——每次保存首先写入临时文件,然后重命名到原位,防止因崩溃或断电导致的数据损坏 - 滚动备份——自动保留工作台的最后 5 个版本于 `sessions/backup/` 中 - 自动回退恢复——如果实时工作台文件损坏或丢失,PRAGMA 会静默加载最近的有效备份 - 启动完整性检查——在每次启动时,PRAGMA 会记录工作台状态、备份计数以及检测到的任何问题 **界面** - 命令面板 (`⌘K`),所有主要操作的键盘快捷键,深色/浅色模式 - 快速日志 (`Ctrl+L`) —— 见上文 ## 📝 笔记模板 PRAGMA 支持内置的笔记模板。每个模板打开时都带有预先构建的 Markdown 正文、相关的默认标签和标题前缀,以保持跨项目笔记的一致性。 一些自动化依赖于特定模板的存在。例如,快速日志端口/路径同步会创建并更新一个 `network-enumeration` 笔记,而 战利品 → 凭证 同步需要一个 `credentials` 笔记。如果你从 `note-templates.json` 中删除这些模板,自动创建的文档将不再出现。模板可以非常简单;它们只需要匹配的表格标题,以便同步可以找到它们。 模板还可以定义**变体**。单一模板类型可以在新建笔记流程中暴露多个可选择的版本,每个版本都有自己的标题前缀、默认标签和 Markdown 正文。当一个笔记类别需要多种操作模式时,这非常有用,例如: - 带有独立 `Exam Target`、`Practice` 和 `AD Workflow` 变体的 OSCP 模板 - 带有用于常规凭证与 AD 凭证不同布局的凭证模板 - 带有针对 Web、网络或云侦察不同结构的侦察模板 | 模板 | 图标 | 默认标签 | 用途 | |---|---|---|---| | **General** | 📋 | — | 带有 Overview / Notes / References 部分的自由格式笔记 | | **Credentials** | 🔑 | `creds` | 凭证表、密码喷洒笔记、有效会话 | | **Recon** | 🔭 | `recon` | 目标概览、开放端口、Web 端点、DNS、用户 | | **Network Enumeration** | 🌐 | `network` | 按目标划分的目标概览及同步的开放端口和服务 | | **PrivEsc** | ⬆ | `privesc` | 系统信息、枚举清单、尝试的向量、提权路径 | | **Loot** | 💰 | `loot` | 窃取的文件、发现的凭证、Flag/证明 | | **Exploit** | 💥 | `exploit` | CVE/CVSS 元数据、payload、步骤、结果、清理 | ### 自定义模板 (`note-templates.json`) 你可以通过编辑 `server.js` 旁边的 `note-templates.json` 来扩展或完全替换内置模板。PRAGMA 在应用的 `Configuration -> Note Templates` 下直接暴露了这一点,并在启动时加载同一文件作为模板源。 **Schema:** ``` { "templates": [ { "id": "tunneling", "label": "Tunneling", "icon": "🕳️", "title_prefix": "Tunnel", "default_tags": ["tunneling", "pivot"], "body_lines": [ "## Setup", "", "## Listeners", "", "## Routes", "" ], "variants": [ { "id": "ligolo", "label": "Ligolo", "title_prefix": "Tunnel", "default_tags": ["tunneling", "pivot", "ligolo"], "body_lines": [ "## Listener", "", "## Agent", "" ] } ] } ] } ``` | 字段 | 必填 | 描述 | |---|---|---| | `id` | ✅ | 唯一标识符,小写,无空格 | | `label` ✅ | 在模板选择器中显示的名称 | | `icon` | — | 在笔记类型徽章上显示的 Emoji | | `title_prefix` | — | 创建时附加在笔记标题前 | | `default_tags` | — | 自动应用于笔记的标签数组 | | `body` | — | 作为单个 JSON 字符串的笔记正文初始 Markdown 内容 | | `body_lines` | — | 作为字符串数组的多行模板正文;加载时以 `\n` 连接 | | `variants` | — | 可选模板变体数组。每个变体可以定义自己的 `id`、`label`、`icon`、`title_prefix`、`default_tags`、`body` 或 `body_lines` | 使用 `body` 或 `body_lines`。对于较长的 Markdown 模板,`body_lines` 更易于阅读和维护。 如果存在 `variants`,PRAGMA 会在笔记创建流程中显示第二个选择步骤。选定的变体将成为笔记的起始布局,并可以覆盖父模板的默认值。 自定义模板在选取器中带有紫色边框和 **Custom** 标题,以区别于内置模板。如果文件缺失、格式错误或为空,PRAGMA 会静默回退到内置模板。 ### 笔记中的图像 笔记还支持粘贴和拖放截图/图像。 - 使用 `Ctrl+V` 将复制的截图直接粘贴到编辑器中 - 将本地图像文件拖动到编辑器中 - PRAGMA 将图像存储为笔记附件,并自动插入标准 Markdown 图像语法: ``` ![image](/api/notes/attachments//) ``` 这使得图像处理与正常的 Markdown 预览/渲染保持兼容,同时仍使用 PRAGMA 的笔记范围附件存储。 ## 🔐 安全性 PRAGMA 是一款单操作员、localhost 优先的工具。它专为在受控机器上使用而设计,理想情况下是一台专用的渗透测试虚拟机。 高级安全立场: - 默认绑定到 `127.0.0.1` - 支持使用客户端 AES-256-GCM 的加密工作台存储 - 将导入的/会话的/Markdown 内容视为不受信任的输入 - 不适用于敌对的面向互联网的多用户部署 有关实际的威胁模型、缓解措施、已验证的检查及剩余的审查区域,请参阅 [SECURITY.md](./SECURITY.md)。 ## 🎯 目标注入参考 当会话设置了活动目标时,PRAGMA 会自动将 KB 文档和战术中的占位符变量替换为目标 IP 和域——在渲染时以黄色高亮显示,并在复制时代码块中注入。 使用下面任何支持的占位符样式编写你的 KB 文档。 ### IP / 主机 → 活动目标 IP | 样式 | 支持的占位符 | |---|---| | 尖括号 | `` `` `` `` `` `` `` `` `` `` | | Shell 变量 | `$IP` `$RHOST` `$TARGET` `$TARGET_IP` `$HOST` | | 花括号 | `{IP}` `{ip}` `{RHOST}` `{rhost}` `{TARGET}` `{HOST}` `{host}` | | 双花括号 | `{{ip}}` `{{IP}}` `{{target}}` `{{rhost}}` `{{host}}` `{{HOST}}` | | 裸词 | `TARGET_IP` `TARGET_IP_ADDRESS` `RHOST` `TARGET` `MACHINE_IP` | | HTB 风格字面量 | `10.10.10.X` `10.10.X.X` | | 仅限反引号范围 | \`IP\` \`HOST\` —— **仅在内联代码中**注入,不在纯文本中 | ### 域名 / FQDN → 活动目标域名 | 样式 | 支持的占位符 | |---|---| | 尖括号 | `` `` `` `` `` `` `` `` | | Shell 变量 | `$DOMAIN` `$FQDN` `$DC` | | 花括号 | `{DOMAIN}` `{domain}` `{FQDN}` | | 双花括号 | `{{domain}}` | | 裸词 | `TARGET_DOMAIN` `DOMAIN` `WORKGROUP` | ## 可选模块 PRAGMA 可独立运行。可选模块扩展了工作台,但核心的笔记/会话工作流并不需要它们。 ### ENGRAM // 索引搜索 ENGRAM 是一个可选的伴随服务,用于支持 PRAGMA 的 KB 搜索。启用时,PRAGMA 查询 ENGRAM 以获取索引结果;禁用时,该模块保持离线状态,搜索仅回退到本地内容。 - 仓库:[ENGRAM // Indexed Search](https://github.com/VJakoby/engram) - 用途:索引并提供 KB 内容,以便在 PRAGMA 内进行快速、排名的搜索结果展示 - 集成模型:ENGRAM 作为其自己的本地服务运行,PRAGMA 通过 `SEARCH_URL` 指向它 将 ENGRAM 作为独立容器启动: ``` cd ~/engram docker compose build --no-cache docker compose up -d ``` 验证其是否可达: ``` curl http://127.0.0.1:3002/healthz ``` 在 PRAGMA 中启用它: ``` SEARCH_URL=http://127.0.0.1:3002 ``` 然后重启 PRAGMA。如果 ENGRAM 处于在线状态,`KB Search` 将显示索引结果。 ### PRAGMA // 工具箱 PRAGMA // Toolbox 是一个可选的伴随服务,可协助执行选定的被动侦察和主动枚举工作流。启用时,它作为 `Toolbox` 模块暴露在 PRAGMA 内部。 - 仓库:[PRAGMA // Toolbox](https://github.com/VJakoby/matrix-toolbox) - 用途:提供 API 支持的辅助工作流,如被动侦察、Nmap 枚举和 Masscan 枚举,而无需将 PRAGMA 本身转变为扫描平台 - 集成模型:PRAGMA // Toolbox 作为其自己的本地服务运行,PRAGMA 通过可选的 Toolbox 代理路由与其通信 详细的 PRAGMA // Toolbox 设置如下方快速启动部分所示。 ## 🛠️ 需求 - Node.js 20+ - **可选:** - Docker 和 `docker compose` 有关完整的项目目录结构、卷挂载以及如何通过共享的 Docker 网络使用外部 ENGRAM 实例运行 PRAGMA,请参阅 [DOCKER.md](./DOCKER.md)。 ## 🚀 快速开始 有关完整的 Docker 说明,请参阅 [DOCKER.md](./DOCKER.md)。 推荐的 Docker 工作流: ``` # 1. 创建本地 env 文件 cp .example.env .env # 2. 编辑 .env 并将 PRAGMA_KB_PATH 指向您的本地知识库 # (如果您想将运行时数据存放到其他位置,请同时修改 PRAGMA_SESSIONS_PATH) # 3. 选择是否启用 PDF 导出 # PDF_EXPORT_ENABLED=true -> 启用 PDF 导出并将 Chromium 包含在镜像中 # PDF_EXPORT_ENABLED=false -> 禁用 PDF 导出并在重新构建时省略 Chromium # 4. 构建并启动 docker compose up -d --build # 5. 访问地址 http://localhost:3000 ``` ### PRAGMA // 工具箱 PRAGMA // Toolbox 是一个可选的伴随服务,可协助执行选定的被动侦察和主动枚举工作流。启用时,它作为 `Toolbox` 模块暴露在 PRAGMA 内部。 - 仓库:[PRAGMA // Toolbox](https://github.com/VJakoby/matrix-toolbox) - 用途:提供 API 支持的辅助工作流,如被动侦察、Nmap 枚举和 Masscan 枚举,而无需将 PRAGMA 本身转变为扫描平台 - 集成模型:PRAGMA // Toolbox 作为其自己的本地服务运行,PRAGMA 通过可选的 Toolbox 代理路由与其通信 将 PRAGMA // Toolbox 作为独立容器启动: ``` cd ~/matrix-toolbox docker compose build --no-cache docker compose up -d ``` 验证其是否可达: ``` curl http://127.0.0.1:3003/healthz ``` 在 PRAGMA 中启用它: ``` TOOLBOX_ENABLED=true TOOLBOX_URL=http://127.0.0.1:3003 ``` 或使用备用 URL: ``` TOOLBOX_ENABLED=true TOOLBOX_URLS=http://matrix:3003,http://host.docker.internal:3003,http://127.0.0.1:3003 ``` 然后重启 PRAGMA。如果启用,`Toolbox` 将出现在侧边栏。如果禁用,该模块将完全隐藏。 兼容性说明: - `TOOLBOX_*` 现在是首选的配置接口 - 旧版的 `MATRIX_*` 变量仍被接受,作为现有设置的备用方案 简而言之: 1. 将 PRAGMA // Toolbox 作为独立的服务/容器构建并启动 2. 将 PRAGMA 指向 PRAGMA // Toolbox API 3. 启用 `TOOLBOX_ENABLED=true` 4. 重启 PRAGMA 常见的 `.env` 值包括: - `TOOLBOX_ENABLED` - `TOOLBOX_URL` - `TOOLBOX_URLS` - `PRAGMA_KB_PATH` - `PRAGMA_SESSIONS_PATH` - `PDF_EXPORT_ENABLED` - `PRAGMA_UID` - `PRAGMA_GID` - `SEARCH_URL` `PDF_EXPORT_ENABLED` 现在是唯一的与 PDF 相关的设置: - `true` 启用 PDF 导出并将 Chromium 构建到映像中 - `false` 禁用 PDF 导出,并在重新构建后从映像中省略 Chromium 为什么这是一个单一设置: - 大多数用户不需要单独控制“PDF 功能开/关”和“是否安装 Chromium” - 如果禁用 PDF 导出,安装 Chromium 就是不必要的映像臃肿 - 单一开关使选择与用户的实际需求保持一致:PDF 支持或更小的映像 实际的大小影响: - `PDF_EXPORT_ENABLED=true`:映像大小约 `941MB` - `PDF_EXPORT_ENABLED=false`:映像大小约 `290MB` 如果你更改了 `PDF_EXPORT_ENABLED`,请重新构建映像。 如果你在主机上编辑了 `note-templates.json`,并希望在不重新构建的情况下在 Docker 内部反映这些更改,请按照 [DOCKER.md](./DOCKER.md) 中的说明为该文件添加绑定挂载。 ### 使用 Node.js 手动运行 ``` # 1. 安装依赖 npm install # 2. 启动服务器 # npm start 现在会自动读取 `.env`,因此对于本地运行,PDF_EXPORT_ENABLED # 的行为也与 Docker Compose 保持一致。 npm start # 3. 在浏览器中打开 http://localhost:3000 ``` ## 前端布局 实时 UI 由 [views/app.ejs](./views/app.ejs) 渲染。较旧的 [public/app.html](./public/app.html) 作为静态镜像/参考页保留,但应用程序实际提供服务的是服务器端渲染的 EJS 视图。 前端现在已拆分为 [public/app](./public/app) 下的较小浏览器模块: - `shell.js` —— 主题、侧边栏状态、应用引导、全局快捷键、视图切换 - `content-panel.js` —— KB/战术预览渲染、复制助手、源预览面板 - `editor-theme.js` —— 共享编辑器状态和语法主题处理 - `note-editor.js` —— 笔记编辑器初始化和预览布局行为 - `kb-editor.js` —— 就地 KB/战术编辑逻辑 - `workbench.js` —— 工作台/会话存储、加密流程、模板加载 - `notes.js` —— 笔记 CRUD、过滤器、标签、目标、导出 - `quick-log.js` —— 端口、路径、战利品和顶部栏快速日志弹出窗口 - `timeline.js` —— 时间线视图、按时间顺序渲染、Toast 助手、共享时间线助手 - `kb.js`、`search.js`、`targets.js` —— KB 浏览、搜索集成、目标管理 - `app.js` —— 剩余的应用协调逻辑、命令面板和模态助手 这意味着大多数新的前端工作应针对这些专注的模块之一,而不是让 `app.js` 重新膨胀成一个巨石应用。 ## 许可证和声明 PRAGMA Workbench 在 AGPL-3.0-or-later 下获得许可。第三方许可证声明列在 [THIRD_PARTY_NOTICES.md](./THIRD_PARTY_NOTICES.md) 中。 ## 🛣️ 路线图 项目的方向、明确的非目标以及功能边界决策在路线图中单独跟踪。 参见 [ROADMAP.md](./ROADMAP.md)。 ## 🤝 贡献 如果你发现了新的想法、功能提议、Bug 或其他问题,非常欢迎提交 Issue。带有修复或改进的 Pull Request 同样非常受欢迎。 由 VJakoby + 🤖 创建 | 在 AGPL-3.0-or-later 下许可 | [查看 AI 与架构披露](./AI-DISCLOSURE.md)
标签:Markdown编辑器, MITM代理, OPA, Ruby, TGT, Windows内核, 单机版, 安全工程师, 安全测试, 工作流, 工具软件, 报告辅助, 攻击性安全, 攻防演练, 本地应用, 漏洞分析, 白帽子, 知识库, 离线, 笔记, 网络安全, 自定义脚本, 请求拦截, 路径探测, 隐私保护, 靶场