文档
/
VM 混淆
/

VM Self Defending

VM Self Defending

Pro
v6.2.0+

观看

Obfuscator.io Advanced Defenses: Self-Defending, Debug Protection, Domain Lock

在 YouTube 观看

vmSelfDefending 选项为 VM 运行时增加多层篡改检测、代码完整性校验、反 Hook 以及反逆向工程保护。与 vmDebugProtection 结合使用时,它会让人工分析和 AI 辅助分析都变得困难得多。

此选项会强制启用 vmBytecodeArrayEncoding,并为 VM 执行增加开销。请在您自己的热点路径上测量其影响。

每项检测如何响应,以及如何把检测结果上报到您的后端而不只是中断,请参阅 VM 防御遥测与响应;vmSelfDefending 会在 automation、debugger、tamper 和 integrity 这几个响应类别中发出检测结果。

推荐: 与 vmDebugProtection、vmBytecodeArrayEncodingKey 和 vmBytecodeArrayEncodingKeyGetter 一起使用,以获得最强保护。

运行环境兼容性

敏感环境检测

此选项会把混淆后的代码绑定到其目标运行环境,并使用高级浏览器指纹识别来检测自动化工具。受此选项保护的代码在以下环境中运行时会有意中断:

  • 无头浏览器(无头 Chrome/Chromium、PhantomJS)
  • 浏览器自动化工具(Puppeteer、Playwright、Cypress、Selenium/ChromeDriver、Nightmare)
  • Node.js(当 target 设为 browser 时)
  • jsdom 或类似的服务端 DOM 模拟环境
  • 原生浏览器内置对象已被 Hook 或替换的环境(除非通过 browserEnvironment.hookedBuiltins 声明)

代码在常规浏览器(Chrome、Firefox、Safari、Edge)中能够正常运行,包括在 iframe、浏览器扩展(内容脚本)和 Web Worker 中加载的情况。

请根据实际运行环境选择 target。Browser 和 Node 构建包含不同的防御:node 目标会省略依赖仅浏览器 API 的防御,而在 Node 下运行的 browser 构建会如上所述中断。

当 browserEnvironment.hookedBuiltins 设为 true(v7.15.0+)时,如果运行环境合法地用 JavaScript 包装器替换了原生内置对象,Self Defending 会容忍这种情况,而不将其视为篡改,因此受保护的代码仍能在其中运行。这会有意放宽对内置对象 Hook 的检测;VM 虚拟化、反调试和完整性保护不受影响。同一选项的 transport 字段会把构建绑定到提供它的协议上。

Self Defending 会校验自身输出的完整性,因此之后请不要对混淆后的代码进行压缩、格式化或其他改写。请在混淆步骤之前对源码运行这些工具。

测试与 CI

这些防御同样会作用于您自己的智能体、自动化工具和调试器。它们可能会停止执行、抛出无关的错误或产生错误的结果。此选项旨在阻止自动化分析,无法与任何自动化框架安全地配合使用,因此请针对一个禁用了 vmSelfDefending 的独立测试构建运行功能测试。测试与 CI 列出了该构建需要覆盖的全部选项。