php神盾 var 1.54,淺談PHP神盾的解密過程

我們來做第一步解密處理吧。

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 自帶了格式化功能,然后代碼就清晰很多了。

進一步整理后得到如下代碼

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值