Skip to content

vampire-locker/javascript-obfuscator-batch

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

javascript-obfuscator-batch

基于 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

使用 .command 文件(macOS 推荐)

首次使用需要赋予执行权限:

chmod +x obfuscate.command

或者在 Finder 中:

  1. 右键点击 obfuscate.command 文件
  2. 选择「显示简介」
  3. 在「共享与权限」中勾选「可执行」

运行工具:

双击 obfuscate.command 文件,按提示输入:

  1. 要混淆的文件夹路径
  2. 要忽略的目录名称(可选)
  3. 选择备份模式

混淆预设

🔧 default - 开发调试

性能影响: ~5%  |  文件大小: +10%

特点:

  • ✅ 基础字符串混淆
  • ✅ 变量重命名(十六进制)
  • ✅ 保留 console.log(可调试)
  • ✅ 可格式化代码

适用场景: 开发环境、需要调试的代码

🛡️ low - 生产环境

性能影响: ~5%  |  文件大小: +15%

特点:

  • ✅ 基础字符串混淆
  • ✅ 变量重命名
  • ✅ 禁用 console.log
  • ✅ 自我保护(防格式化)
  • ❌ 无加密编码

适用场景: 一般生产环境、高频调用的代码

🔒 medium - 敏感代码

性能影响: ~30%  |  文件大小: +80%

特点:

  • ✅ 控制流扁平化(75%)
  • ✅ 死代码注入(40%)
  • ✅ Base64 编码
  • ✅ 字符串调用转换(75%)
  • ✅ 对象键转换
  • ✅ 数字转表达式
  • ✅ 2 个包装函数

适用场景: 敏感业务逻辑、API 调用代码

🔐 high - 极高安全

性能影响: ~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 不备份(默认)

⚠️ 重要提示: 默认不备份,请提前自行备份重要文件!

配置文件

obfuscate-config.json

配置文件包含 4 个预设和排除目录配置:

{
  "excludeDirs": [],
  "presets": {
    "default": { ... },
    "low": { ... },
    "medium": { ... },
    "high": { ... }
  }
}

你可以修改配置文件来调整混淆行为,配置项说明参考 javascript-obfuscator 官方文档

文件说明

文件 说明
obfuscate-batch.js 混淆脚本主程序
obfuscate-config.json 混淆配置文件(4 个预设)
obfuscate.command macOS 交互式混淆工具
package.json 项目依赖配置

注意事项

1. 备份重要文件

⚠️ 脚本默认不备份,混淆前务必备份重要代码!

建议使用 Git 或 --backup-mode=folder 选项。

2. 测试混淆后的代码

混淆后务必测试功能是否正常:

  • 某些动态代码(eval、Function 构造器)可能需要调整配置
  • renameGlobals: true 可能破坏依赖全局变量的代码

3. 性能考虑

场景 推荐预设 原因
生产环境(高频调用) low 性能优先
一般 Web 应用 medium 平衡性能和安全
敏感代码(低频调用) high 安全优先
Node.js 后端 low-medium 服务器性能重要
移动端 H5 low 设备性能有限

4. 排除目录

通过 --exclude 参数或修改配置文件中的 excludeDirs 来排除不需要混淆的目录。

示例:

node obfuscate-batch.js ./sw --exclude=vendor,node_modules,test

5. 避免机器识别相同代码

如果需要每次混淆产生不同结果以避免机器识别:

  • 使用 mediumhigh 预设(包含死代码注入和控制流扁平化)
  • 考虑添加 seed 参数(需自行扩展脚本)

混淆效果示例

原始代码

var msg = "hello world";
console.log(msg);

default 预设混淆后

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);

常见问题

Q: 混淆后代码无法运行?

A: 检查以下几点:

  1. 是否有动态代码(eval, Function 构造器等)
  2. 是否使用了全局变量(如果启用了 renameGlobals
  3. 尝试降低混淆强度(从 high → medium → low)

Q: 如何自定义混淆配置?

A: 修改 obfuscate-config.json 中的预设配置,或添加新的预设。

Q: 能否只混淆指定文件?

A: 可以使用官方命令行工具:

npx javascript-obfuscator input.js --output output.js

Q: high 预设太慢怎么办?

A:

  • 日常开发使用 defaultlow
  • 只对敏感代码使用 mediumhigh
  • 生产构建时再使用高强度混淆

许可证

BSD-2-Clause License

本项目采用与 javascript-obfuscator 相同的 BSD-2-Clause 许可证。

详见 LICENSE 文件。

致谢

本工具基于 javascript-obfuscator 开发,感谢原作者的贡献。

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors