JavaScript-деобфускатор

Вставьте кусок обфусцированного JavaScript, строки в шестнадцатеричном коде, односимвольные имена переменных, цикл-декодер в начале, и инструмент снимает слой за слоем: разэкранирует строки, встраивает массив подстановки, переименовывает переменные в читаемые заполнители, уплощает тривиальные обёртки и приводит результат в порядок. Удобно для анализа подозрительных фрагментов, которые вы вытащили со страницы или из вставленной ссылки на Pastebin.

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

  1. 1

    Вставьте зашифрованный исходный код

    Минифицированный, сжатый или вычисленный результат работы инструментов в стиле `javascript-obfuscator.io`.

  2. 2

    Пусть парсер проанализирует его.

    Массивы строк декодируются, числовые последовательности обрабатываются, а ветви с неэффективным кодом удаляются.

  3. 3

    Применить переименование

    Переменные с одной буквой `a`/`b`/`c` переименованы в `var1`, `var2` и т. д. это читаемые псевдонимы, не обязательно имеющие смысл.

  4. 4

    Приведите код в порядок

    Расставьте отступы, добавьте переносы строк и получите код, который действительно можно прочитать и осмыслить.

Приёмы, которые обращает деобфускатор

Обфускация Обратное преобразование
Строковые литералы с шестнадцатеричным экранированием Декодировать \x48\x69 обратно в "Hi"
Идентификаторы, закодированные по стандарту Unicode \u006E\u0061\u006D\u0065 -> name
Массив строк + функция декодирования Встроить массив, вызвать декодер на этапе разбора
Свёртка числовых констант 0x1F3 + 5 -> 504
Обёртки eval(...) Поднять внутренний код на верхний уровень
Уплощение потока управления (машина состояний) Обнаружить конструкцию switch-case и восстановить поток
Мёртвый код / бесполезные тернарные выражения Удалить ветви, которые никогда не выполняются
Имена в стиле _0x1a2b3c() Заменить на нарастающие var1, var2

Ограничения: то, чего инструмент не может делать

  • Восстановление исходных имён переменных. После переименования userEmail в a ни один инструмент не сможет угадать его снова; вы получаете читаемую структуру, а не первоначальную семантику.
  • Распаковка пользовательских виртуализаторов. Тяжёлые коммерческие средства запутывания кода (JScrambler, корпоративные версии Obfuscator.io) внедряют собственную виртуальную машину, интерпретирующую байт-код; для их обхода требуется ручная обратная разработка.
  • Выполнение произвольного кода. Деобфускатор статически вычисляет чистые выражения; он не запрашивает удалённые ресурсы, не создаёт элементы DOM и не обращается к сети.

Типичные сценарии использования

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

Безопасность и этика

Никогда не запускайте ненадёжный JavaScript во вкладке браузера, где вы вошли во что-то важное: такой код может считывать файлы cookie, вызывать внутренние API и похищать состояние. Сам деобфускатор работает с исходным кодом как с текстом; он не выполняет код, который вы вставляете.

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

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

Нет. Как только обфускатор переименует userEmail в _0x1a2b3c, исходное имя теряется. Деобфускатор предоставляет читаемые заменители (var1, var2) и правильную структуру, но не восстанавливает первоначальные семантические названия.

Нет. Он анализирует код в виде дерева структурных элементов (AST) и применяет статические преобразования. Чистые выражения (например, 0x1F3 + 5) сворачиваются, однако ничто не затрагивает сеть, cookie или DOM.

Да, однако результат обработки с помощью инструмента bundler минимизируется, а не намеренно затуманивается; в результате получается просто улучшенный код с восстановленными модульными оболочками. Если карты исходного кода доступны отдельно, они позволяют использовать значительно более понятные названия файлов.

Масштабные коммерческие инструменты (Enterprise JScrambler, пользовательские виртуальные машины) включают интерпретатор байткода, который статический анализ не может раскрыть. Эти инструменты позволяют получить лишь внешний уровень кода, однако основная логика остаётся непонятной без ручного разбора.

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

Справочная таблица 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. Сравнивайте токены, синтаксис движков, якоря, группы, проверки и флаги.

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