Обфускатор
Обфускатор (англ. 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-файлов и, соответственно, ускоряет загрузку.
Недостатки
Трудности отладки
Обфускатор не даёт постороннему выяснить, что делает код, но и не даёт разработчику отлаживать его. При отладке приходится отключать обфускатор.
Ошибки в обфускаторах
Современный обфускатор — сложный программный комплекс. Зачастую в обфускаторы, несмотря на тщательное проектирование и тестирование, вкрадываются ошибки. Так что есть ненулевая вероятность, что прошедший через обфускатор код вообще не будет работать.
Это заготовка статьи о программном обеспечении. Помогите Википедии, дополнив её. |