Обфускация
Обфускация (от англ. to obfuscate — сбивать с толку, запутывать) — это приведение исполняемого кода или исходного текста программы к виду, который сохраняет ее функциональность, но затрудняет понимание, анализ алгоритмов работы, а также модификацию при декомпиляции.
Цели обфускации
- Продемонстрировать неочевидные возможности языка и квалификацию программиста (если запутывание производится не инструментальными средствами, а вручную).
- Оптимизировать программу для уменьшения размера кода и ускорения работы.
- Осложнить декомпиляцию/отладку и изучение вредоносных программ, чтобы предотвратить обнаружение их вредоносной функциональности.
- Затруднить декомпиляцию проприетарных программ, чтобы предотвратить обратную разработку или обход систем проверки лицензий и DRM.
- Нарушить авторские права программистов и скрыть авторство.
В поисковой оптимизации обфускация javascript-файлов использовалась для запутывания поисковых ботов при декомпиляции кода, нередко в обманных целях. На сегодняшний день это неактуально.
Технологии
- На уровне машинного кода. Обфускация применяется в таких частях программы, как проверка регистрационного кода, т. е. не критичных к скорости, но критичных к безопасности. Простейший метод запутать машинный код — вставить в него недействующие конструкции (
or ax, ax
). - На уровне исходных текстов. Исходный текст программы на скрипт-языках (JavaScript, VBScript и т. п.) доступен пользователю. Менее читаемым его можно сделать путем форматирования и замены имён.
- На уровне промежуточного кода. Обычные языки, такие как C++ и Паскаль, компилируют исходный код в машинный. В отличие от них языки платформы .NET, а также NetP и Java, компилируют исходный код в промежуточный (байт-код), содержащий достаточно информации для восстановления исходного кода. Поэтому для перечисленных языков используется обфускация промежуточного кода.
Теги термина