Расшифровка и деобфускация 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.

Join the Conversation

12 Comments

  1. не подскажешь, вот такой код чем расшифровывать?

    $x0b=”array\137\x73\150if\164″; $x0c=”\141\162\162\x61\x79\x5f\160\x6f\160″;

    Сейчас dezend.me не доступен 🙁

  2. спасибо, помог, только в коде ошибка вылезла, исправить пока не могу. теперь буду иметь хоть инструмент, а то ничего не находил.

  3. Всмысле убери комментировать хтмл (сайт побил текст)

Leave a comment

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.