Обфускация (от англ. to obfuscate — сбивать с толку, запутывать) представляет собой процесс приведения текста программы или исполняемого кода к виду, сохраняющему его функциональность, но усложняющему его понимание, анализ алгоритмов и модификацию в процессе декомпиляции.
Цели обфускации
- Показать, что язык обладает дополнительными возможностями, а программист высококвалифицированный (если для запутывания все делается вручную);
- Произвести оптимизацию программы с целью ускорения работы при уменьшении размера кода;
- Сделать сложнее отладку и изучение вредоносных программ, не позволяя определить их полный функционал;
- Скрыть авторство либо нарушит авторские права программиста.
Обфускация javascript-файлов применима в поисковой оптимизации, чтобы запутывать поисковых роботов в процессе декомпиляции кода, часто даже в обманных целях.
Технологии
На уровне машинного кода
Обфускацию используют в программных частях, которые не критичны к скорости, но требовательны к безопасности. Запутать машинный код проще всего посредством внедрения недействующих конструкций (or ax, ax
).
На уровне исходных текстов
Исходники на скриптовых языках доступны пользователям, а сделать их менее читаемыми можно за счет замены имен и особого форматирования.
На уровне промежуточного кода
Некоторые языки компилируют исходный язык в машинный, а языки на базе платформы .NET и Java выполняют компиляцию исходного кода в промежуточный, который содержит достаточное количество информации для восстановления исходника. Для таких zsrjd может использоваться обфускация промежуточного кода.