PHP Generic Eval Unpacker

В предыдущей статье dx рассказывал о ручной методике снятия типовой и довольно распространенной защиты PHP-скрипта. Если проанализировать наиболее часто встречающиеся типы защиты (например, в разделе запросов на расшифровку на Античате), то можно заметить, что в большинстве случаев защита построена на максимальном сохранении исходного кода скрипта и использовании функции eval в конечном счете. Снимать такую защиту очень просто, но слегка занудно, поэтому я решил написать примитивную программу, которая осуществляет сие действо автоматически.
Чтобы пост не был унылым, я кратенько опишу, что из себя представляет анпакер. Итак, из-за своей лени я решил использовать php-cli, расширение для php (которое перехватывает eval) и сделать к этому простой GUI. Результирующая программа выглядит следующим образом:



Начнем с расширения. Процесс создания расширения и используемая техника перехвата довольно примитивны и описаны здесь и здесь. Код, описанный в последней ссылке, я слегка изменил под себя. Приведу его одним куском:

Как видно из приведенного выше кода, перехват осуществляется довольно просто, если знать как. Никаких грязных методов, трамплинов и прочей лабуды. Теперь рассмотрим не менее простой GUI к этому делу, который написан на адовой смеси C/C++ и является примером того, как не следует писать программы. Код GUI приведу частями. Начнем с инклюдов и глобальных переменных:

Несколько вспомогательных функций:

И, наконец, основные функции в порядке убывания "важности":

В общем-то основную функцию мы рассмотрели, теперь остался всеми любимый DlgProc и WinMain:

Вот и все. Приведенный выше код является ужасно примитивным и нелепым, но позволяет сэкономить немного времени при распаковке очередного PHP-скрипта. Но какие же скрипты может распаковать данная программа? Ну, например, подобные этим:
http://pastebin.com/rLhMLui2
http://pastebin.com/r8m1Vj2b

Обратите внимание на то, что при распаковке скрипт исполняется, а также скрипт может до конца не распаковаться, если в нем существует, например, привязка к домену.

Бинарник с PHP: скачать
Исходный код: скачать
GitHub: php-eval-unpacker

PHP Generic Eval Unpacker: 9 комментариев

  1. Господа, напишите пожалуйста криптософт. Сорцев мало достойных
    К примеру алго PAQ а поверх RSA 4096.
    Криптография довольно инстересная штука, и мало реализаций хороших.
    Архиватор Ваш видел, но там банально: ZLib+AES, а вышепредложенный алгоритм повзрослее чтоли будет.
    С уважением.

    1. Гуглишь реализацию PAQ, добавляешь OpenSSL и получается готовая реализация.
      Смысл? Вся практическая сложность сведется к интерфейсу и мелочам.
      С нуля, опираясь на математические описания алгоритмов, писать все это дело - ну, как минимум результат будет медленнее работать, да и косяки могут быть.

        1. Вопрос скорее в целесообразности и смысле. Лично я не вижу конечного смысла затеи.
          Уникальной криптостойкости не будет, реализация по готовым выкладкам, юзабилити под вопросом...
          Эта задача скорее напоминает то, что обычно просят на форумах в качестве курсовой или диплома, а security through obscurity за счет кастомного формата, хрен знает, например, rar-архив с 32 символьным паролем люди как-то не вскрывают, так почему бы не его...

  2. Привет админ! Не смог найти контакты. Отпишись мне пожалуйста. Хочу разместить рекламу в твоем блоге.

    1. 1. Купи очки (или линзы) и сразу же начни пользоваться ими.
      2. Нажми на кнопке "О блоге" под шапкой сайта.
      3. Сделай усилия, и попробуй там отыскать контакты админа.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *