Browser Environment

Pro
v7.9.0+

Укажите, по какой схеме отдаётся ваша продакшен-сборка, чтобы защищённый код мог привязать к ней свою целостность.

Опция browserEnvironment объявляет факты о среде, в которой отдаётся ваша продакшен-сборка, чтобы защищённый код мог привязать себя к ним или реагировать на них. Это небольшой объект, и каждое его поле действует только вместе с одной конкретной защитой — сама по себе опция ничего не делает:

browserEnvironment: { transport: 'https', hosting: 'remote' }

transport

Схема, по которой продакшен отдаёт бандл: 'http' или 'https'. Действует вместе с vmSelfDefending.

При 'https' копия, которую реверс-инженер раздаёт по обычному HTTP, не будет работать корректно. 'http' или неустановленное поле такой защиты не добавляет.

hosting

Откуда отдаётся продакшен-бандл: 'remote' или 'local'. Действует вместе с vmDebugProtection и только для таргетов browser и browser-no-eval. Требует обфускатор версии 7.14.0 или новее.

При 'remote' копия, которую аналитик забрал и запускает в своём локальном окружении, считается несоответствием среды выполнения, и защиты от автоматизации реагируют так, как настроено в vmDefenseReaction. 'local' или неустановленное поле не добавляет такой защиты.

Поддерживаемые таргеты

browserEnvironment применяется только к таргетам browser, browser-no-eval и service-worker. Для node, userscript и bytenode опция отклоняется — обфускация завершается ошибкой валидации, а не молча отбрасывает настройку. hosting ещё уже: для service worker оно принимается, но ничего там не привязывает.

Требования

  • transport действует вместе с vmSelfDefending, hosting — вместе с vmDebugProtection; иначе ни одно из них ничего не делает.
  • Таргет browser, browser-no-eval или service-worker (browser или browser-no-eval для hosting).
  • Обфускатор версии 7.9.0 или новее для transport, 7.14.0 или новее для hosting.

Пример

JavaScriptObfuscator.obfuscate(code, {
    vmObfuscation: true,
    vmSelfDefending: true,
    vmDebugProtection: true,
    target: 'browser',
    browserEnvironment: { transport: 'https', hosting: 'remote' }
});