<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<head><meta forua="true" http-equiv="Cache-Control" content="max-age=0" /></head>
<card title="PHP之神盾解密 - 神盾加密解密教程（二）" id="card1">
<p> 游客</p><p>
标题:PHP之神盾解密 - 神盾加密解密教程（二）<br/>
正文:<br/>
其实网上早就有人分析过这个了，而且写成了工具、但是我测试了很多个，没一个能用，所以决定自己从头分析一遍。打开神盾加密过后的源码，可以看到这样的代码上面写着广告注释，而且不能删除，因为文件末尾有个md5效验码，以验证代码是否被修改过，如图、再仔细看代码部分，发现里面都是乱码，其实这都是障眼法，它利用了php变量扩充到 latin1 字符范围，其变量匹配正则是 \$[a-zA-Z_\x7f-\xff][\w\x7f-\xff]* 这样的格式。这个前几天天已经分析过了，最终也在官网找到了答案，请看《PHP变量可用字符 - 神盾加密解密教程（一）》有点扯远了，我们来做第一步解密处理吧。PS: 这只是我的解密思路，与大家分享一下，也许你有更好的方法还望分享。。代码如下:&amp;lt;?php$str = file_get_contents(&amp;quot;1.php&amp;quot;);// 第一步 替换所有变量// 正则 \$[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 . ' =&amp;gt; $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 = a<br/><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=1669&amp;Page=1">[&lt;&lt;]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=1669&amp;Page=1">[[1]]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=1669&amp;Page=2">[2]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=1669&amp;Page=3">[3]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=1669&amp;Page=6">[&gt;&gt;]</a><br/>
<br/>
<a href="wap.asp?act=Com&amp;id=1669">查看评论(0)</a><br/>
<a href="wap.asp?act=AddCom&amp;inpId=1669">发表评论</a><br/><br/>

<br/>

<br/>
<a href="http://camnpr.com/wap.asp">首页</a>
</p>
</card>
</wml>