先看一段代码:
图中代码已经格式化,可以看到有大量pack,当然,不只截图中的这些,手动替换的话,肯定要换到手软。当然了,肯定有自动替换的方法,mine就想到了一个比较笨的办法,下边详细说下。
分析下代码,上边是pack参数的数组,存在Globals变量中,这些数组就不管了,我们直接把有pack的代码行,变成一个字符串,然后把pack部分分离出来,接到代码中,例如:
echo'$GLOBALS["'.pack("H*", $GLOBALS[AAAAA____][0x5]).'"] = "'.pack("H*", $GLOBALS[AAAAA____][06]).'";';
这样就会把这一行代码直接打印出来,打印出来后pack就被替换成真正的字符了,当然必须得自动化处理,代码如下:
<?php
$txt = file('1.php');//按行读取目标文件1.php
foreach($txt as $t){
$t = str_replace("'", "\'", $t);//转义
$t = toPack($t);
echo 'echo \''.$t.'\';';
}
function toPack($t){
preg_match_all('/pack\([^\)]*?\)/s', $t, $pack);
if($pack){
foreach($pack[0] as $p){
$t = str_replace($p, '"\'.'.$p.'.\'"', $t);
}
}
return $t;
}
?>
经过处理后,输出的代码要替换原来的文件内容,运行一遍,才会得到去除pack的代码。
当然了,利用这种方法还能还原一些全局变量或者其他的加密标签,你可以改造得更智能,更自动化,本文仅分享一下思路,希望对你有所启发。
发表回复