Обфускаторы кода для PHP
Метки: php, обфускаторы| ← Аудио встроенное в браузере | Тег address → |
Бывает так, что вам неохота предоставлять исходные коды проектов, которые вы разрабатывали. Если писать программы на компилируемых языках (C++, Delphi...), то на выходе получается exe-файл, который нельзя обратить в исходный код. Но что делать, если писать приходится на PHP или Java Script. В таком случае помогут программы, которые запутывают исходный код. Называются такие программы - обфускаторы.
Программ, которые выполняют подобные действия со скриптами, достаточно много. Но, не все они написаны добросовестно и после использования некачественного обфускатора, скрипт может вовсе перестать работать, выдавая при этом непонятную ошибку.
Обфускаторы не кодируют исходный текст. Цель его работы – это сделать код скрипта не понятным и запутанным для человека, но оставить понятным для транслятора или программы, которая будет этот скрипт выполнять. Можно привести такой пример участка кода на PHP:
Убрать подсветку кода
Взглянув на этот код, много времени не понадобится чтобы определить, что он делает. Вывод цифр от 1-го до 10-и. Все цифры, которые больше 5-и, выводятся красным цветом. Код синтаксически верно написан и отформатирован. Теперь немного «ухудшим» внешний вид исходника: for($ZA7B0O1=0;$ZA7B0O1<=10;$ZA7B0O1++){if ($ZA7B0O1 == 6)echo '< font color="red">';echo $ZA7B0O1.' ';}echo '</font>';
Синтаксис остался правильным и результат работы скрипта никак не изменится. Но если это будет читать человек, то он увидит перед собой совсем не тот код, который был до обработки. Если бы мы взяли более сложный пример, где используется хотя бы несколько переменных взаимодействующих между собой, то разобраться человеку было бы практически невозможно. Теперь можно приступить к обзору программ, которые делают это на высоком уровне.
PHP Processor
Разработчик: Gridin Soft
Компактная, удобная и очень простая в использовании программа. К сожалению не бесплатная и без регистрации работает всего лишь 15 дней. Процесс оптимизации кода разнесен на две большие отдельные функции: Code Optimization и Protect PHP Variables and Functions. Первая совсем безобидная и не может принести никакого вреда вашему коду. В этот пункт входит обработка кода от лишних пробелов и комментариев. Это базовая оптимизация, которая может вызываться клавишей F9 либо через меню Actions→Code Optimization. Более сложную защиту предоставляет второй пункт, который можно вызвать из меню Actions→Protect PHP Variables and Functions. Здесь у нас есть возможность выбрать, что именно шифровать – функции, переменные или классы. Также есть возможность самому выбирать, что будет шифроваться, а что нет. Для этого на каждой из вкладок (Variables, Functions и Classes) имеются соответствующие перечни используемых в коде переменных, функций и классов, напротив которых можно ставить галочку, указывая таким образом, что пункт должен быть зашифрован.
По функциональности программы, можно сказать, что ничего сверх мощного здесь нет, такое себе «базовое запутывание». Порадовал такой пункт, как «Detailed Project Information» (CTRL+I), который выводит статистику по вашему кодируемому проекту. В небольшом окне представлены диаграммы и процентные соотношения по количеству PHP-кода, HTML-кода и кода Java Script. Также можно узнать, сколько процентов занимает комментарии, а сколько чистый код проекта. Пример окна статистики показан ниже.

PHP LockIt!
К сожалению, данная программа тоже не бесплатная, хотя и работает немного дольше – 30 дней с момента первого запуска.
В этой программе представлены уже более сложные алгоритмы запутывания кода и, помимо обфускации, можно также шифровать исходные коды под ключ. По прежнему, очень простой интерфейс, в котором достаточно сделать пару кликов и нажать на кнопку «Ок». В незарегистрированной версии идет задержка в несколько секунд.

Как видно со скриншота, достаточно ввести путь к скриптам, которые нужно зашифровать и путь для сохранения новых скриптов. Можно установить пункт Recurse into subfolders, чтобы включить в список все файлы, которые находятся в подкатегориях.
После процесса шифрования скрипты стают просто неузнаваемые, а главное – по-прежнему рабочими ;). Метод скрытия значительно отличается от предыдущей программы. Коды намного сложнее, но в то же время и больше занимают места.
В программе имеется интересная особенность – это управляющие конструкции в исходных кодах, которые могут управлять действиями программы во время выполнения. Делается это с помощью специальных комментариев в исходных кодах. Подробнее о всех таких комментариях можно прочитать в документации на сайте проекта.
Например, некоторые скрипты проекта не должны быть зашифрованными. Тогда в начале скрипта нужно написать такой комментарий:
Убрать подсветку кода
В PHP есть несколько способов ставить комментарии, но для управляющих конструкций программы, должен быть именно комментарий, который начинается с двумя слэшами (//). Если написать, к примеру, так:
Убрать подсветку кода
То работать оно никак не будет и скрипт будет зашифрован.
Еще один полезный комментарий, который позволяет шифровать не весь текст, а только некоторую его часть:
Убрать подсветку кода
Весь код, который идет до этого комментария, не будет шифроваться и выведется без каких-либо изменений.
POBS
Последняя версия программы - 0.99, можно скачать здесь

В результате вы получите архив размером 29 Кб. Это не микропрограмма на Ассемблере, а обфускатор написанный на PHP. Такие обфускаторы могут быть либо в чистом виде, либо все их исходные коды закрыты, причем своими же методами. Для примера PHP-обфускатора я специально выбрал именно POBS, так как он имеет ряд преимуществ перед остальными. Все его исходные коды не только открыты, но и грамотно структурированы и удобочитаемы. Скрипт распространяется абсолютно бесплатно. Имеется только два скрипта – конфигурационный, в котором прописаны настройки и основной, в котором выполняется вся работа, а также интерфейс для пользователя.
Ряд функций, которые выполняет POBS:
Хороший пример приведен на сайте разработчика. На странице показан код, в котором есть CSS, HTML, Java Script, PHP и все форматирование, коти орое обычно используется. На странице код показывается в том виде, в котором он будет после обработки программы.
Заключение
Нужно быть предельно осторожным, при использовании подобных программ. Не забывать делать такие банальные вещи как резервные копии обрабатываемых скриптов, а также проверять их на работоспособность до и после процесса обфускации. Все программы протестированы и работают верно, но излишняя предосторожность не помешает. На всякий случай, можете держать у себя на компьютере несколько программ различных производителей. Тогда, при отказе одной из них, можно будет обойтись без поисков альтернатив.
Программ, которые выполняют подобные действия со скриптами, достаточно много. Но, не все они написаны добросовестно и после использования некачественного обфускатора, скрипт может вовсе перестать работать, выдавая при этом непонятную ошибку.
Обфускаторы не кодируют исходный текст. Цель его работы – это сделать код скрипта не понятным и запутанным для человека, но оставить понятным для транслятора или программы, которая будет этот скрипт выполнять. Можно привести такой пример участка кода на PHP:
Убрать подсветку кода
1 2 3 4 5 6 7 8 9 | for($i=0;$<=10;$i++) { if ($i == 6) { echo '<font color="red">'; } echo $i.' '; } echo '</font>'; |
Взглянув на этот код, много времени не понадобится чтобы определить, что он делает. Вывод цифр от 1-го до 10-и. Все цифры, которые больше 5-и, выводятся красным цветом. Код синтаксически верно написан и отформатирован. Теперь немного «ухудшим» внешний вид исходника: for($ZA7B0O1=0;$ZA7B0O1<=10;$ZA7B0O1++){if ($ZA7B0O1 == 6)echo '< font color="red">';echo $ZA7B0O1.' ';}echo '</font>';
Синтаксис остался правильным и результат работы скрипта никак не изменится. Но если это будет читать человек, то он увидит перед собой совсем не тот код, который был до обработки. Если бы мы взяли более сложный пример, где используется хотя бы несколько переменных взаимодействующих между собой, то разобраться человеку было бы практически невозможно. Теперь можно приступить к обзору программ, которые делают это на высоком уровне.
PHP Processor
Разработчик: Gridin Soft
Компактная, удобная и очень простая в использовании программа. К сожалению не бесплатная и без регистрации работает всего лишь 15 дней. Процесс оптимизации кода разнесен на две большие отдельные функции: Code Optimization и Protect PHP Variables and Functions. Первая совсем безобидная и не может принести никакого вреда вашему коду. В этот пункт входит обработка кода от лишних пробелов и комментариев. Это базовая оптимизация, которая может вызываться клавишей F9 либо через меню Actions→Code Optimization. Более сложную защиту предоставляет второй пункт, который можно вызвать из меню Actions→Protect PHP Variables and Functions. Здесь у нас есть возможность выбрать, что именно шифровать – функции, переменные или классы. Также есть возможность самому выбирать, что будет шифроваться, а что нет. Для этого на каждой из вкладок (Variables, Functions и Classes) имеются соответствующие перечни используемых в коде переменных, функций и классов, напротив которых можно ставить галочку, указывая таким образом, что пункт должен быть зашифрован.
По функциональности программы, можно сказать, что ничего сверх мощного здесь нет, такое себе «базовое запутывание». Порадовал такой пункт, как «Detailed Project Information» (CTRL+I), который выводит статистику по вашему кодируемому проекту. В небольшом окне представлены диаграммы и процентные соотношения по количеству PHP-кода, HTML-кода и кода Java Script. Также можно узнать, сколько процентов занимает комментарии, а сколько чистый код проекта. Пример окна статистики показан ниже.

PHP LockIt!
К сожалению, данная программа тоже не бесплатная, хотя и работает немного дольше – 30 дней с момента первого запуска.
В этой программе представлены уже более сложные алгоритмы запутывания кода и, помимо обфускации, можно также шифровать исходные коды под ключ. По прежнему, очень простой интерфейс, в котором достаточно сделать пару кликов и нажать на кнопку «Ок». В незарегистрированной версии идет задержка в несколько секунд.

Как видно со скриншота, достаточно ввести путь к скриптам, которые нужно зашифровать и путь для сохранения новых скриптов. Можно установить пункт Recurse into subfolders, чтобы включить в список все файлы, которые находятся в подкатегориях.
После процесса шифрования скрипты стают просто неузнаваемые, а главное – по-прежнему рабочими ;). Метод скрытия значительно отличается от предыдущей программы. Коды намного сложнее, но в то же время и больше занимают места.
В программе имеется интересная особенность – это управляющие конструкции в исходных кодах, которые могут управлять действиями программы во время выполнения. Делается это с помощью специальных комментариев в исходных кодах. Подробнее о всех таких комментариях можно прочитать в документации на сайте проекта.
Например, некоторые скрипты проекта не должны быть зашифрованными. Тогда в начале скрипта нужно написать такой комментарий:
Убрать подсветку кода
1 | // PHPLOCKITOPT NOENCODE |
В PHP есть несколько способов ставить комментарии, но для управляющих конструкций программы, должен быть именно комментарий, который начинается с двумя слэшами (//). Если написать, к примеру, так:
Убрать подсветку кода
1 | /* PHPLOCKITOPT NOENCODE */ |
То работать оно никак не будет и скрипт будет зашифрован.
Еще один полезный комментарий, который позволяет шифровать не весь текст, а только некоторую его часть:
Убрать подсветку кода
1 | // PHPLOCKITOPT START |
Весь код, который идет до этого комментария, не будет шифроваться и выведется без каких-либо изменений.
POBS
Последняя версия программы - 0.99, можно скачать здесь

В результате вы получите архив размером 29 Кб. Это не микропрограмма на Ассемблере, а обфускатор написанный на PHP. Такие обфускаторы могут быть либо в чистом виде, либо все их исходные коды закрыты, причем своими же методами. Для примера PHP-обфускатора я специально выбрал именно POBS, так как он имеет ряд преимуществ перед остальными. Все его исходные коды не только открыты, но и грамотно структурированы и удобочитаемы. Скрипт распространяется абсолютно бесплатно. Имеется только два скрипта – конфигурационный, в котором прописаны настройки и основной, в котором выполняется вся работа, а также интерфейс для пользователя.
Ряд функций, которые выполняет POBS:
- Шифрование переменных переименованием в бессмысленные наборы символов
- Шифрование функций переименованием в бессмысленные наборы символов
- Шифрование констант переименованием в бессмысленные наборы символов
- Шифрование классов переименованием в бессмысленные наборы символов
- Шифрование JavaScript функции и переменных переименованием в бессмысленные наборы символов
- Простое удаление комментариев
- Специальное удаление комментариев
- Удаление переходов новой строки
- Удаление всех лишних пробелов
Хороший пример приведен на сайте разработчика. На странице показан код, в котором есть CSS, HTML, Java Script, PHP и все форматирование, коти орое обычно используется. На странице код показывается в том виде, в котором он будет после обработки программы.
Заключение
Нужно быть предельно осторожным, при использовании подобных программ. Не забывать делать такие банальные вещи как резервные копии обрабатываемых скриптов, а также проверять их на работоспособность до и после процесса обфускации. Все программы протестированы и работают верно, но излишняя предосторожность не помешает. На всякий случай, можете держать у себя на компьютере несколько программ различных производителей. Тогда, при отказе одной из них, можно будет обойтись без поисков альтернатив.
Рейтинг:




<< Вы можете поставить оценку этой статьеПодобные статьи:
Паттерн кэширования для моделей
Работа с форматами сжатия RAR, LZF и BZ2 в PHP
Паттерн Наблюдатель (Observer) в PHP
Полнотекстовый поиск с Xapian и PHP
Генерация HTML с помощью yuki-html
Обсуждение статьи:
Motoroller [2010-10-24]
Спасибо большое, очень по существу.
morfie [2010-11-01]
У вас помилка .'Все цифры, которые больше 5-и, выводятся красным цветом'. Також помилка в циклі for($i=0;$<=10;$i++) .
it-mutant [2011-02-19]
Занятно. Уже не раз сталкивался в реальной практике с обфусцированным кодом. Бывает интересно самому покопаться в коде, чтобы увидеть задумку автора. Новичкам не рекомендую использовать серийные программы, найдите готовые примеры описаний алгоритмов работы обфускаторов, например, нашумевший Determinator, алгоритм которого я расписал у себя в блоге и напишите свой обфускатор добавив какой-нибудь элементарный сдвиг. Задача деобфускации сразу станет частной, уверяю.
Олег [2011-05-17]
Поправьте скрипт примера, он во первых с ошибкой, во вторых "что он делает" описано неправильно.
Українська
English