轻量混淆 JavaScript:字符串转义或提取为数组、数字转十六进制、true/false 简写、域名锁定与压缩
JavaScript 混淆加密工具:对前端 JS 代码做轻量混淆,把字符串改写为 \x / \u 转义或提取为字符串数组、把数字改写为十六进制、把 true/false/undefined 简写为 !0 / !1 / void 0,并可压缩与域名锁定,显著降低代码可读性、提高他人复制与修改的门槛。
字符串数组模式会把所有字符串集中到文件顶部的数组里(var _0xAbC = [...]),原处只保留索引引用,这是商业混淆器最常见的手法;工具会跳过 "use strict" 指令、import/export 的模块路径与正则、模板字符串,保证混淆后代码仍能正常运行。
需要说明的是:混淆不等于加密,本工具做的是不破坏语法的轻量变换,不包含控制流平坦化、死代码注入、标识符重命名等需要完整 JS 引擎的能力;它无法做到 100% 不可逆,但足以挡住大多数只想「顺手抄代码」的人。混淆后请在浏览器或 Node 中先验证再上线。
本工具只做不改变语义的变换(字符串改写为等价转义、数字改十六进制、简写布尔值),会跳过 "use strict"、import/export 路径、正则与模板字符串,因此正常情况下运行结果与原文一致。但为稳妥起见,混淆后仍建议在目标环境(浏览器 / Node)中先验证再上线。
混淆只是降低可读性,代码逻辑仍在,无法做到绝对不可逆——任何混淆都能被有经验的人逆向。本工具定位是挡住「顺手复制」的人、提高破解成本,而不是安全加密;真正的敏感逻辑应放到服务端,而不是前端。
不会。工具会跳过 import / export / from 后面的模块路径(这些必须是字符串字面量),也会跳过 "use strict" 与 "use asm" 指令,并把注入的字符串数组声明放到指令序言之后,保证严格模式仍然生效。
这些能力需要完整的 JavaScript 解析器与运行时才能安全实现(参考站对应功能由 javascript-obfuscator 这类 Node 库提供)。本工具是纯 Python 实现,为避免「改坏代码」,只做无需解析作用域的安全变换。
填写域名后,代码会被包裹在一个立即执行函数里:运行时检查 location.hostname,与指定域名不符就跳转到该域名,从而阻止代码在未授权站点上运行。域名锁定依赖浏览器环境,Node 中 location 不存在,因此只适合前端代码。
不建议。已混淆代码往往包含大量转义与数组索引,再次处理容易造成结构错乱或运行异常。请始终用原始源码做混淆,并妥善保留一份未混淆的副本。