JavaScript代码混淆器

文件
压缩代码
重命名全局变量
重命名属性名称
标识符名称生成规则
标识符字典列表
标识符前缀
自我防御
控制流扁平
控制流扁平阈值
死代码注入
死代码注入阈值
字符串数组
旋转字符串数组
随机字符串数组
字符串数组编码
字符串数组阈值
拆分字符串
拆分字符串块长度
变换对象键
转义Unicode序列
禁用控制台输出
调试保护
调试保护间隔
锁定域名
保留名称
保留字符串
源代码映射
源代码映射模式
源代码映射文件名称
源代码映射基URL
种子数值
目标环境
压缩代码 从输出的混淆代码中删除换行符。
标识符名称生成规则

使用此选项可控制如何混淆标识符(变量名、函数名等)。

字典

使用“标识符字典列表”中的名称生成标识符名称

十六进制

使用十六进制模式生成随机标识符名称(例如:0xabc123

短标识符

使用短的标识符名称(例如:a、b、c等)

标识符字典列表

此选项为“标识符名称生成规则:字典”选项设置标识符列表。

标识符前缀

此选项使所有全局标识符都具有特定的前缀。

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

重命名全局变量

启用使用声明的全局变量和函数名的混淆处理。

重命名属性名称

启用属性名称的重命名。所有内置的DOM属性和核心JavaScript类中的属性将被忽略。

若要设置重命名属性名称的格式,请使用“标识符名称生成规则”选项。

要控制将重命名哪些属性,请使用“保留名称”选项。

自我防御

此选项使输出代码对格式化和变量重命名具有弹性。如果有人试图在混淆的代码上使用JavaScript美化器,代码将不再工作,从而使其更难理解和修改。

需要启用“压缩代码”设置。

控制流扁平

启用代码控制流扁平。控制流扁平化是源代码的一种结构转换,它阻碍了程序的理解。

控制流扁平阈值

您可以使用此项设置调整“控制流扁平”转换应用于节点的概率(从0到1)。

在较大的代码库中,建议降低此值,因为大量的控制流转换会增加代码的大小并减慢运行速度。

死代码注入

此功能将随机的死代码块(即:不会执行的代码)添加到混淆后的代码输出中,使得逆向工程变得更加困难。

死代码注入阈值

可以使用此设置调整节点受“死代码注入”选项影响的概率(从0到1)。

拆分字符串

此功能将文本字符串拆分为长度为“拆分字符串块长度”选项值的字符串块。

拆分字符串块长度

可以使用此设置设置“拆分字符串”的块长度。

字符串数组

移除字符串文字并将其放置在特殊数组中。 例如,var m = “Hello World”;中的字符串“Hello World”将替换为对函数的调用,该函数将在运行时检索其值:var m = _0xb0c3('0x1');

请参阅下面的选项,了解如何配置此功能使其具有弹性。

旋转字符串数组

stringArray数组移动一个固定和随机的位置(在代码混淆时生成)。这使得将移除的字符串的顺序与其原始位置相匹配变得更加困难。

如果原始源代码不小,建议使用此选项,因为helper函数会引起注意。

随机字符串数组

随机洗牌stringArray数组中的项的顺序。

字符串文本编码

使用Base64或RC4对stringArray中的所有字符串文本进行编码,并插入一个特殊函数,该函数用于在运行时对其进行解码。

请注意,使用RC4编码的速度比使用Base64编码慢30-35%,但是检索字符串更困难。

字符串数组阈值

您可以使用此设置调整字符串文本插入stringArray的概率(从0到1)。

此设置在大型代码库中非常有用,因为对stringArray函数的重复调用会减慢代码的速度。

变换对象键

变换(混淆)对象键。

例如,使用此选项进行混淆处理时,代码var a={enabled:true};将隐藏enabled对象键:var a={};a[\u 0x2ae0[('0x0')]=true;

理想情况下与字符串数组设置一起使用。

转义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上都有)。

调试保护阈值

如果选中此选项,则会使用一个间隔来强制在“控制台”选项卡上使用调试模式,从而使浏览器的开发者工具的其他功能更难使用。

它是如何工作的?一个反复调用debugger;的特殊代码被插入到整个混淆后的代码中。

域名锁定

锁定混淆处理的源代码,使其仅在特定域和/或子域上运行。这使得很难复制粘贴你的源代码并在其他地方运行。

多个域和子域

可以将代码锁定到多个域或子域。例如,锁定代码使其只能在www.example.com上运行:添加 www.example.com, 要使其能在任意example.com的子域名上运行, 使用.example.com

保留名称

禁用由传递的RegExp模式匹配的标识符的混淆和生成。

例如,如果添加了^someName,混淆器将确保以someName开头的所有变量、函数名和函数参数不会被破坏。

保留字符串

禁用由传递的RegExp模式匹配的字符串文本的混淆和转换。

例如,如果添加了^some *string, 混淆器将确保以some string 开头的所有字符串都不会添加到`stringArray`。

源代码映射

源代码映射可以帮助您调试混淆的JavaScript源代码。如果您希望或需要在生产环境中进行调试,可以将单独的源代码映射文件上载到机密位置,然后将浏览器指向该位置。

内联

这会将源代码的源代码映射嵌入到混淆的代码中。如果您只想在您的计算机上进行本地调试,则此选项非常有用。

分离

这会将源代码映射生成单独的文件。这对于在生产环境中调试代码很有用,因为这样可以将源代码映射上载到服务器上的机密位置,然后浏览器指向该位置来使用它。

使用源映射基URL源映射文件名自定义源映射URL属性,该属性将附加到模糊代码的末尾。

例如,如果设置基URL"http://localhost:9000" 并且 文件名"example", 那么将添加: //# sourceMappingURL=http://localhost:9000/example.js.map到混淆的代码结尾。

种子数值

默认情况下该项的值为0,每次对代码进行混淆处理时,都会得到一个新结果(即:不同的变量名、插入stringArray的不同变量等)。如果需要可重复的结果,请将该值设置为特定整数。

目标环境

您可以将混淆代码的目标环境设置为以下之一:

  • Browser
  • Browser No Eval
  • Node

JavaScript代码混淆器,此工具将原始JavaScript源代码转换为新的表示形式,这种表示形式在未经授权的情况下很难理解、复制、重用和修改。混淆处理的结果将具有与原始代码完全相同的功能。

通过一系列转换,例如变量/函数/参数重命名、字符串删除和其他转换,您的源代码将被转换JavaScript为一些不可读的内容,而工作方式与以前完全相同。


您只需粘贴您的代码或上传源代码文件,然后点击“开始混淆”即可,混淆后的结果还可另存为文件下载。

请务必阅读所有混淆选项的说明,以便在代码保护和代码大小/运行速度之间的所有权衡。


为什么我要混淆我的JavaScript代码?

有很多原因需要保护您的JavaScript代码,例如:

  • 防止任何人复制/粘贴你的作品。这对于100%的前端端项目特别重要,比如HTML5游戏;

  • 删除不需要的注释和空白。使您的JavaScript代码加载速度更快,更难理解;

  • 保护尚未支付的工作。你可以向客户展示你的工作,但是不能让他们得到您的源代码,直到已经支付。


我能从混淆后的代码中恢复原始代码吗?

不能将混淆后的代码还原回原始代码,所以请保持原始代码的安全。


预览: