Обфускатор JavaScript

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

Как обфусцировать JavaScript

  1. 1

    Вставьте исходный код

    Любой корректный JavaScript. Если код опирается на конкретные имена глобальных свойств хост-страницы, задайте их как зарезервированные.

  2. 2

    Выберите приёмы

    Кодирование строк (hex / base64), искажение идентификаторов, уплощение потока управления, внедрение мёртвого кода, самозащитная обёртка.

  3. 3

    Выберите целевой профиль

    Браузер (совместимость с ES5, без API Node), Node.js (разрешает `require`, `Buffer`) или низкий (в основном минификация).

  4. 4

    Обфусцировать

    Инструмент выводит преобразованный код с указанием изменения размера. При агрессивных настройках результат может оказаться в 3–5 раз крупнее исходника.

Приёмы и во что они обходятся

Приём Повышает усилия атакующего Стоимость во время выполнения Стоимость по размеру
Переименование переменных Низкая Пренебрежимо мала Меньше (побочный эффект минификации)
Кодирование строковых массивов Средняя Крошечная (один поиск на строку) +10–30%
Уплощение потока управления Высокая Заметная (~2–5%) +50–150%
Внедрение мёртвого кода Низкая (показная защита) Небольшая +20–50%
Самозащитная обёртка Средняя Разовая проверка +5–10%
Защита от отладки Средняя (обнаруживает DevTools) Разовая проверка +5%
VM / виртуализация (премиум) Очень высокая Большая (5–20x) +300–500%

Что обфускация защитить не может

  • Секреты. Любую константу в вашем исходном коде фронтенда можно прочитать, было бы время. Ключи API, секреты аутентификации, логику ценообразования, никогда не полагайтесь на обфускацию, чтобы их спрятать. Перенесите их на сервер.
  • Алгоритмы с наблюдаемым выводом. Если браузер способен это выполнить, атакующий с отладчиком сможет наблюдать каждый вход и выход. Обфускация это замедляет, но не останавливает.
  • Массовый автоматический парсинг. Защита от парсинга опирается на поведенческое обнаружение (фингерпринтинг, ограничение частоты, CAPTCHA), а не на обфускацию исходного кода.

Когда обфускация оправдана

  • Защита от вмешательства во встроенных SDK (лицензирование, рекламные SDK, игровые клиенты).
  • Повышение стоимости для лёгкого копирования конкурирующей реализации.
  • Усложнение автоматической классификации скриптов для парсеров широкого профиля.

Когда это контрпродуктивно

  • У вас уже есть сборщик. Webpack + Terser в продакшен-режиме уже минифицируют и искажают локальные переменные. Второй проход обфускации почти ничего не даёт и лишь раздувает размер бандла.
  • Вы оптимизируете First Paint / Core Web Vitals. Агрессивная обфускация утраивает бандл, а это бьёт по FCP и LCP.
  • Вам нужно отлаживать продакшен. Тяжёлая обфускация делает трассировки стека Sentry почти бесполезными без соответствующей карты исходного кода, а публикация карты сводит обфускацию на нет.

Частые ошибки

  • Считать обфускацию равнозначной шифрованию. Это не так, это лишь препятствие, замедляющее анализ.
  • Отправлять карту исходного кода вместе с обфусцированным бандлом в продакшен. Это полностью нейтрализует обфускацию.
  • Обфусцировать сторонние библиотеки, уже загруженные с CDN. Вы получаете штраф по размеру без какой-либо выгоды.

Часто задаваемые вопросы

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

Если вы обращаетесь к свойствам динамически (obj["field_name"], Object.keys(obj)) или полагаетесь на конкретные имена функций/классов для хост-страницы, добавьте их в список зарезервированных. Без этого переименование свойств может сломать внешние интеграции.

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

Лёгкая обфускация добавляет ~10–30%. Уплощение потока управления вместе со строковыми массивами добавляет 50–150%. Самые тяжёлые настройки могут утроить размер. Перед выпуском проверяйте счётчик размера вывода.

Сопутствующие инструменты

Справочная таблица ASCII

Полная таблица ASCII от 0 до 127 с десятичным, шестнадцатеричным, восьмеричным и двоичным представлением, а также записью числовых ссылок HTML, включая NUL, LF и DEL.

Справочник сочетаний клавиш

Ищите документированные сочетания по умолчанию для VS Code, Chrome и Bash с GNU Readline в macOS, Windows и Linux.

Справочник символов HTML

Справочник HTML-сущностей с поиском, их именованными и числовыми кодами, а также копированием специальных символов и знаков одним кликом.

Шпаргалка по Markdown

Практический справочник Markdown с настоящим предпросмотром и готовыми для копирования примерами заголовков, списков, таблиц, кода, ссылок, изображений и синтаксиса GFM.

Счетчик FPS

Измерьте FPS браузера через requestAnimationFrame: сглаживание, минимальная и максимальная частота кадров, порог предупреждения и график по желанию. Работает локально, без загрузок и API.

Шпаргалка по регулярным выражениям

Поисковый справочник регулярных выражений для JavaScript, PCRE2/PHP, Python re и .NET. Сравнивайте токены, синтаксис движков, якоря, группы, проверки и флаги.

Инструмент доступен на других языках