Обфускатор: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[непроверенная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
м Бот: исправление двойного перенаправления на Обфускация (программное обеспечение)
 
(не показано 13 промежуточных версий 6 участников)
Строка 1: Строка 1:
#перенаправление [[Обфускация (программное обеспечение)]]
'''Обфускатор''' ({{lang-en|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:

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

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

=== Оптимизация ===

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

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

== Недостатки ==

=== Трудности [[отладка|отладки]] ===

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

=== Недостаточная безопасность ===

Хотя обфускация помогает сделать распределённую систему более безопасной, не стоит ограничиваться ''только'' ею. Обфускация&nbsp;— это «безопасно, потому что засекречено» ([[:en:security through obscurity]]). Секрет в конце концов вырвется наружу, и система будет беззащитной.

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

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

{{compu-soft-stub}}

[[Категория:Программирование]]

[[de:Obfuscator]]
[[en:Obfuscating software]]

Текущая версия от 12:45, 9 января 2016