VM Debug Protection
观看
Obfuscator.io Advanced Defenses: Self-Defending, Debug Protection, Domain Lock
vmDebugProtection 选项为 VM 运行时增加反调试措施,使受保护代码的逆向工程难度显著提高。每项检测如何响应,由 vmDefenseReaction 的 debugger、automation 和 sandbox 类别决定。
当 browserEnvironment.hosting 设为 'remote'(v7.14.1+)时,Debug Protection 还会把构建绑定到从远程主机提供的场景:从本地开发主机提供的副本会被视为运行环境不匹配,自动化防御随之作出响应。
这些防御同样会作用于您自己的智能体、自动化工具和调试器。它们可能会停止执行、抛出无关的错误或产生错误的结果。请为功能测试使用独立的测试构建;测试与 CI 列出了该构建需要覆盖的选项。
检查器检测
从混淆器 8.0.0 起,vmDebugProtection 除布尔值外还接受对象。传入对象可以在保持 Debug Protection 开启的同时放宽单个检测器:
inspectorDetection(默认开启)会检测已连接的 Chrome DevTools Protocol 检查器或处于活动状态的调试器,并作出响应。打开浏览器的开发者工具就会连接这样的会话,因此打开的检查器会被检测到并触发响应。 生产环境中请保持开启;只有当您的用户确实需要正常打开开发者工具时才将其关闭。在控制台中,它对应 VM Debug Protection 下的 Inspector Detection 子开关(v8.0.0+),开启 Debug Protection 后才会显示。
一旦检测到,只有重新加载页面才能恢复代码。 关闭开发者工具并不能恢复受保护的代码:在页面重新加载之前,之后的每次调用都会抛出毫无意义的错误(例如 Uncaught 0),或者在 decoy 响应下返回错误的结果。重新加载会丢失用户尚未保存的所有内容。若要先保存这些内容或显示提示信息,请在 vmDefenseHook 中运行您自己的处理逻辑,它会在防御响应之前被调用。对受保护的代码而言,开发者工具与通过同一协议连接的其他工具看起来没有区别,因此允许用户打开开发者工具,也就放行了这些工具。
自动化框架。 在 inspectorDetection 开启(默认)时,使用基于 CDP 的工具(Puppeteer、Playwright、Selenium/ChromeDriver)驱动受保护的页面,会被检测为已连接的检查器。vmDebugProtection: { inspectorDetection: false } 只会关闭检查器检测器;Debug Protection 的自动化检测器仍可能对被驱动的浏览器作出响应。对于自动化测试构建,请遵循测试与 CI,其中会禁用 vmDebugProtection 和 vmSelfDefending。
内容安全策略
如果您的内容安全策略(CSP)禁止动态求值(没有 unsafe-eval),请使用 browser-no-eval 目标,并在该策略下验证输出。此目标会为原本依赖动态求值的检查使用回退方案。具有严格 CSP 的浏览器扩展同样适用:请使用 browser-no-eval 以获得最佳兼容性。
