- PVSM.RU - https://www.pvsm.ru -

Обфускация: зачем? как? что?

Начало

Примерно год назад у меня возник вопрос: Что такое обфускация? И зачем и что нужно обфусцировать?

Пытаться объяснить что такое обфускация своими словами не буду, а дам ссылку [1] на Википедию для незнающих. А вот вопрос: «зачем нужно обфусцировать?», начну рассматривать более подробно.
Я не буду выбирать между обфускаторами, какой лучше а какой хуже, а лишь расскажу вам, как я пытался разобраться в этом сам, и что я получил в итоге.

Зачем?

Обфускация кода это довольно непростое решение, особенно если проект часто обновляется и необходимо быстро применять обновления. Но бывают ситуации, что проект не обновляется или вообще не обновляется, и не только…

Можно выделить 3 главных цели обфускации:

  1. Запутывание исходного кода
  2. Уменьшение размера файла, содержащего исходный код
  3. Сокрытие авторских прав

Исходя из этих целей, необходимо выбрать правильный(-ые) варианты.

Как?

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

Не могу спорить с этим мнением, поскольку нельзя назвать его неправильным или правильным, но есть и другие плюсы и минусы обфускации. Тут необходимо взвесить все за и против.

Что дает обфускация на «выходе»?

  • Полностью нечитабельный код
  • Значительно меньший размер файла

Минусы правки обфусцированного кода

  • Необходимо иметь версию файла, полностью соответствующую логике обфусцированного файла
  • Невозможность мгновеннйо правки обфусцированного кода

Как смотрят на это злоумышленники?

  • Если им необходимо деобфусцировать файл, они используют уже готовые (или пишут свои) деобфускаторы.

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

Что?

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

Обфусировать необходимо проекты с открытым исходным кодом. Считаю, что это правильно и такую тенденцию задали jQuery, а за ними и все другие.
Но нужно понимать, что обфусцировать программы, которые исполняются на сервере (программы на php, perl ...), не имеет смысла.
Рассмотрим почему:

  1. Обфусцировав код например на PHP, вы усложняете работу серверу. Ведь PHP — интерпретируемый язык. Думаю не стоит вникать в схему интерпретации PHP на сервере, важно то, что мы усложняем программу как синтаксически, так и физически (увеличивается объем потребляемой памяти и не толкьо)
  2. НО есть и другая сторона. Возьмем допустим CTPP, думаю всем знаком, а кому нет, вот ссылка [2]. Логика CTPP такова, что уже написанный скрипт, подгружается в память, а затем исполняется. Если же файл обфусцирован, а нам нужно его мобильно изменить, то необходимо сначала обфусцировать свежую версию файла, а затем перезагрузить сервер. То есть мы выполняем одну лишнюю операцию — обфусцирование, спрашивается зачем? Файл не от кого прятать, размер файла не столь важен (Кстати размер файла в памяти уменьшается, поскольку он переводится в байт-код, это происходит даже без обфускации!)

Итог: Я не занимался подробным исследованием, а лишь взвешивал за и против обфусцирования. Можно (не обязательно) обфусцировать открытые программы, где виден код программы и важна скорость интернета. Не нужно обфусцировать закрытые программы, такие, которые выполняются на сервере или компилируются.

Автор: rsht123


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/obfuskatsiya/16473

Ссылки в тексте:

[1] ссылку: http://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%84%D1%83%D1%81%D0%BA%D0%B0%D1%86%D0%B8%D1%8F

[2] ссылка: http://ctpp.havoc.ru/whatis.html