基于 javascript-obfuscator 的批量 JavaScript 代码混淆工具,支持多级混淆强度,可自动混淆指定目录下的所有 JS 文件。
- ✅ 批量混淆多个目录下的 JS 文件
- ✅ 4 种混淆强度预设(default/low/medium/high)
- ✅ 灵活的备份策略(整个文件夹/单文件/不备份)
- ✅ 支持排除指定目录
- ✅ 所有配置统一在配置文件管理
- ✅ 提供交互式 .command 文件(macOS)
npm install# 使用默认配置混淆(default 预设)
npm run obfuscate -- ./your-folder
# 使用指定预设
npm run obfuscate -- ./your-folder --preset=low
npm run obfuscate -- ./your-folder --preset=medium
npm run obfuscate -- ./your-folder --preset=high
# 排除指定目录
npm run obfuscate -- ./your-folder --exclude=vendor,node_modules
# 使用文件夹备份
npm run obfuscate -- ./your-folder --backup-mode=folder首次使用需要赋予执行权限:
chmod +x obfuscate.command或者在 Finder 中:
- 右键点击
obfuscate.command文件 - 选择「显示简介」
- 在「共享与权限」中勾选「可执行」
运行工具:
双击 obfuscate.command 文件,按提示输入:
- 要混淆的文件夹路径
- 要忽略的目录名称(可选)
- 选择备份模式
性能影响: ~5% | 文件大小: +10%
特点:
- ✅ 基础字符串混淆
- ✅ 变量重命名(十六进制)
- ✅ 保留 console.log(可调试)
- ✅ 可格式化代码
适用场景: 开发环境、需要调试的代码
性能影响: ~5% | 文件大小: +15%
特点:
- ✅ 基础字符串混淆
- ✅ 变量重命名
- ✅ 禁用 console.log
- ✅ 自我保护(防格式化)
- ❌ 无加密编码
适用场景: 一般生产环境、高频调用的代码
性能影响: ~30% | 文件大小: +80%
特点:
- ✅ 控制流扁平化(75%)
- ✅ 死代码注入(40%)
- ✅ Base64 编码
- ✅ 字符串调用转换(75%)
- ✅ 对象键转换
- ✅ 数字转表达式
- ✅ 2 个包装函数
适用场景: 敏感业务逻辑、API 调用代码
性能影响: ~70% | 文件大小: +150-200%
特点:
- ✅ 控制流扁平化(100%)
- ✅ 死代码注入(100%)
- ✅ RC4 加密
- ✅ 字符串调用转换(100%)
- ✅ 调试保护(4 秒间隔)
- ✅ 5 个包装函数
⚠️ 打开开发者工具会冻结浏览器
适用场景: 极高安全要求的代码、低频调用的敏感功能
| 预设 | 运行速度 | 文件大小 | 字符串加密 | 控制流混淆 | 死代码注入 | 调试保护 |
|---|---|---|---|---|---|---|
| default | 100% | +10% | ❌ | ❌ | ❌ | ❌ |
| low | 100% | +15% | ❌ | ❌ | ❌ | ❌ |
| medium | 70% | +80% | Base64 | 75% | 40% | ❌ |
| high | 30% | +150% | RC4 | 100% | 100% | ✅ |
node obfuscate-batch.js <目录> [选项]
选项:
--preset=default|low|medium|high 混淆预设(默认: default)
--backup-mode=folder|file|none 备份模式(默认: none)
--exclude=dir1,dir2 排除指定目录(用逗号分隔)
示例:
node obfuscate-batch.js ./sw
node obfuscate-batch.js ./sw --preset=medium
node obfuscate-batch.js ./sw --preset=high --exclude=vendor,test
node obfuscate-batch.js ./sw --backup-mode=folder --exclude=vendor| 模式 | 说明 | 备份位置 |
|---|---|---|
folder |
备份整个文件夹 | 同级目录 <文件夹名>_backup |
file |
单文件备份 | 每个文件旁 <文件名>.backup.js |
none |
不备份(默认) | 无 |
配置文件包含 4 个预设和排除目录配置:
{
"excludeDirs": [],
"presets": {
"default": { ... },
"low": { ... },
"medium": { ... },
"high": { ... }
}
}你可以修改配置文件来调整混淆行为,配置项说明参考 javascript-obfuscator 官方文档。
| 文件 | 说明 |
|---|---|
obfuscate-batch.js |
混淆脚本主程序 |
obfuscate-config.json |
混淆配置文件(4 个预设) |
obfuscate.command |
macOS 交互式混淆工具 |
package.json |
项目依赖配置 |
建议使用 Git 或 --backup-mode=folder 选项。
混淆后务必测试功能是否正常:
- 某些动态代码(eval、Function 构造器)可能需要调整配置
renameGlobals: true可能破坏依赖全局变量的代码
| 场景 | 推荐预设 | 原因 |
|---|---|---|
| 生产环境(高频调用) | low | 性能优先 |
| 一般 Web 应用 | medium | 平衡性能和安全 |
| 敏感代码(低频调用) | high | 安全优先 |
| Node.js 后端 | low-medium | 服务器性能重要 |
| 移动端 H5 | low | 设备性能有限 |
通过 --exclude 参数或修改配置文件中的 excludeDirs 来排除不需要混淆的目录。
示例:
node obfuscate-batch.js ./sw --exclude=vendor,node_modules,test如果需要每次混淆产生不同结果以避免机器识别:
- 使用
medium或high预设(包含死代码注入和控制流扁平化) - 考虑添加
seed参数(需自行扩展脚本)
var msg = "hello world";
console.log(msg);var _0x5afeb8 = _0x1b8b;
function _0x1b8b(_0x563b71, _0x349004) {
var _0x9c989c = _0x9c98();
return (
(_0x1b8b = function (_0x1b8bb8, _0x8bef4d) {
_0x1b8bb8 = _0x1b8bb8 - 0x1b8;
var _0x4db74a = _0x9c989c[_0x1b8bb8];
return _0x4db74a;
}),
_0x1b8b(_0x563b71, _0x349004)
);
}
var msg = _0x5afeb8(0x1c5);
console[_0x5afeb8(0x1ba)](msg);A: 检查以下几点:
- 是否有动态代码(eval, Function 构造器等)
- 是否使用了全局变量(如果启用了
renameGlobals) - 尝试降低混淆强度(从 high → medium → low)
A: 修改 obfuscate-config.json 中的预设配置,或添加新的预设。
A: 可以使用官方命令行工具:
npx javascript-obfuscator input.js --output output.jsA:
- 日常开发使用
default或low - 只对敏感代码使用
medium或high - 生产构建时再使用高强度混淆
BSD-2-Clause License
本项目采用与 javascript-obfuscator 相同的 BSD-2-Clause 许可证。
详见 LICENSE 文件。
本工具基于 javascript-obfuscator 开发,感谢原作者的贡献。