Как сделать обфускацию кода

Обновлено: 07.07.2024

Обфускация (от лат. obfuscare — затенять, затемнять; и англ. obfuscate — делать неочевидным, запутанным, сбивать с толку), или запутывание кода — приведение исходного текста или исполняемого кода программы к виду, сохраняющему ее функциональность, но затрудняющему анализ, понимание алгоритмов работы и модификацию при декомпиляции.

Содержание

Цели обфускации

Технологии

На уровне исходных текстов

На JavaScript, VBScript и подобных скрипт-языках пользователю доступен исходный текст программы. В этом случае форматированием текста и заменой имён можно сделать текст менее читаемым.

Код после обфускации:

На уровне машинного кода

Как правило, обфускация на уровне машинного кода уменьшает (а не увеличивает) скорость выполнения программы. Поэтому она применяется в критичных к безопасности, но не критичных к скорости местах программы, таких как проверка регистрационного кода.

Простейший способ обфускации машинного кода — вставка в него недействующих конструкций (таких как or ax, ax )

На уровне промежуточного кода

Назначение

Усложнение исследования кода

Простейший пример обфусцированного HTML:

Оптимизация

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

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

Недостатки

Потеря гибкости кода

Код после обфускации может стать более зависимым от платформы или компилятора.

Трудности отладки

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

Недостаточная безопасность

Ошибки в обфускаторах

Современный обфускатор — сложный программный комплекс. Зачастую в обфускаторы, несмотря на тщательное проектирование и тестирование, вкрадываются ошибки. Так что есть ненулевая вероятность, что прошедший через обфускатор код вообще не будет работать. И чем сложнее разрабатываемая программа, тем больше эта вероятность.

Вызов класса по имени

Большинство языков с промежуточным кодом могут создавать или вызывать объекты по именам их классов. Современные обфускаторы позволяют сохранить указанные классы от переименования, однако подобные ограничения сокращают гибкость программ.

В большинстве случаев код JavaScript является общедоступным. Это означает, что исходный код всегда будет подвержен некоторым угрозам:

  • его могут скопировать и использовать без разрешения автора;
  • код станет уязвимым для хакеров;
  • другим программистам будет раскрыта функциональная логика и алгоритмы программы.

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

Что такое обфускация в JavaScript?

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

К примеру, есть код:

Теперь рассмотрим тот же код, запутанный онлайн-обфускатором JavaScript:

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

Нужно ли обфусцировать код?

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

Когда вы продаете шаблон сайта

На рынке шаблонов веб-сайтов важно защитить вашу работу. К примеру, на Themeforest пользователям перед покупкой доступен предварительный просмотр шаблона. Это означает, что в своей работе вы будете использовать HTML, CSS и JS. Поэтому, если не обфусцируете код, каждый сможет загрузить ресурсы из предварительного просмотра вашего веб-сайта и работать с ними, не покупая шаблон.

Когда вы используете JavaScript в браузерных играх

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

Способы минимизации и обфускации в JavaScript и онлайн-сервисы

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

Минимизация кода — это процесс сжатия исходного кода с целью экономии памяти за счет уменьшения количества символов и пробелов в коде.

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

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

Давайте разберем это на примере:

После минимизации приведенный выше код будет выглядеть примерно так:

Как видите, несмотря на то, что код преобразован и некоторые лишние символы удалены, его логика все еще понятна. А при обфускации код будет выглядеть примерно так, как показано ниже:

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

Простая обфускация: инструменты

Самый популярный способ запутывания кода — использование инструментов минимизации и обфускации.

  • JSmin — инструмент для минимизации, сжимает файл на 40-50%;
  • YUI Compressor — минимизирует код;
  • JS Packer (обфускатор);
  • Closure Compiler (минимизатор).

Они превращают код:

В следующий вид:

Сложная обфускация: модули и плагины

Теперь давайте посмотрим на пример более сложной обфускации. Вы можете получить такой же результат с помощью модуля javascript-obfuscator, а также плагинов:

  • webpack-obfuscator;
  • gulp-javascript-obfuscator;
  • grunt-contrib-obfuscator.

Например, у нас есть исходный код:

Мы получим следующий результат:

Это фрагмент кода, в котором не используется буквенно-цифровая обфускация. Человеческому глазу это кажется невозможным реконструировать, но если мы запустим этот код с помощью автоматизированного инструмента обратного проектирования, мы сразу получим исходный код.

Преобразовать код можно и онлайн, например, с помощью:

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

В общей сложности 18 программ с открытым исходным кодом для обфускации и шифрования кода Java.

Обфускатор Java ProGuard

ProGuard - это бесплатное приложение для сжатия, оптимизации и микширования файлов Java. Он удаляет бесполезные классы, поля, методы и свойства. Максимально оптимизируйте байт-код, используйте короткие и бессмысленные имена для переименования классов, полей и методов. eclipse интегрировал Proguard. Дополнительная информация о ProGuard

Фреймворк для обработки байт-кода Java ASM

Путаница при сжатии JS и CSS JsCompressor

JsCompressor

JsCompressor в основном используется для сжатия и запутывания JS (Javascript) и CSS. Основанный на YUI Compressor, цель состоит в том, чтобы облегчить использование веб-разработчиками, которые не знакомы с Java или не любят сжатие командной строки. Возможности: 1. Сжимайте и скрывайте файлы JS или CSS во всем каталоге (включая подкаталоги) и генерируйте * .min.js или * .m . в той же папке.Дополнительная информация о JsCompressor

Считыватель байт-кода JClassLib

JClassLib

JClassLib - это не только средство чтения байт-кода, но также содержит библиотеку классов, позволяющую разработчикам читать, изменять и записывать файлы и байт-коды Java-классов.Дополнительная информация о JClassLib

Jocky

Jocky

1.1 Что такое Jocky? Мы знаем, что Java - это кроссплатформенный язык программирования. Его исходный код (файл .java) компилируется в независимый от платформы байт-код (файл .class), а затем динамически связывается во время выполнения. Таким образом, скомпилированный файл класса будет содержать таблицу символов, чтобы программу Java можно было легко декомпилировать. Я считаю, что каждый Java-разработчик . Дополнительная информация о Джоки

[Бизнес] Обфускатор кода Java DashO Pro

DashO Pro - идеальный выбор для защиты кода Java. Его возможности защиты кода являются мощными, простыми в использовании, удобными и гибкими (коммерческое программное обеспечение, не с открытым исходным кодом). Обфускатор Java - это: идеальный выбор для независимых разработчиков программного обеспечения - для защиты их важной интеллектуальной собственности; идеальный выбор для отрасли - для предотвращения внутренних и внешних хакерских угроз для кода Java; выбор Sun для защиты и запутывания кода . Дополнительная информация о DashO Pro

JODE

JODE включает обфускатор Java и оптимизатор Java. Файл сценария может управлять различными методами оптимизации файла класса. Он поддерживает следующие операции: 1. Возможность переименовать Класс, метод, поле и локальные имена в сокращенные, неоднозначные или конкретные имена или в соответствии с таблицей преобразования. 2. Удалить отладочную информацию. 3. Удалить "некротический" . Дополнительная информация о JODE

[Бесплатно] Обфускатор Java yGuard

[Бизнес] Обфускатор Java Allatori

Allatori (программное обеспечение с открытым исходным кодом) - это обфускатор Java, принадлежащий к семейству обфускаторов второго поколения, поэтому у него есть все возможности для защиты вашей интеллектуальной собственности. Allatori имеет следующие методы защиты: путаница с именами, путаница с потоками, путаница отладочной информации, кодирование строк и технология водяных знаков. Для образовательных и некоммерческих проектов этот обфускатор . Больше информации об Аллатори

[Business] Инструмент расширения виртуальной машины Java Excelsior JET

Excelsior JET

Excelsior JET - это инструмент расширения виртуальной машины Java (не с открытым исходным кодом) с технологией предварительной компиляции. Предварительный компилятор может преобразовывать ваши файлы классов и jar-файлы в высокооптимизированные двоичные исполняемые файлы, которые могут работать на платформе Intel x86, в системах Microsoft Windows и Linux. Подобно исходным файлам классов, работающим в традиционной JVM (виртуальной машине Java) . Дополнительная информация об Excelsior JET

RetroGuard

RetroGuard - хороший обфускатор Java, который также включен в Enterprise Edition JBuilder7. А yGuard - это обновленная версия RetroGuard с функцией ANT. Дополнительная информация о RetroGuard

JavaGuard

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

ReJava

ReJava

ReJava предоставляет библиотеку классов для управления файлами классов (включая байт-код) и инструмент с графическим интерфейсом для редактирования, обфускации, внедрения кода и поиска файлов классов.Дополнительная информация о ReJava

Soot - это среда оптимизации Java. Она предоставляет четыре промежуточных (представительных) представления для анализа и преобразования байт-кода Java. Soot можно использовать как инструмент для оптимизации и проверки файлов классов или как инструмент для разработки и оптимизации байт-кода Java. Frame. Soot выше 2.0 также включает плагин eclipse. . Дополнительная информация о саже

Retrotranslator

Retrotranslator - это инструмент преобразования байт-кода Java. Он может конвертировать Java-класс, скомпилированный с JDK5.0, в JVM1.4. Поддерживаемые функции Java5 включают: обобщения, аннотации, перечисления, переменное количество параметров, автоматическую упаковку / распаковку, улучшенный цикл for, статический импорт, утилиты параллелизма, расширенный сбор . Дополнительная информация о ретрансляторе

Facebook ProGuard

Facebook ProGuard - это улучшенная версия ProGuard от Facebook, которая работает быстрее и разработана на основе ProGuard 4.11. ProGuard - это бесплатное приложение для сжатия, оптимизации и микширования файлов Java. Он удаляет бесполезные классы, поля, методы и свойства. Максимально оптимизируйте байт-код, используйте короткие и бессмысленные имена для переименования классов, . Дополнительная информация о Facebook ProGuard

The jarg makes smaller a jar file in whitch java classes are storedДополнительная информация о жаргоне

Jen предоставляет набор высокоуровневых API-интерфейсов для манипулирования и генерации байт-кода. Его можно использовать для переименования класса Java, изменения элемента данных (поля) на разрешения общего доступа и добавления новой функции построения. Jen основан на ASM2.1 и полностью поддерживает аннотации и универсальные шаблоны Java5. Кроме того, он также предоставляет набор дополнительных инструментов для работы . Больше информации о Джен

Обфускация (от англ. to obfuscate — сбивать с толку, запутывать) — это приведение исполняемого кода или исходного текста программы к виду, который сохраняет ее функциональность, но затрудняет понимание, анализ алгоритмов работы, а также модификацию при декомпиляции.

Цели обфускации

  • Продемонстрировать неочевидные возможности языка и квалификацию программиста (если запутывание производится не инструментальными средствами, а вручную).
  • Оптимизировать программу для уменьшения размера кода и ускорения работы.
  • Осложнить декомпиляцию/отладку и изучение вредоносных программ, чтобы предотвратить обнаружение их вредоносной функциональности.
  • Затруднить декомпиляцию проприетарных программ, чтобы предотвратить обратную разработку или обход систем проверки лицензий и DRM.
  • Нарушить авторские права программистов и скрыть авторство.

В поисковой оптимизации обфускация javascript-файлов использовалась для запутывания поисковых ботов при декомпиляции кода, нередко в обманных целях. На сегодняшний день это неактуально.

Технологии

Москва, Каширское шоссе, д. 3, к. 2, стр. 4

Расскажи о себе и своих интересах

Для подписки на рассылку укажи свои имя и электронную почту. Не забудь указать, какие отрасли интернет-маркетинга тебе интересны. Так мы сможем отправлять для тебя наболее подходящие материалы.

У тебя есть нерешенные задачи?

В этом блоге мыделимся знаниями, но если у тебя есть серьезные цели, которые требуют вмешательства настроящих профи, сообщи! Перезвоним, расскажем, решим любые задачи из области digital

Ты успешно подписался на рассылку блога Ingate

Теперь ты будешь получать на email приглашения на вебинары, полезный дайджест и релизы бесплатных книг

вернуться в блог

\u041a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u044c \u0438\u043d\u0444\u043e\u043f\u043e\u0432\u043e\u0434\u043e\u0432 \u0441 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u043e\u0439 \n\t\t\t\t\t

\u0425\u043e\u0447\u0435\u0448\u044c \u043f\u0435\u0440\u0432\u044b\u043c \u0447\u0438\u0442\u0430\u0442\u044c \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u044c \u0438\u043d\u0444\u043e\u043f\u043e\u0432\u043e\u0434\u043e\u0432? \u041f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0439\u0441\u044f \u043d\u0430 \u0440\u0430\u0441\u0441\u044b\u043b\u043a\u0443 \u0431\u043b\u043e\u0433\u0430 Ingate \u2014 \u043f\u043e\u043b\u0443\u0447\u0430\u0439 \u043a\u0430\u0436\u0434\u044b\u0439 \u043c\u0435\u0441\u044f\u0446 \u0441\u0432\u0435\u0436\u0438\u0439 \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u044c \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u043f\u043e digital-\u043c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433\u0443. \n\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t\t \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u0442\u044c\u0441\u044f \n\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t

Читайте также: