CyberChef 配置与模块体系详解
CyberChef 配置与模块体系:无服务端配置文件的三层配置模型、浏览器端选项实测、16 大分类 539 个 Operation 挂载点详解、Magic 识别机制与官方测试 17/17 实测、构建期定制与 Node API。
CyberChef 配置与模块体系详解
目标:讲透 CyberChef 的「配置」与「模块/Operation」体系——它没有传统服务端配置文件,本文按其真实形态展开:浏览器端运行时选项、源码 src/core/config 构建期配置、16 大功能分类共 539 个 Operation 挂载点的分类详解、Magic 自动识别机制与实测,以及基于官方 Node.js 模块的程序化调用与 REPL。全部分类清单取自 v11.5.0 源码 Categories.json,配置键取自 v11.5.0 构建产物 main.js 与 package.json 实测,操作行为经官方 Node API(与 Web 界面同一套实现)逐条实测。
一、环境信息
| 项目 | 值 |
|---|---|
| 操作系统 | Ubuntu 22.04(x86_64) |
| CyberChef 版本 | v11.5.0(官方最新稳定版,2026-09-18 发布) |
| 静态发布包 | CyberChef_8cd426dd4f40f1423912d5fad91b578a86a65112.zip(解压目录 /var/www/cyberchef,80 MB) |
| Node.js(程序化形态) | v22.23.4 + cyberchef npm 包 11.5.0(npm install cyberchef) |
| 源码取证对象 | v11.5.0 tag 的 src/core/config/Categories.json、package.json |
| 分类清单口径 | 16 个功能分类、539 个 Operation 挂载点(Categories.json 实查) |
⚠️ 网络说明:npm 安装官方 cyberchef 包时直连 registry 超时,经代理完成(
npm config set proxy/https-proxy后安装成功);分类与构建脚本取自 GitHub 官方源码仓库 v11.5.0 tag。部署过程本身见《CyberChef 安装与初始化实战》。
二、前置条件
- 已完成一份可访问的 CyberChef 部署(自托管见《CyberChef 安装与初始化实战》,或直接使用官方在线实例 gchq.github.io/CyberChef);
- 程序化调用形态需 Node.js ≥ 17(官方 Wiki 口径),本文实测环境为 Node v22.23.4;
- 了解 Operation / Recipe / Dish 三个核心名词:Operation 是单个数据处理步骤(如 From Base64),Recipe 是一串按序执行的 Operation 列表,Dish 是数据在链路中流转的载体(输入 Dish 经每个 Operation 变换后传给下一个)。
三、配置体系总览:为什么「没有配置文件」
CyberChef 与常规服务端软件最大的认知差异是:它没有进程、没有数据库、没有用户体系,因此不存在 cyberchef.conf 这类服务端配置文件。它的「配置」分布在三层,各自生效时机不同:
| 层 | 位置 | 生效时机 | 典型内容 |
|---|---|---|---|
| Web 服务器层 | Nginx 站点配置(如 /etc/nginx/sites-available/cyberchef) | 部署期,改后 reload | 端口、根目录、gzip_static、缓存、访问控制 |
| 浏览器端运行时层 | 界面 Options(齿轮)面板,持久化在浏览器 localStorage | 用户使用期,即时生效 | 主题、自动烘焙、日志级别、分类计数显示等 |
| 构建期层 | 源码 src/core/config/(Categories.json、Operations.json 等) | npm run build 时固化进产物 | 操作注册与分类、界面文案、默认环境参数 |
理解三层分工后就能回答「想改 X 该动哪里」:想换端口/加 HTTPS → 改 Web 服务器层;想改界面行为偏好 → 浏览器 Options;想裁剪操作、改默认参数、做内部分发定制 → 构建期层(第七章)。
💡 技术拓展:应用配置的常见加载模式有「配置文件(启动读取)」「环境变量(进程注入)」「数据库(运行时可变)」「前端本地存储(每浏览器独立)」四类。CyberChef 作为纯前端应用,运行时配置只能落在最后一种——这决定了它的配置是每用户、每浏览器独立的,无法由管理员统一下发;需要全员统一偏好的团队只能走构建期定制或默认值改造。
四、浏览器端运行时配置详解
浏览器端选项通过界面右上角 Options(齿轮图标)面板调整,保存在浏览器 localStorage,换浏览器/换电脑不跟随。以下键名与默认值全部从 v11.5.0 构建产物 assets/main.js 中实查取证(源码压缩后形态,!0 即 true):
| 配置键 | 实测产物证据 | 含义 |
|---|---|---|
| theme | theme:"classic" | 界面主题,默认 classic(另有 dark 等变体) |
| autoBake | autoBake_ 系列代码(Auto-baking 日志、输入变化触发 bakeAll) | 自动烘焙开关:输入或 Recipe 变化即自动重算输出,默认开启 |
| updateUrl | updateUrl:!0 | 把当前 Recipe 与输入编码进 URL hash,默认开启(分享能力的底层开关) |
| imagePreview | imagePreview:!0 | 输入/输出面板的图片预览,默认开启 |
| showCatCount | main.js 实查存在 | 操作分类旁显示操作数量 |
| showHighlighter | main.js 实查存在 | 输入/输出语法高亮 |
| logLevel | main.js 实查存在 | 前端调试日志级别 |
两处常用开关的实操含义:
- Auto Bake(自动烘焙):默认开启,输入一变即刻全链重算,适合中小数据;粘贴大文件或跑耗时操作(如爆破、大哈希集)时建议点掉 Auto Bake 改手动 Bake,避免界面假死。v11.5.0 的安全修复(CHANGELOG:SECURITY: prevent autobake on loaded recipe if any operation has manualBake set)正是针对「带手动烘焙标记的操作被自动执行」的边界加固。
- updateUrl(URL 状态化):开启后当前输入与 Recipe 都编码在页面 URL 的 hash 段里(形如
#input=…&recipe=…&args=…),复制地址栏即可把整条处理链发给同事,对方打开即复现——这是 CyberChef 分享协作的核心机制,也意味着 URL 本身可能携带敏感数据,发链接前要过一遍数据分级。
五、Operation 分类体系详解
v11.5.0 源码 src/core/config/Categories.json 是操作分类的权威清单:16 个功能分类、合计 539 个挂载点(同一操作可挂多个分类,去重后实际操作数约 500 个)。逐类给出定位与代表操作(清单为 Categories.json 实查):
| 分类 | 挂载数 | 定位与代表操作 |
|---|---|---|
| Data format(数据格式) | 80 | 各进制/编码表示互转:To/From Hex、To/From Charcode、To/From Decimal、To/From Hexdump、Base32/Base64/Base85、URL Encode、PEM to Hex |
| Encryption / Encoding(加密与编码) | 95 | 对称与古典加密:AES/Blowfish/DES/Triple DES 加解密、RC4、ChaCha20、ROT13、ROT47、Vigenère、XOR Brute Force |
| Public Key(公钥体系) | 32 | 证书与密钥解析:Parse X.509 certificate、PEM to JWK(v11.5.0 新增 Parse PGP Key)、Parse ASN.1 hex string、Object Identifier 互转 |
| Arithmetic / Logic(算术与逻辑) | 31 | 位运算与集合运算:XOR、Bit shift、Rotate right、Set Union/Intersection/Difference、Cartesian Product |
| Networking(网络) | 38 | 报文与网络数据解析:HTTP request、DNS over HTTPS、Strip HTTP headers、Parse IP range、Parse IPv6 address、Parse User Agent、Parse Ethernet frame |
| Language(语言) | 7 | 文本语言层处理:Encode text、Unicode Text Format、Remove Diacritics、Convert to NATO alphabet |
| Utils(通用工具) | 52 | 文本级杂项:Diff、Remove whitespace、Remove null bytes、To Upper case、Head/Tail、Shuffle |
| Date / Time(日期时间) | 10 | From/To UNIX Timestamp、Parse DateTime、Windows Filetime 互转、DateTime Delta、Extract dates |
| Extractors(提取器) | 20 | 从大文本中抽信息:Strings、Extract IP addresses/URLs/domains/email addresses/MAC addresses/file paths |
| Compression(压缩) | 21 | Gzip/Gunzip、Zip/Unzip、Zlib Deflate/Inflate、Raw Deflate/Inflate、Bzip2(v11.4.0 起新增 XPRESS/MS-XCA 解压) |
| Hashing(哈希) | 50 | MD2/MD4/MD5/MD6、SHA0/1/2/3、CRC 系列校验、Analyse hash(识别哈希类型)、Generate all hashes |
| Code tidy(代码整理) | 30 | JSON/XML/JavaScript Beautify 与 Minify、Syntax highlighter、Generic Code Beautify |
| Forensics(取证) | 12 | Detect File Type、Scan for Embedded Files、Extract Files、YARA Rules、Extract/Remove EXIF |
| Multimedia(多媒体) | 29 | Render Image、Optical Character Recognition(内置 Tesseract)、Play Media、Split Colour Channels、View Bit Plane |
| Other(其他) | 22 | 分析型:Entropy、Frequency distribution、Index of Coincidence、Chi Square、Disassemble x86/ARM |
| Flow control(流程控制) | 10 | Magic、Fork、Subsection、Merge、Register、Label、Jump、Conditional Jump、Return |
三类特别值得展开的机制:
1. Flow control 让 Recipe 具备编程性。 Fork 可把输入按行/字符拆开并行过链(相当于对每行各跑一遍 Recipe),Merge 合并分支,Register/Label/Jump/Conditional Jump 支持「提取某个值存起来 → 满足条件跳转到某标签」的逻辑,Return 提前结束。配合起来,CyberChef 可以表达「逐行解码 → 按值分流 → 分别处理」的批处理逻辑,而不只是单条流水线。
2. 多媒体/取证类操作依赖按需加载模块与 WASM。 操作实现按领域打包在发布包 modules/ 目录(实测 v11.5.0:Encodings.js 2.6 MB、Code.js 2.7 MB、Jq.js 2.6 MB、Shellcode.js 5.6 MB 等),OCR 等能力基于 WebAssembly(assets/tesseract/ 下含 tesseract-core.wasm.js 与 eng.traineddata.gz 语言包)。这就是为什么发布包必须整体解压——删掉 modules/ 下任何文件都会让对应操作在执行时报加载失败。
3. 哈希分类自带「分析」能力。 Analyse hash 会按长度/字符集猜测给定哈希串的类型(MD5/SHA-1/SHA-256 等),Generate all hashes 一次性生成全部算法摘要,配合 Extractors 是日志中定位密码哈希的常用组合。
💡 技术拓展:编码与加密是两回事——编码(Base64/Hex/URL)是表示形式的可逆变换,无密钥、无保密性;加密(AES/ChaCha20)依赖密钥、具备保密性;哈希(MD5/SHA)单向不可逆。CyberChef 把三者放在同一界面常被新手误用,判断口诀:能不靠密钥还原的是编码,需要密钥的是加密,还原不回的是哈希。
六、Magic 自动识别机制与实测
Magic 是 Flow control 分类中的明星操作:对未知输入自动探测「它是什么」,直接给出可执行的解码建议。其工作机制(官方 Wiki 口径):对输入做特征采样——检查文件魔数(magic bytes)、可打印率、熵值、常见编码(Base64/Hex/Gzip 等)的试解成功率、语言检测结果,按置信度排序生成候选,默认探测深度 3 层(Depth 参数可调,另支持 Intensive mode 与已知明文 Crib 参数)。
Magic 属于 Flow control 类操作,Web 界面中以交互列表呈现(每条建议带「应用该操作」按钮),而官方 Node API 的 chef.bake 明确禁止运行 Flow control 类操作,实测报错(Node.js v22.23.4 + cyberchef@11.5.0):
flowControl operations like Magic are not currently allowed in recipes for chef.bake in the Node API
因此 Magic 的权威验证方式是跑官方操作测试套件。v11.5.0 发布的测试集中 Magic 子测试共 17 条,实测(在安装 cyberchef 包的目录下执行,Node v22.23.4):
node --no-warnings --no-deprecation --openssl-legacy-provider magictest.mjs
实测回显(运行器加载官方 tests/operations/tests/Magic.mjs 并复用官方 TestRegister 执行):
Running operation tests...
TOTAL 17
PASSING 17
17 条全部通过。官方测试断言的典型样本(取自官方测试源码,即 Web 界面 Magic 的真实行为):
| 输入 | Magic 实际行为(官方测试断言) |
|---|---|
41 42 43 44 45(Hex 字节串) | 建议配方 From Hex('Space'),识别输出 ABCDE |
| 空/无特征输入 | 提示 Nothing of interest could be detected about the input data. 并建议调整参数 |
| 中文 mojibake 字节串 | 识别出 UTF-8 错位编码并给出修复配方,还原出正确中文 |
生产用法:把 Magic 放在链首做「第一眼判断」,再手工把推荐操作固化成正式 Recipe;多层嵌套样本(如 Base64(Gzip(JSON)))加大 Depth 后可逐层识别。
七、构建期配置与定制(src/core/config)
需要「裁剪操作、预置默认 Recipe、改品牌」的内部分发场景,走源码构建路径。v11.5.0 源码的关键配置位(从官方仓库 v11.5.0 tag 实查):
| 文件 | 作用 |
|---|---|
| src/core/config/Categories.json | 操作分类定义(本文第五章清单的数据源) |
| src/core/config/Operations.json | 全量操作的注册与默认参数 |
| src/core/config/OperationConfig.json | 操作 UI 参数元数据 |
| src/core/config/Categories.json 中的 Favourites | 默认收藏分类(空) |
构建与开发命令(v11.5.0 package.json scripts 实查):
| 命令 | 实际执行 | 用途 |
|---|---|---|
| npm start | npx grunt dev | 开发服务器(热更新调试) |
| npm run build | npx grunt prod | 生产构建(产出与官方 Releases 同构的静态发布包) |
| npm run node | npx grunt node | 构建 Node.js 形态产物 |
| npm run repl | node --no-warnings src/node/repl.mjs | 交互式 REPL(见第八章) |
| npm test | grunt configTests + tests/node + tests/operations | 配置与操作全量测试 |
典型定制流程:fork 仓库 → 改 Categories.json(删减分类/操作)或 Operations.json(改默认参数)→ npm install && npm run build → 用产物替换自托管目录。注意两点:其一,官方产物中 assets/main.js 等文件名带内容指纹,替换后需同步替换整个目录而非单个文件;其二,GPL-3.0-or-later 许可要求二次分发时提供源码,内网使用不分发不受影响。
⚠️ 注意:环境变量方面,CyberChef 的 Web 形态没有运行时环境变量注入机制(纯静态无进程);Node.js 形态下数据经 stdin/参数传入,行为由代码控制。所谓「环境变量定制」在这两个形态都不存在,需走构建期路径。
八、程序化调用与 REPL(Node.js 形态)
官方 npm 包 cyberchef 把全部操作开放给 Node.js,用于脚本化批处理。安装与首个调用(实测环境 Node v22.23.4):
mkdir -p /opt/cyberchef-node && cd /opt/cyberchef-node
npm init -y
npm install cyberchef@11.5.0 # registry 不可达时:npm config set proxy/https-proxy
单次烘焙:
node -e '
const { bake } = require("cyberchef");
bake("Hello CyberChef", [{ op: "To Base64", args: ["A-Za-z0-9+/="] }])
.then(d => console.log(d.toString()));'
实测回显:
SGVsbG8gQ3liZXJDaGVm
交互式 REPL(官方 package.json 提供 npm run repl,在源码仓库内使用)加载全部操作到全局,命令行交互逐条试操作,适合把 Web 界面的探索迁移到终端。更多 Recipe 链路的 Node 实测(压缩令牌还原、日志提取、哈希计算等)见《CyberChef 实战用法详解(Recipe 体系核心篇)》。
九、常见问题(FAQ)
Q1:为什么找不到 cyberchef.conf 之类的配置文件? CyberChef 是纯静态应用,无服务进程,不存在服务端配置文件。配置分三层(见第三章总览):Web 服务器层、浏览器 localStorage、构建期 src/core/config。
Q2:界面改了偏好,换台电脑就没了? 浏览器端配置存 localStorage,不跟随账号(本来也没有账号)。统一团队偏好需走构建期定制(第七章)。
Q3:某个操作执行报「模块加载失败」? 发布包必须整体解压使用:操作实现按领域打包在 modules/ 目录,按需加载;缺文件即对应分类操作全部不可用。逐文件核对解压结果(对照发布包清单)后重试。
Q4:升级 v11.x 后浏览器行为异常(操作列表为空等)? 浏览器缓存了旧版 main.js。静态资源文件名带内容指纹,正常升级不会撞缓存;若经反向代理改写过资源路径需检查缓存策略,或在浏览器强制刷新(Ctrl+F5)验证。
Q5:可以删掉用不到的 modules/ 文件减体积吗? 技术上可行(对应分类操作将不可用),但没有官方支持路径;需要正式裁剪请走源码构建定制,保证产物一致性与可维护性。
Q6:Magic 没识别出来怎么办? Magic 依赖特征强度:纯文本、无编码特征的输入识别不到属正常。可尝试加大 depth(多层嵌套如 Base64(Gzip(JSON)) 建议 depth ≥ 4)、开启 extensive language support 参数,或人工按「文件头 → 熵值 → 试解」排查(配合 Entropy、Detect File Type 操作)。
十、参考链接
- v11.5.0 Categories.json(分类权威清单):https://github.com/gchq/CyberChef/blob/v11.5.0/src/core/config/Categories.json
- v11.5.0 package.json(构建脚本):https://github.com/gchq/CyberChef/blob/v11.5.0/package.json
- CHANGELOG(v11.5.0 安全修复与新增操作):https://github.com/gchq/CyberChef/blob/master/CHANGELOG.md
- 官方 Wiki(Node API 与开发文档):https://github.com/gchq/CyberChef/wiki
- 官方 npm 包:https://www.npmjs.com/package/cyberchef
- 相关篇目:《CyberChef 介绍与选型指南》(认知与选型)、《CyberChef 安装与初始化实战》(部署与初始化)、《CyberChef 实战用法详解(Recipe 体系核心篇)》(链式操作实战)