使用帮助

压缩成一行去除代码中的换行符。
标识符混淆方式

设置变量名、函数名的混淆方式。

dictionary

使用来自 标识符字典 中的名称

hexadecimal

使用十六进制模式随机生成 (例如: 0xabc123)

mangled

使用简短的名称 (例如: a, b, c, 等等..)

标识符字典

设置标识符混淆的名称字典。

标识符前缀

设置混淆后的标识符使用特定的前缀

当混淆加载在同一页面上的多个文件时,请配置此选项。为每个文件使用不同的前缀有助于避免这些文件的全局标识符之间的冲突。

混淆全局变量

开启此选项可能影响其它代码的运行,请谨慎使用!

开启后,将混淆全局变量与全局函数名。

自我保护

开启后将使加密后的代码无法被格式化。如果有人尝试格式化加密后的代码,将使代码无法正常运行。

启用此选项后代码将被强制压缩成一行。

控制流平坦化

此选项非常影响性能,请按需开启!

使代码控制流扁平化。控制流扁平化是一种阻碍程序理解的源代码结构转换。访问 JavaScript's obfuscator GH page 页面以了解其原理。

控制流平坦化阈值

调节范围:0~1,值越大,代码阅读难度越大,但输出的代码运行效率也相应的越低。可以按需调节。

死代码注入

启用该选项将导致加密后的代码量变大。

随机向代码中插入无意义的代码(不会被运行)使得代码的解密变得更困难。

死代码注入阈值

调节死代码注入的阈值(范围:0~1)

启用该选项需要同时开启 字符串转换为数组 功能。

分割字符串

启用该选项将导致加密后的代码量变大。

将文本字符串按照 分割字符串块长度 设定的值进行分割。

分割字符串块长度

使用该选项来指定字符串分割后的块长度。

字符串转换为数组

去除代码中固定的字符串文本,并将其统一放在一个数组中。例如 var m = "Hello World"; 中的 "Hello World",将会被替换为一个函数调用,在运行时再检索此值。一个例子:var m = _0xb0c3('0x1');

打乱字符串数组位置

将字符串数组放在一个随机的位置。如果您的原始源代码量很大,建议开启这个选项,能大大提升代码解密难度。

打乱字符串数组排序

随机排列字符串数组中的内容。

加密字符串数组

开启后将导致代码运行效率略微降低。

使用 Base64 或 RC4 对字符串进行加密。RC4 加密方式加密后解密难度大,但加密后的代码运行效率比 Base64 加密方式低 30-35%。请按需选择。

字符串转数组阈值

您可以使用此设置来调整将字符串文字插入到字符串数组中的概率(从0到1)。 此设置在大型代码库中非常有用,因为对字符串数组函数的重复调用会降低代码速度。

字符串转换为 Unicode 形式

将所有字符串转换为它们的 Unicode 形式。例如,字符串 "Hello World!" 将被转换为 "'\x48\x65\x6c\x6c\x6f\x20\x57\x6f\x72\x6c\x64\x21".

这个太容易被解码了,没什么意义,不建议开启。而且开启后会增加代码大小。

禁用控制台输出通过重写为空函数禁用 console.log, console.info, console.errorconsole.warn
禁止控制台调试

启用后,如果开启浏览器控制台,浏览器将被冻结。

这将使他人无法使用 控制台 调试工具进行代码调试 (支持 Google Chrome 和 Mozilla Firefox 浏览器)。

调试保护定时器

开启后,会使用一个定时器来卡住控制台,使得控制台无法进行调试操作。

域名锁定

默认不进行域名限定。如果添加了锁定域名,则加密后的代码只能在锁定域名下运行

添加多个白名单域名或子域名的方法:

如果需要将 example.com 的子域名全部设置为白名单域名,添加 .example.com 即可。

保留标识符

白名单中的标识符不会被混淆。支持正则表达式。

例如,添加 ^someName 则所有以 someName 开头的变量、函数名和函数参数都不会被混淆。

保留字符串

同上。

源映射

请确保不要在生产环境中嵌入 Source Map,因为可以通过它找到源代码,导致加密失去意义。

Source maps 能帮助你调试 JavaScript 代码。如果非要在生产中进行调试,可以将单独的 Source maps 文件上载到秘密位置,然后将浏览器指向该位置。

Inline Source Map

将 Source maps 射嵌入到混淆代码的结果中。如果需要进行本地调试,会很有用。

Separate Source Map

将 Source maps 一起生成一个单独的文件。这对于调试生产中的代码很有用,因为这使您可以将 Source maps 上传到服务器上的秘密位置,然后设置浏览器指向该位置。

使用 Source Map Base URLSource Map File Name 来自定义 sourceMappingURL ,并附加到加密后代码的末尾。

例如,如果设置 Base URL"http://localhost:9000" 同时设置 Source Map 文件名"example", 最终会将 //# sourceMappingURL=http://localhost:9000/example.js.map 附加到加密后代码的结尾。

加密种子

默认情况下 (种子设为“0”时), 每次加密同一段代码得到的结果都不一样(变量名及字符串打乱的顺序会不一样)。
如果你需要同一段代码每次的加密结果保持一致,将 种子 值设为一个固定的整数即可。

运行环境

设置加密后的代码需要在哪里运行

  • Browser
  • Browser No Eval
  • Node

当前 browsernode 选项的处理方式是一样的。

预设选项

工具预设了几个保护选项,可以按需选择。

基础保护

默认预设,高性能

低级保护

低混淆,高性能,性能将处于相对正常的水平

中级保护

中等混淆,最佳性能,性能将比没有混淆更慢

高级保护

高混淆,低性能,性能将比没有混淆慢得多

常见问题

这个混淆器绝对万无一失吗?

不,虽然不可能恢复确切的原始代码,但有时间、知识和耐心的人可以对其进行逆向工程。

由于JavaScript在浏览器上运行,浏览器的JavaScript引擎必须能够读取和解释它,因此无法阻止这种情况。任何承诺无法被破解的JavaScript加密都是骗人的

为什么混淆后的代码比原始源代码大?

因为混淆器引入了新的代码片段,这些代码片段旨在保护和防御调试和逆向工程。此外,字符串被转换为十六进制代码,以使代码变得更难理解。您不必太担心代码大小,因为有很多重复,因此您的Web服务器将很好地压缩混淆的代码(如果您在服务器上启用了GZIP压缩)。

我可以在混淆输出上运行 UglifyJS 或 Google Closure Compiler 等微型编译器吗?

不建议这样做,在某些情况下它会破坏代码(例如您启用了自我保护)。不过,您可以先通过微筛选器运行代码,以确保它删除死代码并进行其他优化。

你们会存储我的源代码吗?

绝对不会!本工具全程在浏览器端进行加密,不会向服务器端传输任何数据。如果仍不放心,可以在工具载入完成后,断网再进行加密。

我可以从混淆的源代码中恢复原始源代码吗?

不,不可能将混淆后的代码恢复为原始代码,因此请保持原始代码的安全。

此工具是否适用于 Node.js源代码?

是的。

我想在我自己的服务器/机器上运行混淆器。可以吗?

可以。这个工具使用用TypeScript编写的免费开源(BSD-2-Clause许可)混淆器。您可以转到其GitHub页面并在那里阅读更多内容。

还有许多插件,例如:webpack-obfuscatorgulp-javascript-obfuscatorgrunt-contrib-obfuscator