浏览器环境
声明你的生产构建产物以何种方式提供,使受保护的代码能够将其完整性绑定到它。
browserEnvironment 选项声明生产环境构建产物所处环境的事实,使受保护的代码能够将自身绑定到这些事实上或据此作出反应。它是一个小对象,每个字段仅在与某一特定防护配合时生效 —— 该选项单独使用不起任何作用:
browserEnvironment: { transport: 'https', hosting: 'remote' }
transport
生产环境提供该 bundle 所用的协议 —— 'http' 或 'https'。与 vmSelfDefending 配合时生效。
设为 'https' 时,逆向工程师用纯 HTTP 提供的副本将无法正确运行。设为 'http' 或不设置该字段则不会添加此类保护。
hosting
生产环境 bundle 的托管来源 —— 'remote' 或 'local'。与 vmDebugProtection 配合时生效,且仅限 browser 和 browser-no-eval 目标。需要混淆器版本 7.14.0 或更高。
设为 'remote' 时,逆向工程人员取走并在自己本地环境中运行的副本会被视为运行时环境不匹配,自动化防御会按 vmDefenseReaction 的配置作出反应。'local' 或未设置该字段则不会添加此类保护。
hookedBuiltins
设为 true,声明你的生产构建所运行的运行时会合法地用 JavaScript 包装函数替换原生内置对象——应用自身的防篡改机制、宿主页面,或共享同一 realm 的其他浏览器扩展。与 vmSelfDefending 配合时生效。需要混淆器版本 7.15.0 或更高。
通常情况下,Self Defending 会把被替换的原生内置对象视为篡改并阻止构建运行。设置 hookedBuiltins: true 后,它会容忍这样的环境,受保护的代码仍能运行。false 或未设置该字段则保持严格行为。
browserEnvironment: { hookedBuiltins: true }
支持的目标
browserEnvironment 仅适用于 browser、browser-no-eval 和 service-worker 目标。对于 node、userscript 和 bytenode,该选项会被拒绝 —— 混淆会以校验错误失败,而不是静默丢弃该设置。hosting 的范围更窄:在 service worker 上会被接受,但在那里不绑定任何内容。
要求
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 或更高。
示例
JavaScriptObfuscator.obfuscate(code, {
vmObfuscation: true,
vmSelfDefending: true,
vmDebugProtection: true,
target: 'browser',
browserEnvironment: { transport: 'https', hosting: 'remote' }
});