Обфускатор: различия между версиями
[непроверенная версия] | [непроверенная версия] |
Mercury (обсуждение | вклад) Нет описания правки |
Mercury (обсуждение | вклад) |
||
Строка 43: | Строка 43: | ||
=== Оптимизация === |
=== Оптимизация === |
||
Обфусцированный код занимает меньше места, чем исходный, и зачастую выполняется быстрее, чем исходный. Современные обфускаторы также заменяют константы числами, оптимизируют код инициализации [[массив]] |
Обфусцированный код занимает меньше места, чем исходный, и зачастую выполняется быстрее, чем исходный. Современные обфускаторы также заменяют константы числами, оптимизируют код инициализации [[индеусный массив|массивов]], и выполняют другую оптимизацию, которую на уровне исходного текста провести проблематично или невозможно. |
||
Проблема уменьшения размера важна, например, при программировании для [[сотовый телефон|сотовых телефонов]] на [[J2ME]], где размер программы серьёзно ограничен. Обфускация JavaScript уменьшает размер [[HTML]]-файлов и, соответственно, ускоряет загрузку. |
Проблема уменьшения размера важна, например, при программировании для [[сотовый телефон|сотовых телефонов]] на [[J2ME]], где размер программы серьёзно ограничен. Обфускация JavaScript уменьшает размер [[HTML]]-файлов и, соответственно, ускоряет загрузку. |
Версия от 19:35, 7 декабря 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-файлов и, соответственно, ускоряет загрузку.
Недостатки
Трудности отладки
Обфускатор не даёт постороннему выяснить, что делает код, но и не даёт разработчику отлаживать его. При отладке приходится отключать обфускатор.
Недостаточная безопасность
Хотя обфускация помогает сделать распределённую систему более безопасной, не стоит ограничиваться только ею. Обфускация — это «безопасно, потому что засекречено» (en:security through obscurity, см. также Принцип Керкгоффса). Секрет в конце концов вырвется наружу, и система будет беззащитной.
Ошибки в обфускаторах
Современный обфускатор — сложный программный комплекс. Зачастую в обфускаторы, несмотря на тщательное проектирование и тестирование, вкрадываются ошибки. Так что есть ненулевая вероятность, что прошедший через обфускатор код вообще не будет работать. И чем сложнее разрабатываемая программа, тем больше эта вероятность.
Это заготовка статьи о программном обеспечении. Помогите Википедии, дополнив её. |