Обфускатор 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%. Самые тяжёлые настройки могут утроить размер. Перед выпуском проверяйте счётчик размера вывода.

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

Смешивание цветов

Смешайте два HEX-цвета в 2-20 равномерных образцов. Каждый промежуточный цвет показывается как HEX-код в верхнем регистре, включая оба края.

Генератор вымышленных телефонных номеров

Создавайте до 50 вымышленных номеров из официально зарезервированных диапазонов пяти стран.

Генератор конфигурации webpack

Создайте webpack.config.js для webpack 5 по короткой форме: задайте entry, папку вывода и режим, затем включите TypeScript, Babel, загрузчик CSS, HtmlWebpackPlugin и сервер разработки.

Генератор бейджей README

Создавайте бейджи shields.io для файлов README на GitHub: статус сборки, версия, лицензия, число загрузок и покрытие кода. Просмотрите и скопируйте фрагмент Markdown.

Генератор случайных букв

Генерируйте случайные буквы A-Z. Выберите количество, верхний или нижний регистр либо смешанный вариант для игр, заданий и уроков.

Генератор случайных адресов

Создавайте 1–20 похожих на адрес записей для макетов и тестов в трёх упрощённых форматах.

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