Перейти к содержанию
Избранное

Обфускатор JavaScript (eval)

Обновлено:

Вставьте JavaScript в поле кода, чтобы получить упакованную версию на основе eval. Скопируйте результат из поля «Обфусцированный код».

Инструмент обфускации JavaScript на основе eval

Поля ввода
Если включено, результат будет автоматически обновляться при изменении любого значения.

Формула обфускатора JavaScript (eval)

Формула
\[O=\operatorname{Packer.pack}(S,\mathrm{true},\mathrm{true})\]

Где:

  • \(S\) — JavaScript, введённый в поле ввода.
  • \(O\) — упакованный JavaScript, отображаемый как результат.
  • Первое значение \(\mathrm{true}\) включает кодирование токенов в системе base-62; второе включает сокращение переменных.

Пакер также минимизирует входные данные перед созданием обёртки на основе eval. Кодирование токенов в base-62 — это не кодирование Base64 и не шестнадцатеричное кодирование.

Обфускатор JavaScript (eval) — пример вычисления

Пример: оставьте стандартный код alert('Hello, world!'); в поле «JavaScript-код для обфускации».

\[S=\texttt{alert('Hello, world!');},\qquad O=\operatorname{Packer.pack}(S,\mathrm{true},\mathrm{true})\]

Результат: поле «Обфусцированный код» содержит упакованный фрагмент JavaScript на основе eval. При запуске в среде, где разрешён eval(), выполняется исходный alert с выводом «Hello, world!». В поле результата находится код, а не само сообщение alert.

Как пользоваться калькулятором

  1. Введите или вставьте свой скрипт в поле «JavaScript-код для обфускации». Изначально в поле содержится код alert('Hello, world!');, который можно использовать для быстрой проверки.
  2. Запустите калькулятор для обработки кода. Если поле пустое, вместо результата вы увидите сообщение с просьбой ввести код.
  3. Скопируйте сгенерированный скрипт из поля «Обфусцированный код» и протестируйте его там, где планируете использовать.

Вставляйте JavaScript-код, а не HTML-теги <script>. Настраивать кодирование, сжатие или уровень защиты здесь не нужно: инструмент вызывает пакер с обоими доступными опциями, включёнными по умолчанию.

Что делает обфускация на основе eval

Этот инструмент преобразует исходный JavaScript в упакованный скрипт, который восстанавливает код и выполняет его через eval(). Его цель — сделать исходный код менее читаемым при беглом просмотре. В отличие от обычного вычисления он не выдаёт численный ответ: «Обфусцированный код» — это другая JavaScript-программа, предназначенная для выполнения работы исходного кода.

Пакер минимизирует скрипт, сокращает переменные там, где его преобразование это поддерживает, и заменяет токены более короткими представлениями в base-62. Полученная обёртка восстанавливает упакованный код при запуске. Base-62 описывает алфавит токенов, используемый этим способом упаковки; это не означает, что весь скрипт преобразуется в строку Base64. Инструмент не предоставляет выбора вариантов кодирования.

Обфускация — это не шифрование. Любой, кто может запустить или изучить результат, может постараться восстановить исходный код, в том числе разобрав этап распаковки. Используйте этот подход, чтобы затруднить беглое чтение, а не для защиты паролей, секретных ключей API, проверок лицензий или другой информации, которая должна оставаться конфиденциальной. Чтобы получить более читаемую версию упакованного кода, воспользуйтесь инструментом JavaScript Eval Decode.

Также не путайте упаковку с оптимизацией размера файла. Хотя минимизация удаляет лишний текст исходника, обёртка распаковки добавляет собственный код, поэтому короткий скрипт может стать больше. Если вас прежде всего беспокоит размер при загрузке, сравните результат с инструментом JavaScript Compress.

Допущения и практические ограничения

  • Политика выполнения имеет значение. Content Security Policy, запрещающая eval(), может помешать запуску упакованного скрипта. Возможно, сайту придётся использовать распакованный скрипт, а не ослаблять политику.
  • Тестируйте фактический результат. Сокращение переменных и упаковка могут повлиять на код, зависящий от текста исходника, имён переменных или особенностей областей видимости. Проверьте сгенерированный скрипт на целевом движке JavaScript и с вашим набором тестов, прежде чем заменять рабочий код.
  • Не считайте результат безопасным только потому, что он выглядит нечитаемым. Упакованный JavaScript по-прежнему может выполнять любые действия исходного кода. Проверяйте недоверенный код перед выполнением.
  • Сохраняйте исходный код. Упакованный результат труднее редактировать и отлаживать. Поддерживайте читаемую версию для внесения изменений, поиска ошибок и последующих сборок.

Лучшая проверка — параллельный тест: запустите исходный и упакованный скрипты в одинаковых условиях, сравните их наблюдаемое поведение и убедитесь, что ваша среда развёртывания разрешает динамическое вычисление.

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

Как сделать пакер JavaScript на основе eval вручную?

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

Будет ли упакованный код работать с JavaScript-модулями?

Не обязательно. Статические объявления import и export требуют модульного синтаксиса и не могут быть просто помещены внутрь вызова eval(). Если ваш исходник их использует, упаковывайте код только после подходящего этапа сборки, где модули объединены или преобразованы. Протестируйте результат в той же конфигурации браузера или среды выполнения, которую будете использовать при развёртывании.

Поддерживает ли этот обфускатор современный синтаксис JavaScript?

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

Замедляет ли упаковка на основе eval работу JavaScript?

Она может добавить нагрузку при запуске, поскольку обёртке нужно восстановить скрипт до выполнения eval(). Величина эффекта зависит от размера скрипта, частоты его запуска и движка JavaScript; код, который многократно выполняется после распаковки, может почти не отличаться. Измерьте время загрузки и выполнения в целевой среде, а не полагайте, что визуально меньший скрипт работает быстрее.

Почему специальные символы в упакованном результате выглядят иначе?

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

Как понять, насколько хороша обфускация?

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

Как отлаживать ошибку в упакованном JavaScript?

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *