Обфускатор: различия между версиями
Перейти к навигации
Перейти к поиску
[непроверенная версия] | [отпатрулированная версия] |
Содержимое удалено Содержимое добавлено
Нет описания правки |
Xqbot (обсуждение | вклад) м Бот: исправление двойного перенаправления на Обфускация (программное обеспечение) |
||
(не показано 8 промежуточных версий 5 участников) | |||
Строка 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]]-файлов и, соответственно, ускоряет загрузку. |
|||
== Недостатки == |
|||
=== Трудности [[отладка|отладки]] === |
|||
Обфускатор не даёт постороннему выяснить, что делает код, но и не даёт разработчику отлаживать его. При отладке приходится отключать обфускатор. |
|||
=== Недостаточная безопасность === |
|||
Хотя обфускация помогает сделать распределённую систему более безопасной, не стоит ограничиваться ''только'' ею. Обфускация — это «безопасно, потому что засекречено» ([[:en:security through obscurity]], см. также ''[[Принцип Керкгоффса]]''). Секрет в конце концов вырвется наружу, и система будет беззащитной. |
|||
=== Ошибки в обфускаторах === |
|||
Современный обфускатор — сложный программный комплекс. Зачастую в обфускаторы, несмотря на тщательное проектирование и [[тестирование]], вкрадываются ошибки. Так что есть ненулевая вероятность, что прошедший через обфускатор код вообще не будет работать. И чем сложнее разрабатываемая программа, тем больше эта вероятность. |
|||
{{compu-soft-stub}} |
|||
[[Категория:Программирование]] |
|||
[[de:Obfuscator]] |
|||
[[en:Obfuscating software]] |
Текущая версия от 12:45, 9 января 2016
Перенаправление на: