Browser Environment
声明你的生产构建产物以何种方式提供,使受保护的代码能够将其完整性绑定到它。
browserEnvironment 选项声明生产环境构建产物所处环境的事实,使受保护的代码能够将自身绑定到这些事实上或据此作出反应。它是一个小对象,每个字段仅在与某一特定防护配合时生效 - 该选项单独使用不起任何作用:
transport
生产环境提供该 bundle 所用的协议 - 'http' 或 'https'。与 vmSelfDefending 配合时生效。
设为 'https' 时,逆向工程师用纯 HTTP 提供的副本将无法正确运行。设为 'http' 或不设置该字段则不会添加此类保护。
声明了 transport: 'https' 的构建产物只在确实通过 https: 提供的场景下才能正确运行。其他任何协议都会破坏它,因此只有当加载你的生产构建产物的每一种场景都是 HTTPS 时才声明它。以下情形被排除在外:
- 纯
http://,包括开发时的http://localhost; file://- Electron、Cordova 及其他打包应用;blob:与about:嵌入 - 在about:blank或srcdociframe 中运行的 bundle。
客户端的 HTTP→HTTPS 重定向仍会先渲染 HTTP 页面,因此 bundle 必须在重定向完成之后才运行。
hosting
生产环境 bundle 的托管来源 - 'remote' 或 'local'。与 vmDebugProtection 配合时生效,且仅限 browser 和 browser-no-eval 目标。需要混淆器版本 7.14.0 或更高。
设为 'remote' 时,逆向工程人员取走并在自己本地环境中运行的副本会被视为运行时环境不匹配,自动化防御会按 vmDefenseReaction 的配置作出反应。'local' 或未设置该字段则不会添加此类保护。
声明了 hosting: 'remote' 的构建产物仅在从远程主机加载时才能正常运行。从本地环境 - localhost、开发服务器、file:// - 打开的 bundle 会被有意视为不匹配,因此只有在加载生产环境构建产物的每个上下文都通过远程方式提供时才声明它,并且不要将其用于本地开发、测试和 CI 所用的构建产物。
hookedBuiltins
设为 true,声明你的生产构建所运行的运行时会合法地用 JavaScript 包装函数替换原生内置对象-应用自身的防篡改机制、宿主页面,或共享同一 realm 的其他浏览器扩展。与 vmSelfDefending 配合时生效。需要混淆器版本 7.15.0 或更高。
通常情况下,Self Defending 会把被替换的原生内置对象视为篡改并阻止构建运行。设置 hookedBuiltins: true 后,它会容忍这样的环境,受保护的代码仍能运行。false 或未设置该字段则保持严格行为。
hookedBuiltins 会有意放宽篡改检测:一旦设置,分析者为了检查你的代码而包装这些相同的内置对象时也不会再被阻止。VM 虚拟化、反调试和完整性保护不受影响。仅当已知你的生产运行时会 Hook 内置对象、并且可以接受这种较弱的保证时才启用它。
支持的目标
browserEnvironment 仅适用于 browser、browser-no-eval 和 service-worker 目标。对于 node、userscript 和 bytenode,该选项会被拒绝 - 混淆会以校验错误失败,而不是静默丢弃该设置。hosting 的范围更窄:在 service worker 上会被接受,但在那里不绑定任何内容。
在仪表盘中,Transport、Hosting 和 Hooked Builtins 控件位于 Advanced Protection 面板中。每个控件只有在与之配对的防护开启 - Transport 和 Hooked Builtins 对应 VM Self Defending,Hosting 对应 VM Debug Protection - 且目标支持时才可编辑。
要求
transport和hookedBuiltins与vmSelfDefending配合时生效,hosting与vmDebugProtection配合时生效;否则它们都不起作用。browser、browser-no-eval或service-worker目标(hosting仅限browser或browser-no-eval)。- 混淆器版本:
transport需要 7.9.0 或更高,hosting需要 7.14.0 或更高,hookedBuiltins需要 7.15.0 或更高。
