PHP混淆解密之pack还原大法

先看一段代码:

图中代码已经格式化,可以看到有大量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的代码。

当然了,利用这种方法还能还原一些全局变量或者其他的加密标签,你可以改造得更智能,更自动化,本文仅分享一下思路,希望对你有所启发。


Mine吧 » PHP混淆解密之pack还原大法

发表评论