Xcache баг-трекер декомпилятора

Статус
В этой теме нельзя размещать новые ответы.
и под CYGWIN, как его разработчик компилирует не понятно
вот под CYGWIN он легко компилируются но вот само ядро это черт пойми как извернутся нужно..
со студией много проще... А шинковать я его буду и дальше..
только времени немного на это все

А вообще ребята, так как времени немного если что найдете то пишите. Хук куда поставить или поправить функцию.. без проблем. Но сидеть гадать не шибко удается, было два дня побаловался немного, сейчас снова бардак на работе и как всегда все по старому.
 
Если можно предоставьте заявленный в теме формат патчей, измененные области класса, а то сравнивать по коду +- которые не все разные, есть и одинаковые, можно ошибиться в правке, и как результат листы так и не пашут (качайте последний класс либо по топику по датам архивов, либо 1 пост тоже обновленный класс - обновляемый, чтобы не было перекосов), ....в ключе баг-код <php ?>, патч класса <?php ?>

Может быть перейдем на bitbucket (там можно делать приватные репозитарии) с кодом? Там можно удобно сливать изменения из разных веток + наглядное их отображение. Просто еще небольшие правки можно вручную вспомнить и представить в виде "ошибка"->"фикс", но когда много изменений смысл возиться с этим вручную, когда есть множество удобных инструментов? Если есть желание, киньте email в ПМ, пришлю инвайт на существующий репозитарий.
 
приватные репозитарии как то закрытые области отвлеченные от данного топика, не соответствует интересам форума-топика, так как люди приходят именно сюда и работают тут (общаются, делятся идеями, картинками, и т.д. информацией в общем), если им все же придется переносить информацию оттуда сюда, как было с твоим патчем оттуда, это не очень удобно, ведь работу кода нужно объективно проверять, что там было написано исправлено, зачем концентрироваться на этом? когда непочатый край еще работы, приватные области - Хайд тут, но как видите все правки открытые, удобные понятные и принадлежат их авторам, зачем "делать топик проходным" куда-то в репозитарий, хотябы даже пусть и удобных каких то инструментов, народу тут по пальцам можно пересчитать, многие знают пхп, но проходят мимо так как не сном не духом в "опкодах". Если вам там удобно - делайте там, но ведь работу патчей проверяете, не на глаз же правите, предоставляйте рабочий-исправленный вариант класса, и делов.
Да и все же давайте не отвлекаться от темы, на не нужные разговры
 
Сделал репо открытым - Для просмотра ссылки Войди или Зарегистрируйся, и я не предлагаю уходить из этого топика, просто оставить тут обсуждение, а код в репо, откуда в любое время можно получить историю правок и любую его версию.
Вот наглядный пример моего последнего патча (с новыми доработками) - Для просмотра ссылки Войди или Зарегистрируйся, если нажать кнопку side-by-side, то можно посмотреть изменения с полным кодом скрипта.
Последняя актуальная версия класса всегда доступна по адресу Для просмотра ссылки Войди или Зарегистрируйся.

По поводу патча list(), до него они вообще не работали, вываливался Fatal Error, после - в боевых скриптах распознались корректно, тесты провались. Текущее состояние:
Исходник:
PHP:
<?php
list($a, $b, $c) = array("a","b","c","d");
list($a, $b, $c) = each($var);
list($foo) = $string;
list($q,$w) = array($a,$b);
list($drink, $color, $power) = $info;
list($drink, , $power) = $info2;
list( , , $power,$p2) = $info;
list($bar) = "abcde";
list($a, list($b, $c)) = array(1, array(2, 3));
list($a[0], $a[1], $a[2]) = $info;
[/spoil]
После декомпиляции:
[spoil]
PHP:
<?php
list($a, $b, $c) = array('a', 'b', 'c', 'd');
list($a, $b, $c) = each($var);
list($foo) = $string;
list($q, $w) = array($a, $b);
list($drink) = $info;
list($drink) = $info2;
list(, , $power) = $info;
list($bar) = 'abcde';
list($a, list($b, $c)) = array(
        1,
        array(2, 3)
        );
$a[2] = $info[2];
$a[1] = $info[1];
$a[0] = $info[0];
?>
 
да нет никаких проблем, если так;), согласен, листов не было совсем, проверил, на php 5.2 (xcache52 Для просмотра ссылки Войди или Зарегистрируйся) некоторые конструкции отсутствуют, в отличии от примера декомпиляции php 5.3
Без имени1111-1.jpg [/spoil]
 
взял класс по заявленному адресу Для просмотра ссылки Войди или Зарегистрируйся а оказалось что в первом посте более новый лежит.
как так ?

...
dima2k кеш компилируется в винде проблематично, на линуксе идеально:dk:, и под CYGWIN, как его разработчик компилирует не понятно, Кей его пошинковал, но лишь бы декомпилятор работал
...
У меня на win7x64 при запуске сразу же падает CLI с ошибкой.
Перенес на виртуалку с win2003ee x32 - работает

БАГ ?
использовал Decompiler.class.php (размер 77552 от 18.01.2013).
Декодировал 2 файла:
1 файл - на первый взгляд вроде хорошо все
2й файл - куча абракадабры - наглядно видна только общая конструкция кода, строковые значения, некоторые стандартные функции. Выкладываю его, но исходника к сожалению нету.
 

Вложения

  • 2file.php.zip
    2,7 KB · Просмотры: 26
проверил, на php 5.2некоторые конструкции отсутствую
Пофиксил - Для просмотра ссылки Войди или Зарегистрируйся

Mashonka:
Там просто имена переменных после обфускатора:

PHP:
<?php
 
function ↓↔r▲dvctu☺yh¶^♀($txt)
{
        $я = 0;
 
        for (; $я < strlen($│·;); $я++) {
                if (191 < ord($│·;[$я])) {
                        return 1;
                }
        }
 
        return 0;
}
 
function 2►♂~♂∟§3=($txt)
{
        if ('↓↔r▲dvctu☺yh¶^♀'($│·;)) {
                $│·; = addslashes($│·;);
                $╖6‼9fЮЪп =  . 'SELECT * FROM translate WHERE src=\'' . $│·; . '\'';
                ($╞═ўb▀д = mysql_query($╖6‼9fЮЪп)) || user_error(mysql_error() . '<br>' . $╖6‼9fЮЪп . '<br>', 256);
 
                if ($Г∙- = mysql_fetch_array($╞═ўb▀д)) {
                        return $Г∙-['dst'];
                }
 
                echo '<br>' . htmlspecialchars($│·;) . ' - ';
                $╖6‼9fЮЪп =  . 'INSERT INTO translate SET src=\'' . $│·; . '\'';
                ($╞═ўb▀д = mysql_query($╖6‼9fЮЪп)) || user_error(mysql_error() . '<br>' . $╖6‼9fЮЪп . '<br>', 256);
                $Yуq5!:∙Е = mysql_insert_id();
                return $│·;;
                $╖6‼9fЮЪп =  . 'SELECT * FROM translate WHERE id=\'' . $Yуq5!:∙Е . '\' and done=\'2\'';
                $я = 0;
 
                for (; $я < 50; $я++) {
                        sleep(1);
                        $╞═ўb▀д = mysql_query($╖6‼9fЮЪп);
 
                        if ($Г∙- = mysql_fetch_array($╞═ўb▀д)) {
                                echo $Г∙-['dst'];
                                return $Г∙-['dst'];
                        }
                }
 
                exit('Translate timeout!');
        }
        else {
                return $│·;;
        }
}
 
echo 'Auto translate';
 
?>
 
использовал Decompiler.class.php (размер 77552 от 18.01.2013).
также попробывал последний (ветка master, commit cf9a1ed).

---Предлагаю номер версии класса в шапке отмечать, чтобы на него удобней ссылаться было---

Прогнал 30 файлов, на 8 из них получил ошибку
PHP:
PHP Catchable fatal error:  Object of class Decompiler_DimBox could not be conve
rted to string in C:\xcache\Decompiler.class.php on line 2121
вот один из этих файлов который валится с этой ошибкой

Может это не баг, а так надо, но
прогнал еще 100 файлов
использовал Decompiler.class.php (размер 77552 от 18.01.2013) и также последний (ветка master, commit cf9a1ed).
на 5 файлах был зависон по несколько минут.
для теста повторил, отдельно на этих файлах - остальные докодятся около 1 сек, а эти по несколько минут (от1 до 5 мин).
Один из этих файлов
 

Вложения

  • error_file_on_line2121.zip
    9,2 KB · Просмотры: 10
  • long_time_process.zip
    5,9 KB · Просмотры: 12
Прогнал 30 файлов, на 8 из них получил ошибку
Ошибку исправил следующей правкой Для просмотра ссылки Войди или Зарегистрируйся (дифф большой, т.к. реформатнул код), забирать - Для просмотра ссылки Войди или Зарегистрируйся
PHP:
        case XC_POST_DEC:
        case XC_POST_INC:
        case XC_POST_DEC_OBJ:
        case XC_POST_INC_OBJ:
        case XC_PRE_DEC:
        case XC_PRE_INC:
        case XC_PRE_DEC_OBJ:
        case XC_PRE_INC_OBJ: // {{{
          $flags = array_flip(explode('_', $opname));
          if (isset($flags['OBJ'])) {
            $resvar = $this->getOpVal($op1, $EX) . '->' . unquoteVariableName($this->getOpVal($op2, $EX), $EX);
          }
          else {
            $resvar = $this->getOpVal($op1, $EX);
          }
 
          // TODO: не работает конструкция $x = array(1,2,3); $a = 'x'; $$a[0]++;
          if (is_object($resvar)) $resvar = str($resvar);
          $opstr = isset($flags['DEC']) ? '--' : '++';
          if (isset($flags['POST'])) {
            $resvar .= $opstr;
          }
          else {
            $resvar = "$opstr$resvar";
          }
          break;
[/spoil]Файл декодируется, но в одной из функций беда с именами переменных, в дампе опкода аналогичная ситуация. Или файл обфусцирован так хитро или криво работает дампер опкодов.
Mashonka написал(а):
один из этих файлов
файл уже после декодера битый, нужен оригинал.

upd: Большая пачка исправлений Для просмотра ссылки Войди или Зарегистрируйся:
1. Списки (вроде бы все работают)
[spoil]Исходный код
PHP:
<?php
 
list($bar) = "abcde";
list($help, $foo, $bar) = "qwe";
 
if (2) list($help, $bar) = "qwe";
if(1) list($drink, $color) = $info;
$val = $in[0];
list($drink, $color) = $info;
list($a, $b, $c) = each($var);
list($c) = each($var);
list($q,$w) = array($a,$b);
list($drink, , $power) = $info2;
list( , , $power,$p2) = $info;
list($a[0], $a[1], $a[2]) = $info;
list($a, $b, $c) = array("a","b","c","d");
list($c) = each($var);
list(, $c) = each($var);
list($a, $b, $c) = each($var);
list($foo) = $string;
list($q,$w) = array($a,$b);
list($a, list($b, $c)) = array(1, array(2, 3));
$b[1] = array(1);
list($$a[1]) = array(1);
[/spoil]
[spoil]Результат
PHP:
<?php
 
list($bar) = "abcde";
list(, , $bar) = "qwe";
list(, $foo) = "qwe";
list($help) = "qwe";
 
if (2) {
        list(, $bar) = "qwe";
        list($help) = "qwe";
}
 
if (1) {
        $color = $info[1];
        $drink = $info[0];
}
 
$val = $in[0];
$color = $info[1];
$drink = $info[0];
list($a, $b, $c) = each($var);
list($c) = each($var);
list($q, $w) = array($a, $b);
$power = $info2[2];
$drink = $info2[0];
$p2 = $info[3];
$power = $info[2];
$a[2] = $info[2];
$a[1] = $info[1];
$a[0] = $info[0];
list($a, $b, $c) = array("a", "b", "c", "d");
list($c) = each($var);
list(, $c) = each($var);
list($a, $b, $c) = each($var);
$foo = $string[0];
list($q, $w) = array($a, $b);
list($a, list($b, $c)) = array(
        1,
        array(2, 3)
        );
$b[1] = array(1);
list($$a[1]) = array(1);
 
?>
[/spoil]

2. Двойное разименование $$var
[spoil]
Исходник
PHP:
<?php
 
list($$a[1]) = array(1);
 
$x = 1;
$a = 'x';
$$a++;
 
$x = array(1,2,3);
$a = 'x';
$$a[0]++;
 
$a = 1;
while($a > 0){
  $a = 0;
}
@$$a++;
$input =array(1,2,3);
while (list($var,) = @each($input)){
  unset($$var);
}
 
unset($a);
[/spoil]
[spoil]
Результат
PHP:
<?php
 
list($$a[1]) = array(1);
$x = 1;
$a = "x";
$$a++;
$x = array(1, 2, 3);
$a = "x";
$$a[0]++;
$a = 1;
 
while (0 < $a) {
        $a = 0;
}
 
@$$a++;
$input = array(1, 2, 3);
 
while (list($var) = @each($input)) {
        unset($$var);
}
 
unset($a);
 
?>
[/spoil]

3. Вложенные в строки переменные:
[spoil]
Исходник
PHP:
<?php
 
$v = "{$a}";
$c = $d;
$c = $escape . $hex["{$h2}"] . $hex["{$h1}"];
$r = "{$a} \n\ra{$v}a\ta $b\0".$v."\$te\\st";







[/spoil]
[spoil]
Результат
PHP:
<?php
 
$v = "{$a}";
$c = $d;
$c = $escape . $hex["{$h2}"] . $hex["{$h1}"];
$r = "{$a} \n\ra{$v}a\ta $b\0".$v."\$te\\st";
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху