工具简介
JavaScript 混淆工具会改写脚本,让它运行效果完全不变,但人很难读懂和照搬。变量名和函数名会变成 _0x3f2a 这样无意义的标识符,字符串会移到经过编码的查找表里;强度更高时还会打乱控制流并混入无用代码。
它适合浏览器小游戏、演示页面、网页组件和授权校验等以明文 JavaScript 发布、又不希望被原样复制的场景。
使用方法
- 粘贴 JavaScript 代码,或打开一个
.js文件。 - 选择 混淆强度:
- 低:重命名局部名称,把字符串移到查找数组里。输出仍然较快、体积较小。
- 中:增加字符串编码、控制流平坦化和少量无用代码。
- 高:所有手段全力开启,结果可能大好几倍,运行也明显变慢。
- 只有当脚本外部没有任何地方引用它的顶层函数或变量时,才打开 重命名全局变量和函数。
- 如果希望结果分成多行,关闭 输出为一行。
- 复制或下载混淆后的代码,部署前先测试。
示例
示例代码定义了一个 greet 函数和访问计数器。以低强度混淆后,代码变成一行十六进制名称,但运行后依然输出 Hello, Ada! You have visited 1 time(s).。
混淆和压缩的区别
压缩(比如 JavaScript 与 CSS 压缩工具)会去掉空白、缩短名称,让文件更小、下载更快。混淆在体积上正好相反:它故意增加间接层,让代码更难理解。很多项目会压缩所有文件,只对少数包含核心逻辑的文件做混淆。
局限
混淆保护不了机密。浏览器能运行的东西,用户最终都能查看,所以 API 密钥和必须保密的业务规则应该留在服务器上。高强度设置还会拖慢代码,避免用在频繁执行的循环和对性能敏感的页面里。
常见问题
› 混淆会改变代码的功能吗?
不会。混淆后的脚本运行效果和原来一样,只是形式变了。不过读取自身源码或函数名的代码可能表现不同,所以上线前务必用混淆后的版本跑一遍测试。
› 混淆后的代码能还原吗?
无法完全还原,但有足够时间和耐心的人仍然能弄清它在做什么。请把混淆当作防止随手复制的门槛,绝不要用它来隐藏 API 密钥等机密。
› 什么时候该打开「重命名全局变量和函数」?
只有脚本完全独立时才打开。重命名全局名称后,HTML 属性、其他脚本或测试里按名字调用顶层函数的地方都会失效。
› 我的代码会被上传吗?
不会。混淆在浏览器里用开源的 javascript-obfuscator 库完成。