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