神盾加密解密教程(二)PHP 神盾解密

前端技术 2023/09/04 PHP

其实网上早就有人分析过这个了,而且写成了工具、但是我测试了很多个,没一个能用,所以决定自己从头分析一遍。

打开神盾加密过后的源码,可以看到这样的代码

上面写着广告注释,而且不能删除,因为文件末尾有个md5效验码,以验证代码是否被修改过,如图、

再仔细看代码部分,发现里面都是乱码,其实这都是障眼法,
它利用了php变量扩充到 latin1 字符范围,其变量匹配正则是 \\$[a-zA-Z_\\x7f-\\xff][\\w\\x7f-\\xff]* 这样的格式。
这个前几天天已经分析过了,最终也在官网找到了答案,请看《神盾加密解密教程(一)PHP变量可用字符

有点扯远了,我们来做第一步解密处理吧。
PS: 这只是我的解密思路,与大家分享一下,也许你有更好的方法还望分享。。

复制代码 代码如下:

<?php
$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);
}
?>

本文地址:https://www.stayed.cn/item/11091

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。