Cocos Creator 3.x 代码混淆插件 —— 从 2.x 迁移适配

前言

在 Cocos Creator 2.x 时代,开发者 文弱书生陈皮皮 开发了一款非常好用的代码混淆插件 ccc-obfuscated-code,基于 javascript-obfuscator 实现,能够在项目构建时自动对 JS 代码进行混淆保护。

由于 Creator 3.x 的插件系统和构建管线相比 2.x 发生了很大变化,原始插件无法直接在 3.x 中使用。因此我将其迁移适配到了 Creator 3.x,在此向原作者文弱书生陈皮皮致以感谢!


迁移过程中的主要挑战

1. 构建钩子架构完全不同(最大的坑)

3.x 的构建钩子有两种模式,必须同时支持:

  • 同进程模式(web 平台):构建 worker 与编辑器同进程,可以直接导出 hooks 对象,函数引用不会丢失

  • 跨进程模式(Android/iOS 原生平台):构建在独立的 worker 进程中运行,需要通过 configs 导出文件路径字符串(而非函数对象),worker 再 require() 加载

如果只在 contributions.builder 文件里导出 hooks 对象,web 平台能工作,但 Android 构建会静默跳过——函数对象无法跨进程序列化,不会有任何报错,非常难排查。最终方案是同时导出两种方式


// builder.ts

export const hooks = { onBeforeBuild, onAfterBuild };   // 同进程(web)

export const configs = { '*': { hooks: './hooks' } };    // 跨进程(native)

2. javascript-obfuscator v3 → v4 API 破坏性变更

几个选项的类型在 v4 中发生了改变:

  • stringArrayEncodingboolean|stringstring[]

  • debugProtectionIntervalbooleannumber

  • stringArrayWrappersType:v4 中直接移除了

面板 UI 和预设文件都是按 v3 格式设计的,直接传给 v4 的 obfuscator 会报参数校验错误。解决方案是在调用 obfuscator 前通过 sanitizeOptions() 自动转换。

3. 混淆范围必须精确控制

最初让插件递归遍历构建输出目录下所有 .js 文件,结果混淆后的包完全跑不起来。对比 2.x 源码才发现,原作者只精确混淆了各 bundle 的入口 index.*.js 文件,跳过了引擎系统文件。这个细节非常关键。

4. SystemJS 模块格式兼容性

Creator 3.x 使用 Rollup + SystemJS 模块格式打包,与 javascript-obfuscatorstringArray 选项存在冲突,会导致运行时错误。最终强制关闭了字符串数组混淆,同时自动注入了 42 个 Cocos Creator 引擎关键名称到 reservedNames

5. 不同平台构建输出目录结构不同

Android/iOS 原生构建的目录比 web 多一层嵌套:


Web:    build/web-mobile/assets/{bundle}/index.*.js

Native: build/android/assets/assets/{bundle}/index.*.js

需要自动检测两种结构。


功能介绍

两种操作入口

| 入口 | 操作 | 适用场景 |

|------|------|---------|

| 构建任务面板 | 勾选「启用代码混淆」→ 构建 | 日常使用,最简操作 |

| 独立设置面板 | 预设管理 + 参数调整 + 导入导出 | 深度配置 |

内置混淆预设

| 预设 | 强度 | 说明 |

|------|------|------|

| 关闭 | - | 不做混淆,仅代码压缩 |

| 低强度 | ★ | 标识符短名替换 |

| 中低强度 | ★★ | + 控制台输出禁用、数字表达式化 |

| 中等强度 | ★★★ | + 控制流扁平化、死代码注入 |

| 高强度 | ★★★★ | + 全部选项启用 |

自定义预设(新功能)

支持创建/编辑/删除自定义混淆预设。内置预设只读,自定义预设独立存储,互不干扰。

核心能力

  • 多平台支持:web-mobile :white_check_mark: / android :white_check_mark: / iOS 等原生平台理论兼容

  • 构建面板集成:构建任务面板直接勾选启用,无需额外操作

  • 独立配置面板:全部 18+ 混淆选项可视化配置

  • 预设管理:内置 5 档 + 自定义预设

  • 配置导出:一键导出 JSON 配置,支持 CI/CD 命令行构建

  • i18n 多语言:支持中英文界面

  • 深色主题:参考 Unity Editor 暗色配色

  • 引擎保护:42 个引擎标识符自动保护,跳过引擎内部 bundle

  • 分包支持assets/ 各 bundle 和 subpackages/ 分包全覆盖


安装使用

  1. ccc-obfuscated-code-3x 放入项目的 extensions/ 目录

  2. 执行 npm install && npm run build

  3. Creator 编辑器:扩展 → 扩展管理器 → 刷新 → 启用插件

  4. 构建时勾选「启用代码混淆」即可。需要自定义配置可打开独立设置面板


CI/CD 自动化


# 在编辑器中导出配置后

cp ./ccc-obfuscated-code-export.json ./local/ccc-obfuscated-code.json

cc build -p android --config config.json


注意事项

:warning: 本项目已在 web-mobileandroid 平台完成验证。iOS 等平台理论兼容但未实测。如有问题欢迎提 Issue。


开源地址

:link: GitHubhttps://github.com/firekula/ccc-obfuscated-code-3x

:link: 2.x 原始项目(by 文弱书生陈皮皮):https://gitee.com/ichenpipi/ccc-obfuscated-code


感谢原作者文弱书生陈皮皮的出色工作,使得这次迁移能够站在巨人的肩膀上完成。

6赞

在论坛最喜欢看这样的分享文章和开源精神的帖子,赞一个

:cow::cow::cow::cow::cow:

库拉牛逼:cow:

你随便混淆,opus4.8反解不出来算我输

解呗