Начало
Примерно год назад у меня возник вопрос: Что такое обфускация? И зачем и что нужно обфусцировать?
Пытаться объяснить что такое обфускация своими словами не буду, а дам ссылку на Википедию для незнающих. А вот вопрос: «зачем нужно обфусцировать?», начну рассматривать более подробно.
Я не буду выбирать между обфускаторами, какой лучше а какой хуже, а лишь расскажу вам, как я пытался разобраться в этом сам, и что я получил в итоге.
Зачем?
Обфускация кода это довольно непростое решение, особенно если проект часто обновляется и необходимо быстро применять обновления. Но бывают ситуации, что проект не обновляется или вообще не обновляется, и не только…
Можно выделить 3 главных цели обфускации:
- Запутывание исходного кода
- Уменьшение размера файла, содержащего исходный код
- Сокрытие авторских прав
Исходя из этих целей, необходимо выбрать правильный(-ые) варианты.
Как?
На данный момент, все считают, что обфускация применяется только для уменьшения размера файла, содержащего исходный код программы, зачастую это скрипт.
Не могу спорить с этим мнением, поскольку нельзя назвать его неправильным или правильным, но есть и другие плюсы и минусы обфускации. Тут необходимо взвесить все за и против.
Что дает обфускация на «выходе»?
- Полностью нечитабельный код
- Значительно меньший размер файла
Минусы правки обфусцированного кода
- Необходимо иметь версию файла, полностью соответствующую логике обфусцированного файла
- Невозможность мгновеннйо правки обфусцированного кода
Как смотрят на это злоумышленники?
- Если им необходимо деобфусцировать файл, они используют уже готовые (или пишут свои) деобфускаторы.
Конечно есть обфускаторы разного уровня сложности, что может защитить от деобфускации злоумышленниками, но лишь в малой степени. То есть они могут не понять логики какой-то части программы, благо если та часть действительно важна и играет роль в безопасности.
Что?
Обфусцировать можно практически все, ну за исключением компилируемых языков (хотя уже есть инструменты для обфускации компилируемых языков).
Обфусировать необходимо проекты с открытым исходным кодом. Считаю, что это правильно и такую тенденцию задали jQuery, а за ними и все другие.
Но нужно понимать, что обфусцировать программы, которые исполняются на сервере (программы на php, perl ...), не имеет смысла.
Рассмотрим почему:
- Обфусцировав код например на PHP, вы усложняете работу серверу. Ведь PHP — интерпретируемый язык. Думаю не стоит вникать в схему интерпретации PHP на сервере, важно то, что мы усложняем программу как синтаксически, так и физически (увеличивается объем потребляемой памяти и не толкьо)
- НО есть и другая сторона. Возьмем допустим CTPP, думаю всем знаком, а кому нет, вот ссылка. Логика CTPP такова, что уже написанный скрипт, подгружается в память, а затем исполняется. Если же файл обфусцирован, а нам нужно его мобильно изменить, то необходимо сначала обфусцировать свежую версию файла, а затем перезагрузить сервер. То есть мы выполняем одну лишнюю операцию — обфусцирование, спрашивается зачем? Файл не от кого прятать, размер файла не столь важен (Кстати размер файла в памяти уменьшается, поскольку он переводится в байт-код, это происходит даже без обфускации!)
Итог: Я не занимался подробным исследованием, а лишь взвешивал за и против обфусцирования. Можно (не обязательно) обфусцировать открытые программы, где виден код программы и важна скорость интернета. Не нужно обфусцировать закрытые программы, такие, которые выполняются на сервере или компилируются.
Автор: rsht123
Автор, не соглашусь с вашим мнением, компилируемые программы, имеющие ценность, можно декомпилировать, и обфускатор крайне необходимая вещь