解码一段PHP后门程序(转)

这是一个被使用非常广泛的PHP后门脚本,一旦被放入,几乎无所不能了…..

打开文件看下:

1
2

eval(gzinflate(base64_decode('FJ3HjqRcukXn/SL9SwzwTmrdFh......')));

看起来是经过加密了,但是为了执行总是要还原成脚本才行吧,于是尝试直接输出:

1
2

echo gzinflate(base64_decode('FJ3HjqRcukXn/SL9SwzwTmrdFh......'));

发现输出了如下内容:

1
2
3
4

?><?php
gzinflate(base64_decode('FJ3HjqRcukXn/SL9SwzwTmrdFh......'));
?><?

把它提取出来,再来一次:

1
2

echo gzinflate(base64_decode('FJ3HjqRcukXn/SL9SwzwTmrdFh......'));

还是类似输出:

1
2
3
4

?><?php
gzinflate(base64_decode('FJ3HjqRcukXn/SL9SwzwTmrdFh......'));
?><?

到这个时候,我知道,它经过多次嵌套,好吧,我手工是不可能完成的了,发现输出总有gzinflate(base64_decode这样字符,我写了一段程序让它脱掉它的外皮:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

$t="FJ3HjqRcukXn/SL9SwzwTmrdFh......";
$i = $j = 0;
while(true){

if((strpos($t,'gzinflate(base64_decode(') !== false)){
++$j;
$s = strrpos($t,'(')+1;
$l = strpos($t,')')-$s;
$t = trim(substr($t,$s,$l),"'");

$t = gzinflate(base64_decode($t));
}else{
break;
}
//echo ">>>>".++$i."-".$j."
";
}
echo "<!--";
echo $t;
echo "-->";

//$f = fopen("/tmp/o.txt","a");
//fwrite($f,$t);
//fclose($f);

源代码成功输出,解码成功。

从实现上来看,采用了这样的结构:

1
2
3
4
5
6
7
8
9
10
11
12

?><?php
eval(gzinflate(base64_decode('
?><?php
eval(gzinflate(base64_decode('
?><?php
eval(gzinflate(base64_decode(...));
?><?
');
?><?
');
?><?

把内容编码后加上外皮,继续这个过程多次。这个就是所谓的加密了。每次输出看起来都一样(其实不一样),这样就可以迷惑人了。

好吧,解码之后运行下上个图(不解码当然也是可以运行的了)
PHP后门程序解码

PHP后门程序解码

PHP后门程序视图

PHP后门程序视图

坚持原创技术分享,您的支持将鼓励我继续创作!