Обфускатор JavaScript
Обфускация повышает стоимость чтения вашего исходного кода JavaScript, не абсолютно (стопроцентной защиты фронтенда не существует), но достаточно, чтобы отбить желание бегло его изучать и замедлить автоматический парсинг. Этот инструмент применяет кодирование строковых массивов, искажение идентификаторов, уплощение потока управления и опциональное внедрение мёртвого кода, причём каждую опцию можно включать в зависимости от того, насколько агрессивно вы хотите действовать.
Как обфусцировать JavaScript
-
1
Вставьте исходный код
Любой корректный JavaScript. Если код опирается на конкретные имена глобальных свойств хост-страницы, задайте их как зарезервированные.
-
2
Выберите приёмы
Кодирование строк (hex / base64), искажение идентификаторов, уплощение потока управления, внедрение мёртвого кода, самозащитная обёртка.
-
3
Выберите целевой профиль
Браузер (совместимость с ES5, без API Node), Node.js (разрешает `require`, `Buffer`) или низкий (в основном минификация).
-
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 похожих на адрес записей для макетов и тестов в трёх упрощённых форматах.
Инструмент доступен на других языках
- Obfuscator JavaScript [ID]
- JavaScript難読化ツール [JA]
- JavaScript-obfuskerare [SV]
- JavaScript 난독화 도구 [KO]
- เครื่องมือปิดบังโค้ด JavaScript [TH]
- Obfuskator JavaScript [PL]
- JavaScript-Obfuscator [DE]
- Trình làm rối mã JavaScript [VI]
- Ofuscador de JavaScript [PT]
- Ofuscador de JavaScript [ES]
- مُبهِّم JavaScript [AR]
- JavaScript-obfuscator [NL]
- Obfuscateur JavaScript [FR]
- JavaScript混淆器 [ZH]
- JavaScript Obfuscator [EN]
- Offuscatore JavaScript [IT]
- JavaScript Kod Gizleme Aracı [TR]