VM Debug Protection
Смотреть
Obfuscator.io Advanced Defenses: Self-Defending, Debug Protection, Domain Lock
Опция vmDebugProtection добавляет в среду выполнения VM меры противодействия отладке, что значительно затрудняет реверс-инжиниринг защищённого кода. Реакция на каждое срабатывание задаётся категориями debugger, automation и sandbox опции vmDefenseReaction.
Если browserEnvironment.hosting имеет значение 'remote' (v7.14.1+), Debug Protection также привязывает сборку к тому, что она отдаётся с удалённого хоста: копия, отдаваемая с локального хоста разработки, считается несоответствием среды выполнения, и срабатывают защиты от автоматизации.
Эти защиты действуют и против ваших собственных агентов, средств автоматизации и отладчиков. Они могут остановить выполнение, выбросить посторонние ошибки или выдать неверные результаты. Для функциональных тестов используйте отдельную тестовую сборку; в разделе Тестирование и CI показано, какие опции в ней переопределяются.
Обнаружение инспектора
Начиная с обфускатора 8.0.0, vmDebugProtection принимает не только логическое значение, но и объект. Объект оставляет Debug Protection включённой, но ослабляет один детектор:
inspectorDetection (по умолчанию включён) обнаруживает подключённый инспектор Chrome DevTools Protocol или активный отладчик и реагирует на них. Открытие инструментов разработчика в браузере подключает такой сеанс, поэтому открытый инспектор обнаруживается и вызывает реакцию. Оставляйте его включённым в продакшене; выключайте, только если ваши пользователи открывают инструменты разработчика по легитимным причинам. В панели управления это вложенный переключатель Inspector Detection под VM Debug Protection (v8.0.0+), который появляется, когда Debug Protection включена.
После обнаружения код возвращается к работе только после перезагрузки страницы. Закрытие инструментов разработчика не восстанавливает защищённый код: пока страница не будет перезагружена, каждый следующий вызов выбрасывает ошибки, которые ничего не объясняют, например Uncaught 0, или, при реакции decoy, возвращает неверные результаты. При перезагрузке теряется всё, что пользователь не сохранил. Чтобы сохранить это или сначала показать сообщение, выполните собственную обработку в vmDefenseHook: он вызывается до того, как сработает защита. Для защищённого кода инструменты разработчика и другие инструменты, подключающиеся по тому же протоколу, выглядят одинаково, поэтому, разрешая пользователям открывать инструменты разработчика, вы пускаете и эти инструменты.
Фреймворки автоматизации. При включённом inspectorDetection (по умолчанию) управление защищённой страницей через инструмент на основе CDP (Puppeteer, Playwright, Selenium/ChromeDriver) распознаётся как подключённый инспектор. vmDebugProtection: { inspectorDetection: false } отключает только детектор инспектора; детектор автоматизации Debug Protection по-прежнему может реагировать на управляемый браузер. Для сборок автоматических тестов следуйте разделу Тестирование и CI, где отключаются vmDebugProtection и vmSelfDefending.
Content Security Policy
Если ваша Content Security Policy запрещает динамическое выполнение кода (без unsafe-eval), используйте target browser-no-eval и проверьте результат под этой политикой. Этот target использует запасной механизм для проверок, которые иначе опираются на динамическое выполнение. То же относится к браузерным расширениям со строгой CSP: для наилучшей совместимости используйте browser-no-eval.
