常见问题
通用问题
关于 JavaScript 混淆及其工作原理的常见问题。
保护代码的理由有很多:防止他人直接复制您的成果(对 HTML5 游戏这类客户端项目尤为重要);让代码更难被理解和修改;以及保护尚未收到付款的工作成果,让您可以先向客户展示一个可运行的构建,而不必交出源代码。
标准混淆会把您的 JavaScript 改写成更难读懂的 JavaScript:名称被替换,字符串被移动并编码,控制流被重组,但结果仍然是调试器可以单步执行的 JavaScript。VM(虚拟机)混淆则把函数体编译为自定义字节码,并附带一个运行它的内嵌解释器,因此受保护的逻辑不再以 JavaScript 的形式存在。哪些函数会被覆盖以及如何选择它们,请参阅VM 混淆。
可以。将 vmTargetFunctionsMode 设为 comment,再用 /* javascript-obfuscator:vm */ 标记每个需要保护的函数。在混淆之前运行的任何构建步骤中都要保留这些注释。请参阅针对特定函数。
不可以。API 密钥、机密信息和凭据绝不能存放在前端代码中。即便采用最高级别的混淆,前端 JavaScript 中的任何数据都可能被有心的攻击者提取出来。混淆会加大逆向工程的难度,但它不是加密,不能作为保护机密信息的手段。正确的做法是:把机密信息保存在后端服务器上,在服务端使用环境变量,通过后端代理 API 调用以隐藏密钥,或使用由您的服务器签发的短期令牌。
无论分析由人、工具还是 AI 助手完成,混淆都会增加理解和修改代码所需的工作量,但无法保证逆向工程不可能发生。在攻击者控制的环境中,运行时仍可被观察。请将机密信息和最终安全决策保留在服务器端。VM 如何转换代码。
首先排除运行时防御的影响。VM Self Defending 和 VM Debug Protection 会在自动化工具、无头浏览器和调试器下,以及 target 与实际运行环境不符时,有意中断执行,因此请在关闭它们的单独测试构建上运行功能测试。如果该构建仍然出错,请使用 vmTargetFunctionsMode: 'comment' 每次只虚拟化一个函数来缩小问题范围。故障排查指南介绍了每个步骤以及错误报告中应包含的内容。
混淆器会添加代码:标识符会换成生成的名称,字符串会被移入字符串数组并附带访问函数(可选编码);在 VM 混淆下,还会把一整个虚拟机解释器与您的字节码打包在一起。不必过于担心体积 - 混淆后的代码用 gzip 或 Brotli 压缩效果很好,而大多数服务器默认就启用了它们。
不可以。改写输出可能会破坏它,尤其是在启用了 Self Defending 或 VM Self Defending 时,它们会检测代码的改动。您可以在混淆之前运行压缩工具,前提是它会保留 /* javascript-obfuscator:vm */ 这类 javascript-obfuscator 注释。
我们不会保留您的源代码。JavaScript 的基础混淆在您的浏览器中运行。VM 混淆和 HTML 混淆会把源代码发送到我们的服务器,服务器处理后即将其丢弃;当请求大于 4.4 MB 时,Team 和 Business 套餐会把它上传到临时存储,并在处理后删除。为处理滥用行为并分析使用情况,我们会保留每份混淆输出的 SHA-256 哈希值以及所用的部分设置(例如预设、目标环境和 VM 防御),为期三个月,绝不保留代码本身或其中的任何内容。控制台历史记录只保存在您的浏览器中,可在历史记录中管理。
不能。混淆器不会保留您原来的名称、注释或格式,因此输出无法还原成您的源码。这并不是一项安全保证(请参阅上方关于反混淆的问题),但它确实意味着您必须妥善保管原始文件。
支持。您可以在混淆选项中将 Target 选择为 "Node",以针对 Node.js 环境优化输出。
支持 ES2015+ 语法、async/await、可选链和类私有字段;更新的语法请在所选的混淆器版本上进行测试。请先编译 TypeScript 和 JSX 并打包应用,再进行混淆 - 请参阅运行环境兼容性。HTML 文件通过 parseHtml 获得支持;请参阅混淆 HTML 文件。
混淆后的输出 - 包括 VM 解释器和 Self Defending 层 - 在常青版桌面浏览器以及 iOS 16+(大致覆盖最近 4 年)上得到积极支持与测试。更旧的浏览器按尽力而为的方式支持,底线是支持 ES2015 模块;低于该标准的环境,包括 Internet Explorer,均不在支持范围内。
价格与账号
关于套餐、账单和用量限制的问题。
用量按您输入源代码的字节大小计算。为保证资源分配公平,每次混淆任务最少计 0.1 MB(102,400 字节)。例如,混淆一个 50 KB 的文件会按 0.1 MB 计入配额。大于 0.1 MB 的文件则按实际大小计算。
达到 VM 混淆限额后,您仍可免费且不限量地继续使用标准(浏览器端)混淆。付费套餐的 VM 配额每月在订阅开始日期的对应日重置,年付套餐也是如此。Free 套餐的额度为终身限额,不会重置。设有每日 VM 限额的套餐在达到该限额后,第二天即可再次使用 VM 混淆。您可以随时升级套餐,以获得更多 VM 混淆配额。
可以,您随时都能升级或降级套餐。升级时,我们会按当前计费周期的剩余时间按比例收费。降级时,新价格将从您的下一个计费周期开始生效。
您可以随时取消订阅。在当前计费周期结束之前,您仍可继续使用所订套餐。请注意,对于未走完的计费周期或未使用的时间,我们不提供退款。
我们通过安全的支付服务商 Stripe 接受所有主流信用卡(Visa、Mastercard、American Express)和借记卡。所有交易均经过加密并符合 PCI 标准。
