Декодер js Packer на php

siv1987
На сайте с 02.04.2009
Offline
427
845

Здравствуйте уважаемые форумчане.

Ищу декодер на php для раскодировки обфусцированного кода в "Packer"


eval(function(p,a,c,k,e,d){e=function(c){return c};if(!''.replace(/^/,String)){while(c--){d[c]=k[c]||c}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('3 6(){1 2=5 1 0=7 4(0)}',8,8,'myTest|var|test|function|go||somefunc|'.split('|'),0,{}))
dkameleon
На сайте с 09.12.2005
Offline
386
#1
siv1987:
Ищу декодер на php для раскодировки обфусцированного кода в "Packer"

http://www.danstools.com/javascript-beautify/

Дизайн интерьера (http://balabukha.com/)
siv1987
На сайте с 02.04.2009
Offline
427
#2

dkameleon, да, осталось только каким-то образом прикрутить это к php. Задача состоит в том, чтобы декодировать это-то код в php - парсим страницу, а часть интересующей информации обфусцирована в Packer.

Вначале была идея портировать алгоритм на php, но проблема в том что он может иметь разные вариации.

R
На сайте с 20.02.2015
Offline
59
#3

Поставить на сервер http://phantomjs.org/ как то так только.

siv1987
На сайте с 02.04.2009
Offline
427
#4
rereg:
Поставить на сервер http://phantomjs.org/ как то так только.

Не вариант, его рассматривали в первую очередь. Оптимально, конечно, было бы найти сервис который удаленно исполняет javascript.

Пока что остановились на таком костыле, благо алгоритм там самый простой


if(preg_match($regexp, $packed, $out)){
$bits = array_slice($out, 2);
$func = $out[1];

list($p, $a, $c, $k, $e, $d) = $bits;
$p = stripslashes($p);
$k = explode('|', $k);
$d = array();

if(preg_match('/e=function\((.*?)\)\{return (.*?)\}/', $func, $match)){
$vars = explode(',', $match[1]);
$uses = array();
$code = $match[2];

$code = preg_replace('/^([a-z]+)$/', '\$$1', $code);
$code = preg_replace_callback('/(\w+)\.toString\((\w+)\)/', function($m) use($vars, &$uses){
if(! is_numeric($m[2])){
if(! in_array($m[2], $vars)){
$uses[] = $m[2];
}
$m[2] = '$'.$m[2];
}
if(! in_array($m[1], $vars)){
$uses[] = $m[1];
}
$m[1] = '$'.$m[1];
return 'base_convert('.$m[1].', 10, '.$m[2].')';
}, $code);

array_walk($vars, function(&$v){$v = '$'.$v;});
array_walk($uses, function(&$v){$v = '$'.$v;});

$evalCode = '$e = function('.implode(', ', $vars).')';
$evalCode .= count($uses) ? ' use ('.implode(', ', $uses).')' : '';
$evalCode .= '{return '.$code.';};';

if(@eval($evalCode) === false){
return false;
}
}

if(preg_match('/while\(c--\){?(.*?)[;}]/', $func, $match)){
$code = $match[1];
$code = str_replace('||', ' ?: ', $code);
$code = preg_replace('/\b([a-z])\(([a-z])\)/', '\$$1(\$$2)', $code);
$code = preg_replace('/\b([a-z])\[([a-z])\]/', '\$$1[\$$2]', $code);
$code = preg_replace('/([a-z])\.toString\(([a-z])\)/', 'base_convert(\$$1, 10, \$$2)', $code);
$code = preg_replace('/\b(?<!\$)([a-z])\[/', '\$$1[', $code);
$code = preg_replace('/\b(?<!\$)([a-z])$/', '\$$1', $code);

$evalCode = 'while($c--){';
$evalCode .= $code.';}';

if(@eval($evalCode) === false){
return false;
}
}

$k = array(function($e) use ($d){return $d[$e[0]];});
$e = '\\w+';
$c = 1;

while($c--){
if($k[$c]){
$p = preg_replace_callback('/\b'.$e.'\b/', $k[$c], $p);
}
}

return $p;
}

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий