JavaScript混淆器
代码混淆会增加阅读JavaScript源代码的成本,虽非绝对(前端代码混淆并非万无一失),但足以阻碍随意检查并降低自动化抓取效率。该工具采用字符串数组编码、标识符混淆、控制流扁平化以及可选的死代码注入等技术,各项选项均可根据你所需的混淆强度进行选择。
如何混淆JavaScript代码
-
1
粘贴源代码
任何有效的JavaScript代码均可使用。若代码依赖于宿主页面中的特定全局属性名称,请将这些属性设为保留属性。
-
2
选择技术
字符串编码(hex / base64)、标识符混淆、控制流扁平化、死代码注入、自我防御包装器。
-
3
选择目标配置文件
浏览器(支持ES5标准,不支持Node.js API);Node.js(支持`require`、`Buffer`格式);或低级版本(主要为精简版)。
-
4
混淆
该工具会输出经过转换且带有大小增量(delta)的代码。若使用激进设置,输出代码的体积可能达到源代码的3至5倍。
技术方法及其费用
| 技术 | 增加攻击者的攻击难度 | 运行时成本 | 大小成本 |
|---|---|---|---|
| 变量重命名 | 低 | 可忽略不计 | 较小(压缩带来的副作用) |
| 字符串数组编码 | 中等 | 微小(每个字符串仅需一次查找) | +10–30% |
| 控制流扁平化 | 高 | 可测量(约2–5%) | +50–150% |
| 死代码注入 | 低(安全表演) | 小型 | +20–50% |
| 自保护包装 | 中号 | 单次检测 | +5-10% |
| 调试保护 | 中等(可检测 DevTools) | 一次性检查 | +5% |
| 虚拟机/虚拟化(高级版) | 极高 | 较大(5–20倍) | +300–500% |
隐匿手段无法保护的内容
- 密钥与参数。 在前端源代码中,任何常量若暴露足够长时间,都可能被破解。API密钥、身份验证密钥、定价逻辑等均不可依赖混淆技术进行隐藏,必须将其移至服务器端处理。
- 具有可观察输出的算法。 如果浏览器能够运行该算法,具备调试功能的攻击者即可观测其所有输入和输出。混淆技术虽能延缓这一过程,但无法完全阻止。
- 大规模自动化数据抓取。 防抓取机制依赖于行为检测(指纹识别、速率限制、验证码验证),而非源代码混淆技术。
当混淆处理值得时
- 对嵌入式SDK(授权类SDK、广告SDK、游戏客户端)实施防篡改功能。
- 提高对竞争对手实现方案进行简单复制粘贴操作的成本。
- 使广谱爬虫更难以实现自动化脚本分类。
当这种做法适得其反时
- 您已配备一个打包工具:Webpack + Terser 在生产环境中即可对本地文件进行压缩和混淆处理。额外增加一次混淆步骤几乎不会带来额外收益,反而会增大最终包的体积。
- 您正在针对首次渲染/核心网页关键指标进行优化。过度混淆会使性能开销增加三倍,从而影响首次加载时间(FCP)和最终加载时间(LCP)。
- 你必须对生产环境进行调试。过度的代码混淆会使Sentry堆栈追踪在没有对应源代码映射的情况下几乎毫无用处;而发布源代码映射反而会破坏代码混淆的效果。
常见错误
- 将混淆处理等同于加密。其实并非如此,它只是一道减速带。
- 将源映射与经过混淆处理的程序包一同部署到生产环境,这会彻底消除混淆效果。
- 混淆您已从 CDN 加载的第三方库。此举不仅会增加程序体积,且毫无实际收益。
常见问题
不。混淆代码只是个障碍,并非真正的防护措施。具备调试能力的资深分析师完全能够还原其逻辑结构。虽然这种做法会显著增加开发成本,从而阻碍随意检查和大多数自动化数据抓取工具的应用,但它并不能构成真正的安全防护。
若您动态访问属性(obj["field_name"]、Object.keys(obj))或依赖主机页面中的特定函数/类名称,请将这些名称添加至预留列表。否则,重命名属性可能破坏外部集成功能。
请保留原始数据。混淆器是一种单向变换;无法从混淆后的输出中精确还原原始内容,仅能获得可读的近似值。
轻度混淆可增加约10%至30%的体积;控制流扁平化结合字符串数组处理则会增加50%至150%;最高强度设置下体积可能增至三倍。发布前请务必检查输出文件大小。
相关工具
ASCII 表参考
完整 ASCII 表,覆盖 0 到 127;列出每个代码的十进制、十六进制、八进制、二进制值和 HTML 数字字符引用写法,包括 NUL、LF、DEL。
HTML 字符参考
可搜索的 HTML 实体列表,含命名代码与数值代码,并支持一键复制特殊字符和符号。
键盘快捷键参考
搜索 macOS、Windows 和 Linux 上 VS Code、Chrome 以及使用 GNU Readline 的 Bash 的文档默认快捷键。
邮箱验证器
验证邮箱地址:RFC 5322 语法检查、实时 MX 记录查询,并显示本地部分、域名和长度详情。不会发送任何邮件。
编辑器配置生成器
根据你的缩进样式与大小、行尾、字符集和空格规则生成 .editorconfig 文件,让不同集成开发环境(IDE)和编辑器的格式保持一致。
证书解码器
粘贴一张 X.509 PEM 证书,并查看解码后的字段:主体、颁发者、序列号、签名算法、有效期及主体备用名称(SAN)。
此工具还提供其他语言版本
- Trình làm rối mã JavaScript [VI]
- JavaScript-Obfuscator [DE]
- Ofuscador de JavaScript [PT]
- JavaScript 난독화 도구 [KO]
- เครื่องมือปิดบังโค้ด JavaScript [TH]
- مُبهِّم JavaScript [AR]
- JavaScript-obfuskerare [SV]
- JavaScript-obfuscator [NL]
- Obfuscateur JavaScript [FR]
- Obfuscator JavaScript [ID]
- JavaScript難読化ツール [JA]
- Obfuskator JavaScript [PL]
- Ofuscador de JavaScript [ES]
- JavaScript Obfuscator [EN]
- Offuscatore JavaScript [IT]
- Обфускатор JavaScript [RU]
- JavaScript Kod Gizleme Aracı [TR]