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

в 17:52, , рубрики: обфускация, Песочница, метки:

Начало

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

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

Зачем?

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

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

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

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

Как?

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

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

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

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

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

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

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

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

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

Что?

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

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

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

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

Автор: rsht123


  1. Азим:

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

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js