常见问题
通用问题
关于 JavaScript 混淆及其工作原理的常见问题。
保护代码的理由有很多:防止他人直接复制粘贴您的成果(对 HTML5 游戏这类客户端项目尤为重要);移除注释和空白字符,让代码加载更快、也更难被读懂;以及保护尚未收到付款的工作成果,让您可以先向客户展示效果,而不必交出源代码。
VM(虚拟机)混淆会将您的 JavaScript 代码转换为运行在内嵌解释器上的自定义字节码。标准混淆产出的仍然是可读的 JavaScript,而 VM 混淆则彻底隐藏了原始代码结构。静态分析工具若不先对整个虚拟机进行逆向工程,就无法理解其中的逻辑。更多内容请参阅我们的 VM 混淆指南。
可以!我们提供了相应选项,可将 VM 混淆有针对性地应用到特定函数或方法上。只需在目标函数上方加一条特殊注释(/* javascript-obfuscator:vm */),就只有该函数会经过 VM 混淆器处理。这非常适合只保护最敏感的算法,而其余代码保持标准混淆或原样不动,从而把性能开销降到最低。
不可以。API 密钥、机密信息和凭据绝不能存放在前端代码中。即便采用最高级别的混淆,前端 JavaScript 中的任何数据都可能被有心的攻击者提取出来。混淆会加大逆向工程的难度,但它不是加密,不能作为保护机密信息的手段。正确的做法是:把机密信息保存在后端服务器上,在服务端使用环境变量,通过后端代理 API 调用以隐藏密钥,或使用由您的服务器签发的短期令牌。
没有任何混淆是 100% 万无一失的 —— JavaScript 最终运行在攻击者可控的环境中(浏览器或 Node.js),在那里运行时内存检查始终是可能的。任何 JavaScript 混淆都封不死这条路;它能做的是提高达成它的代价。目前尚不存在针对 VM 混淆代码的自动化在线反混淆服务 —— 每一次混淆都会把代码编译成配有唯一虚拟机的自定义字节码,通用工具因此无从谈起。标准混淆则容易破解得多:借助自动化工具和格式化工具往往可以部分还原。VM 混淆则要求完整逆向整个虚拟机、解密并解码其字节码、理解其指令集并跟踪执行过程 —— 这一过程可能需要数周的专门投入。在没有 VM 自我防护的情况下,强大的 AI Agent(例如 Claude Opus 4.7)可以跟踪字节码,并对较小的代码库大致重建出原始代码。启用 VM 自我防护后,多层反 LLM 防御 —— 反 Hook、跨 realm 完整性校验以及字节码原生性检查 —— 会破坏 Agent 用来理解字节码的各种动态手段:插桩、Hook 和沙箱执行。对文件做静态读取仍然可行,但只能看到不透明的字节码,而任何观察解释器运行时的尝试都会触发完整性校验。仅凭文件本身,自动化 AI 反混淆已变得不切实际。若要进一步加固代码:把敏感函数包裹在 IIFE 中,使名称被完全转换;并启用字节码加密等加固选项。进一步了解 VM 如何转换代码。
VM 混淆是一项复杂的技术,部分边界情况可能尚未被完全支持。如果代码在 VM 混淆后出现问题,您可以使用 vmTargetFunctionsMode: 'comment' 有选择地混淆特定函数,从而缩小问题范围。请参阅我们的 故障排查指南,其中提供了定位问题代码并反馈问题的分步说明。
混淆器会引入新的代码来防范调试和逆向工程。字符串会被转换为十六进制形式;在 VM 混淆下,还会把一整个虚拟机解释器与您的字节码打包在一起。不必过于担心体积 —— 混淆后的代码用 GZIP 压缩效果极好,而大多数服务器默认就启用了 GZIP。
不建议这样做,某些情况下还会破坏代码(尤其是启用了自我防护时)。不过,您可以在混淆之前先用压缩工具处理代码。
对于小于 4.4MB 的文件,源码完全在内存中处理,并立即以混淆结果返回。对于更大的文件(Team/Business 套餐),我们会将其临时上传到安全存储,并在混淆完成后立即删除。作为额外保障,还有一个清理任务每 5 分钟运行一次,删除任何存在超过 5 分钟的文件。您的代码绝不会被留存。
不能,混淆后的代码无法还原回原始代码,因此请务必妥善保管原始文件。
支持。您可以在混淆选项中将目标环境选择为 "Node",以针对 Node.js 环境优化输出。
我们支持 ES2015(ES6)以及所有现代 JavaScript 特性,包括 ES2022+ 语法、类私有字段、async/await、可选链等。TypeScript 和 JSX 必须先编译为 JavaScript 才能混淆。使用付费套餐时,您还可以混淆 HTML 文件 —— 只需给想要保护的 <script> 标签加上 data-javascript-obfuscator 属性,它们就会被逐个混淆,同时保留 HTML 结构。请注意,每个被标记的脚本中的代码必须自成一体(不引用其他脚本),且 ES 模块脚本会被跳过。
混淆后的输出 —— 包括 VM 解释器和自我防护层 —— 在常青版桌面浏览器以及 iOS 16+(大致覆盖最近 3 年)上得到积极支持与测试。更旧的浏览器按尽力而为的方式支持,底线是支持 ES2015 模块;低于该标准的环境,包括 Internet Explorer,均不在支持范围内。
价格与账号
关于套餐、账单和用量限制的问题。
pricing.faq.usageMeasured.answer
pricing.faq.exceedLimit.answer
pricing.faq.upgradeDowngrade.answer
pricing.faq.cancel.answer
pricing.faq.paymentMethods.answer
