Расшифровка и деобфускация PHP-скриптов

Расшифровка и деобфускация PHP-скриптов

Тема декодирования зашифрованных PHP-скриптов уже однажды мной затрагивалась в посте PHP и зашифрованный код . В нем я описал способ получения значений всех инициализированных переменных и списка объявленных функций в скрипте, зашифрованным протектором ionCube. Тогда, в 2009 году, расшифровать скрипт под ionCube было проблематично – на тот момент существовали лишь платные сервисы. Однако с ростом популярности ionCube стало ясно, что рано или поздно его постигнет участь Zend Encoder (сейчас Zend Guard), павшего в 2008 году перед ставшими повсеместно доступными «дезендерами». Действительно, за последнее время появилось множество декодеров ionCube, можно даже найти бесплатные онлайн-сервисы. Один из них позволяет расшифровать практически любые скрипты. О нем, а также о других способах расшифровки расскажу в данной статье.



Прежде всего необходимо иметь представление о том, какие существуют виды защиты PHP-скриптов. Всего их можно выделить три:



  1. Защита посредством кодирования скриптов в байт-код, требующая дополнительных PHP-расширений для работы с ними. Это самый сложный тип защиты, примеры: Zend Guard, ionCube, Nu-Coder.

  2. Защита, основанная на шифровании непосредственно исходного кода скрипта путем использования особого алгоритма. Примеры: PHP Cipher, Truebug PHP Encoder, SourceCop PHP Protector.

  3. Обфускация – изменение названий переменных и функций, удаление пробелов и символов переноса строки, etc. Относительно самый просто тип, примеры: PHP Defender, Obfusc.


Итак, имея скрипт, зашифрованный неизвестным для вас алгоритмом, прежде всего необходимо определить с помощью чего он зашифрован. В этом может помочь отличный инструмент PCL’s PHPiD . Распознает множество протекторов, например тот же ionCube:



Определив протектор, можно поискать существующие решения для расшифровки того или иного энкодера. Но в большинстве случаев поможет сервис dezend.me .



Он открылся совсем недавно, но уже сейчас имеет большой функционал: расшифровка серверных средств защиты ionCube 6.5, Zend, Nu-Coder, а также декодирование и деобфускация любых скриптов, зашифрованных без использования дополнительных расширений PHP. К сожалению, результаты расшифровки ionCube оставляют желать лучшего, в некоторых участках кода тестового скрипта пришлось исправлять вручную. А вот универсальный декодер справляется заметно лучше, правда не хватает нормального форматирования кода. В целом, сервис оставил положительные впечатления, надеюсь, не закроется :)


Что делать если сервис не помог (например, скрипт закодирован свежим ionCube)? Можно попробовать воспользоваться инструментами, которые выкладывают на сайте deioncube.in . На местном форуме также можно попросить расшифровать скрипт, в большинстве случаев вам помогут безвозмездно.


Если же вы имеете дело со вторым или третьим типом защиты и вам хочется попробовать расшифровать неизвестный алгоритм самому, воспользуйтесь PHP-расширением evalhook от Стефана Эссера. С его помощью можно удобно просматривать строки, которые зашифрованный PHP-скрипт пытается выполнить, используя eval(), assert() и другие функции выполнения кода. Подробная статья о его использовании доступна на сайте php-security.org .


Статьи dezend php взлом
Alt text

Тени в интернете всегда следят за вами

Станьте невидимкой – подключайтесь к нашему каналу.

Арсений Реутов

блог о web-безопасности