Исходники китайского deZender'а

X-ray

Постоялец
Регистрация
17 Апр 2012
Сообщения
47
Реакции
128
В далеком 2007 году данный дезендер располагался на следующих сайтах:

Для просмотра ссылки Войди или Зарегистрируйся
Для просмотра ссылки Войди или Зарегистрируйся
В последствии был слит мною и использовался для личных нужд, сам дезендер (скомпилированный) давно уже есть в паблике, но вот его исходники имеют единицы. В общем делюсь ими со всеми :) может быть доведете его до ума.

dezend.png


Данный архив включает 3 архива:

1) application.rar
Скомпилированный дезендер + веб форма для загрузки файлов (кодировка веб-страницы китайская GBK)
В каталоге /zend/fdgsggdsfgds32dgd/core/ находятся скомпилированный дезендер и все необходимые файлы

2) instructions.zip
Инструкции по установке на английском языке:
readme.txt - описание дезендера
install.txt - инструкция по установке web-dezend
compile.txt - инструкцию по компилированию исходников dezend

3) work.rar
Исходники на С++



Скачать: Для просмотра ссылки Войди или Зарегистрируйся
Пароль: sy5sgwv4ms2fpvmHt7Rvcrc2am1Eu8fOIUUkgcmzJXTE3HYhf3vDZI68dhWSTXAekBpZ06XLTZqTY4Qs1zql09wXp5SYYrCz00qA

Размер: 106.98 Мб
 
протестировал вроде работает, отваливается на больших файлах, надо проверять сборку компилировать, scr пхп4, кто чекал, я нашол тока 1 доп файл, в 182 кб, это весь дезенд? видимо:nezn:
 
попробовал собрать сеё творение, пхп 5.3 пока сборка не идет, наверно нужно фиксить- фиксить и фиксить код под пхп53. Остается для проверки лишь собрать на родном API четверки :facepalm:

для исправления бага отвала на больших файлах пришлось подсмотреть в RM версии ядра разницу выделяемых объемов буфера и стека
Код:
////////////////////////////////
RM core
////////////////////////////////
/* Stack setting */
#define DEFAULT_STRING_LENGTH 4096
#define DEFAULT_STACK_SIZE 16
 
/* Buffer size */
#define BUFFER_SIZE 4096
#define SMALL_BUFFER_SIZE 1024
#define LARGE_BUFFER_SIZE 8192
 
/////////////////////////////////
qinvent core
/////////////////////////////////
#define OPC_STACK_SIZE 1024
#define OPCS_MAX_LEN 16
#define DEZ_VARS_NUM 1024
#define NODE_STACK_SIZE 2048
 
for files > 500 kb

сравниваем разницу в опкодов с any_key левая php 43 правая 53
2012-05-26_162901.png
29/05 (ночь) напишу 2 слов
подрыв мозга продолжился в совершенно непредсказумом направлении, пришлось от кинвента уйти к сборке RM на 53TS, NTS для версии зенда будет скомпилна позже (не все так просто), Any_key потом подробно распишет дубль 2 по RM, если кому будет интересно - со скриншотами и подробным объяснением баг фиксов соборки - шутка, планировалось выпустить виртуалку.
В общем на удивление заработал RM, который раньше не удавалось запусть после компиляции, так ка кон был в отключенном состоянии и в коде нехватало его инициализации, сборка на 53 наложила свой отпечаток, и есть перекос адаптации обрабатываемых данных декомпилятром на некоторых опкодах и переменных, который нужно будет учитывать (благо vld щас уже поддерживает 54 и там можно подсмотреть условия изменений), еще в RM использовались некоторое количество старых опкодов!! (например опкодs Unset\isset)
RM===============
/* 075 */ { "UNSET_DIM_OBJ", "unset", 0 },
/* 076 */ { "ISSET_ISEMPTY", "", 0 },
Qinvent=============
#define ZEND_UNSET_DIM_OBJ 75 /* unset dim, unset object */
#define ZEND_ISSET_ISEMPTY 76 /* isset, empty */
/////////////////////////// ^^^php4^^^//////////////////////////////////////
Хотя в 52php версии уже
#define ZEND_UNSET_DIM 75
#define ZEND_UNSET_OBJ 76
там есть еще опкоды....достойные внимания...в общем если бы не Кинвент, то проект так бы и простаивал.
 
Как человек собравший эти два дезендера. Могу сказать одно. Есть кинвент 5,3 как модуль внутри vld, я извиняюсь но стринг-реплейс который там активно используется это просто детский сад, к которому возвращаться не буду. Кинвент это слишком прост для решения подобных задач. Однако большое спасибо ТС за то что пнул в нужном направлении

RM сила что сказать, лекснер вывернутый на изнанку куда правельный подход разбора
если кому будет интересно - со скриншотами и подробным объяснением баг фиксов соборки
Это да сейчас отскиншотю 2 мегабайта кода:D
Однако адаптацию нужно вести, причем достаточно глубоко влазить. Благо дело есть понимание структуры работы дезенера. И уже складывается карта проекта в голове с взяимосвязями.
Так что дописывать его не будет сверх сложной задачей, просто затратной по времени.
SidX55 нашел еще 1 баг. unset(${$key}); в данной конструкции вываливается не сам ансет, а лекснер дезендера не понимает конструкцию.
Это альтернативный синтаксис пхп, который просто не заложен в деза. Будем закладывать фигли ;)
 
PS ночная сборка
до

PHP:
<?php
phpinfo();
$trsam=1;
if ($trsam==1){
phpinfo();
} else {
die();
}
?>
после
PHP:
<?php
 
 
phpinfo( );
$CV_0 = 1;
if ( $CV_0 == 1 )
{
    phpinfo( );
}
else
{
    exit( );
}
?>
 
за RM тоже бы надо поблагодарить публично человека, не будем называть его "имя" но было бы неправильно обойти это стороной:party:, ps копирайто чего такой кривой получился и X 1 забыл;)
 
копик нормальный это форум так его...
про X1 забыл добавим
 
проблема адптации пока не решена, но предварительные выводы можно сделать уже сейчас, у дейзика заложена определенная структура обработки конструкций опкодов, а с 52, незнаю как ниже версии, буквально сейчас сравнил дампы опкодов 52 и 53 версий оригиналов по сравнению с дезендом, в пхп не модифицированом свернуты некоторые контрукции опкодов, которые нужны для декомпиляции, что так же перегружает данными оригинальные не свернутые опкоды

Перегрузка нормального опкода в дезе:
////////////////////////////////////////////////////////////////////////
83 INIT_FCALL_BY_NAME [-] 1010348678[0] - 'msg_errorback', 'msg_errorback'
>>> ДБ
96 INIT_FCALL_BY_NAME [-] 0[0] - - "msg_errorback"
//////////////////////////////////////////////////////////////////////////////////////

Для примера приведу опкод DO_FCALL и развернутую его версию дезенда
++
Оригинал (без любых модификаций пхп ) верхнего скрипта в 53 и 52
////////////////////////////////////////////////////////////////////////////////////
0 2 DO_FCALL( 60) "phpinfo" $0
1 3 ASSIGN( 38) 1 $1
///////////////////////////////////////////////////////////////////////////////

Дезенд:
//////////////////////////////////////////////////////////////////////////////////////////
0 2 INIT_FCALL_BY_NAME( 59) "phpinfo"
1 2 DO_FCALL_BY_NAME( 61) $0
2 3 ASSIGN( 38) 1 $1
///////////////////////////////////////////////////////////////////////////////////

Вывод: сравнить оригиналы файлов php52 и деза 52, сравнение прошло, и по содержимому был упущен 1 файл без копирайтов RM, нужно его еще включить, а также еще раз все перепроверить, и изучить где проводится предобработка опкодов, так как дезенд сейчас работает с чистым дампом опкодов, не обработанным, потому код и теряется.:facepalm:
 
Отошел от будана. Праздник удался )).
Посмотрел на сворачивание Sidxx55 кроме DO_FCALL
ZEND_BRK (breack), ZEND_FE_FETCH (foreach), и пока не подтверждены циклы.
Сегодня решил сделать NTS версию и начать сборку деза с ноля. Так как навносил туда для совместимости много и кое какие изменения весьма сомнительны в виду сложившийся обстановки.
 
NTS версия

Завтра Для просмотра ссылки Войди или Зарегистрируйся допилит, и обновит ссылку


От себя же пишу призыв тем, кто заинтересовался темой, и у кого есть время. Тестируйте NTS, и если есть желание, время и возможность, - подключайтесь!
 
  • Нравится
Реакции: maio
Назад
Сверху