Обфускатор

Материал из Википедии — свободной энциклопедии
Это старая версия этой страницы, сохранённая Mercury (обсуждение | вклад) в 14:06, 31 января 2006. Она может серьёзно отличаться от текущей версии.
Перейти к навигации Перейти к поиску

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

Технологии

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

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

Исходный текст:

 int count = 100;
 float TAX_RATE = 0.2;
 for (int i=0; i<COUNT; i++)
 {
   tax[i] = orig_price[i] * TAX_RATE;
   price[i] = orig_price[i] + tax[i];
 }

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

 for(int a=0;a<100;a++){b[a]=c[a]*0.2;d[a]=c[a]+b[a];}

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

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

Назначение

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

Как было сказано выше, декомпиляция программ Java и .NET достаточно проста. В этом случае обфускатор оказывает неоценимую помощь тем, кто хочет скрыть свой код от посторонних глаз. Зачастую после обфускации декомпилированный код вообще не компилируется, и вместо патча на уровне исходного текста приходится довольствоваться аптчем на уровне Java-кода.

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

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

 <b>Виа</b><b>гра</b>

При просмотре в браузере вы увидите слово «Виагра», в то время как в исходном коде его нет. Добавление JavaScript в текст ещё усложняет задачу детекции спама.

Оптимизация

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

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

Недостатки

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

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

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

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