VM Self Defending

Pro
v6.2.0+

Смотреть

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

Смотреть на YouTube

Опция vmSelfDefending добавляет в среду выполнения VM многоуровневое обнаружение вмешательства, проверки целостности кода, защиту от хуков и защиту от реверс-инжиниринга. В сочетании с vmDebugProtection она значительно затрудняет как ручной анализ, так и анализ с помощью ИИ.

Эта опция принудительно включает vmBytecodeArrayEncoding и добавляет накладные расходы к выполнению VM. Измеряйте их на своих часто выполняемых участках.

Как реагирует каждое срабатывание - и как сообщать о срабатываниях на свой бэкенд, а не только ломать выполнение, - описано в разделе Телеметрия и реакции защиты VM; vmSelfDefending сообщает о срабатываниях в категориях реакций automation, debugger, tamper и integrity.

Рекомендуется: для максимальной защиты используйте вместе с vmDebugProtection, vmBytecodeArrayEncodingKey и vmBytecodeArrayEncodingKeyGetter.

Совместимость со средой выполнения

Обнаружение чувствительных сред

Эта опция привязывает обфусцированный код к его целевой среде выполнения и использует продвинутый фингерпринтинг браузера для обнаружения инструментов автоматизации. Код, защищённый этой опцией, намеренно сломается при запуске в:

  • headless-браузерах (headless Chrome/Chromium, PhantomJS)
  • инструментах автоматизации браузера (Puppeteer, Playwright, Cypress, Selenium/ChromeDriver, Nightmare)
  • Node.js (когда target равен browser)
  • jsdom и подобных серверных эмуляциях DOM
  • средах, где нативные встроенные объекты браузера перехвачены или подменены (если это не объявлено через browserEnvironment.hookedBuiltins)

Код будет работать корректно в обычных браузерах (Chrome, Firefox, Safari, Edge), в том числе при загрузке внутри iframe, в браузерных расширениях (content scripts) и в Web Workers.

Выбирайте target под реальную среду выполнения. Сборки для браузера и для Node содержат разные защиты: target node не включает те, что опираются на API, доступные только в браузере, а сборка browser, запущенная под Node, ломается, как описано выше.

Если browserEnvironment.hookedBuiltins имеет значение true (v7.15.0+), Self Defending допускает среду выполнения, которая легитимно подменяет нативные встроенные объекты JavaScript-обёртками, вместо того чтобы считать это вмешательством, поэтому защищённый код там всё равно выполняется. Это намеренно ослабляет обнаружение хуков на встроенных объектах; виртуализация VM, VM Debug Protection и проверки целостности не затрагиваются. Поле transport той же опции привязывает сборку к схеме, по которой она отдаётся.

Self Defending проверяет целостность собственного результата, поэтому не минифицируйте, не форматируйте и никак иначе не переписывайте обфусцированный код после обфускации. Запускайте такие инструменты на исходном коде до этапа обфускации.

Тестирование и CI

Эти защиты действуют и против ваших собственных агентов, средств автоматизации и отладчиков. Они могут остановить выполнение, выбросить посторонние ошибки или выдать неверные результаты. Эта опция создана для предотвращения автоматизированного анализа и не может безопасно использоваться ни с одним фреймворком автоматизации, поэтому запускайте функциональные тесты на отдельной тестовой сборке с отключённой vmSelfDefending. Полный набор переопределений для такой сборки приведён в разделе Тестирование и CI.