Что такое «Обфускация»?

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

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

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

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

Технологии

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

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

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

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

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

Обычные языки, такие как C++ и Паскаль, компилируют исходный код в машинный. В отличие от них языки платформы .NET, а также NetP и Java, компилируют исходный код в промежуточный (байт-код), содержащий достаточно информации для восстановления исходного кода. Поэтому для перечисленных языков используется обфускация промежуточного кода.

Возврат к списку