php神盾解密,浅谈PHP神盾的解密过程

欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入 前些日子一个朋友丢了个shell给我,让我帮忙解密,打开源码看了下写着是 "神盾加密" , 其实网上早就有人分析过这个了,而且写成了工具、但是我测试了很多个,没一个能用,所以决定自己从头分析一遍。

欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入

前些日子一个朋友丢了个shell给我,让我帮忙解密,打开源码看了下写着是 "神盾加密" , 其实网上早就有人分析过这个了,而且写成了工具、但是我测试了很多个,没一个能用,所以决定自己从头分析一遍。

我们来做第一步解密处理吧。

PS: 这只是我的解密思路,与大家分享一下,也许你有更好的方法还望分享

$str = file_get_contents("1.php");

// 第一步 替换所有变量

// 正则 \$[a-zA-Z_\x7f-\xff][\w\x7f-\xff]*

preg_match_all('|\$[a-zA-Z_\x7f-\xff][\w\x7f-\xff]*|', $str, $params) or die('err 0.');

$params = array_unique($params[0]); // 去重复

$replace = array();

$i = 1;

foreach ($params as $v) {

$replace[] = '$p' . $i;

tolog($v . ' => $p' . $i); // 记录到日志

$i++;

}

$str = str_replace($params, $replace, $str);

// 第二步 替换所有函数名

// 正则 function ([a-zA-Z_\x7f-\xff][\w\x7f-\xff]*)

preg_match_all('|function ([a-zA-Z_\x7f-\xff][\w\x7f-\xff]*)|', $str, $params) or die('err 0.');

$params = array_unique($params[1]); // 去重复

$replace = array();

$i = 1;

foreach ($params as $v) {

$replace[] = 'fun' . $i;

tolog($v . ' => fun' . $i); // 记录到日志

$i++;

}

$str = str_replace($params, $replace, $str);

// 第三步 替换所有不可显示字符

function tohex($m) {

$p = urlencode($m[0]); // 把所有不可见字符都转换为16进制、

$p = str_replace('%', '\x', $p);

$p = str_replace('+', ' ', $p); // urlencode 会吧 空格转换为 +

return $p;

}

$str = preg_replace_callback('|[\x00-\x08\x0e-\x1f\x7f-\xff]|s', "tohex", $str);

// 写到文件

file_put_contents("1_t1.php", $str);

function tolog($str) {

file_put_contents("replace_log.txt", $str . "\n", FILE_APPEND);

}

?>

(其中有一个记录到日志的代码,这个在之后的二次解密时有用。)

执行之后就会得到一个 1_t1.php 文件,打开文件看到类似这样的代码

找个工具格式化一下,我用的 phpstorm 自带了格式化功能,然后代码就清晰很多了。

进一步整理后得到如下代码:

//Start code decryption《===

if (!defined('IN_DECODE_82d1b9a966825e3524eb0ab6e9f21aa7')) {

define('\xA130\x8C', true);

function fun1($str, $flg="") {

if(!$flg) return(base64_decode($str));

$ret = '?';

for($i=0; $i$c = ord($str[$i]);

$ret .= $c<245 ? ( $c>136 ? chr($c/2) : $str[$i] ) : "";

}

return base64_decode($ret);

}

[1] [2]

test.jsp?url=http%3A%2F%2Fwww.chinaitlab.com%2Fcms%2Fimages%2Flogo14.gif&refer=http%3A%2F%2FLinux.chinaitlab.com%2FPHP%2F958754.html

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值