Print This Post PHP Generic Eval Unpacker

Четверг, 26. Апрель 2012
Раздел: C/C++, PHP, Windows, автор:

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



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

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

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

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

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

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

http://pastebin.com/rLhMLui2

http://pastebin.com/r8m1Vj2b

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

Бинарник с PHP: скачать
Исходный код: скачать

 Обсудить на форуме


Получать обновления на почту:     

Метки: , , , .

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

  1. спасибо, полезная вещь

    [Ответить]


  2. AsseR :

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

    [Ответить]

    dx:

    Да вы параноик, сэр.

    [Ответить]

    AsseR:

    Да, сэр, Вы правы.

    [Ответить]

    Kaimi:

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

    [Ответить]

    AsseR:

    Ок, я понял, что никому из Вас это неинтересно.
    Спасибо за совет.

    [Ответить]

    Kaimi:

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

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

    [Ответить]

    Anon:

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

    [Ответить]


Оставьте ваш комментарий