VM Self Defending
Смотреть
Obfuscator.io Advanced Defenses: Self-Defending, Debug Protection, Domain Lock
Опция 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.
