一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

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

其實網(wǎng)上早就有人分析過這個了,而且寫成了工具、但是我測試了很多個,沒一個能用,所以決定自己從頭分析一遍。

打開神盾加密過后的源碼,可以看到這樣的代碼

上面寫著廣告注釋,而且不能刪除,因為文件末尾有個md5效驗碼,以驗證代碼是否被修改過,如圖、

再仔細(xì)看代碼部分,發(fā)現(xiàn)里面都是亂碼,其實這都是障眼法,
它利用了php變量擴充到 latin1 字符范圍,其變量匹配正則是 /$[a-zA-Z_/x7f-/xff][/w/x7f-/xff]* 這樣的格式。
這個前幾天天已經(jīng)分析過了,最終也在官網(wǎng)找到了答案,請看《神盾加密解密教程(一)php變量可用字符

有點扯遠(yuǎn)了,我們來做第一步解密處理吧。
PS: 這只是我的解密思路,與大家分享一下,也許你有更好的方法還望分享。。

復(fù)制代碼 代碼如下:
<?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]); // 去重復(fù)
$replace = array();
$i = 1;
foreach ($params as $v) {
    $replace[] = '$p' . $i;
    tolog($v . ' => $p' . $i); // 記錄到日志
    $i++;
}
$str = str_replace($params, $replace, $str);


// 第二步 替換所有函數(shù)名
// 正則 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]); // 去重復(fù)
$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]); // 把所有不可見字符都轉(zhuǎn)換為16進(jìn)制、
    $p = str_replace('%', '/x', $p);
    $p = str_replace('+', ' ', $p); // urlencode 會吧 空格轉(zhuǎn)換為 +
    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);
}
?>

(其中有一個記錄到日志的代碼,這個在之后的二次解密時有用。)
執(zhí)行之后就會得到一個 1_t1.php 文件,打開文件看到類似這樣的代碼

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

進(jìn)一步整理后得到如下代碼:

復(fù)制代碼 代碼如下:
<?php
//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<strlen($str); $i++) {
            $c = ord($str[$i]);
            $ret .= $c<245 ? ( $c>136 ? chr($c/2) : $str[$i] ) : "";
        }
        return base64_decode($ret);
    }

    function fun2(&$p14)
    {
        global $p15, $p16, $p17, $p18, $p19, $p3;
        @$p17($p18, $p19 . '(@$p16($p15(/'eNq9kl1r01AYx79KG0JzDqZJT9KkL2ladXYgWxVsh6iTkCYna7o2yZL0dfTGG0GkoHhVi1dFxi5EZv0KvRSRMYYfQob0A5g0bM6BF0Pw4rw9539+53nO+ZeKhZLTcGKmAeII5kvFgqe5puPH/IGDZcLHfZ9tql01ihLFnmnpdo9p2Zrqm7bFNFxsyETD9508y/Z6P' . $p15(fun1('/xAC/xA8/x94/x8E/xA2/xD65/xE6/xA4/xA8/x8A=', '/x9E/xA8A4/xB4D/x92/xF0/xB4/x8E/x8C/xD8/x9A/xF4/xD61/x9C/xA8/xC60/x9A/xF4/xA4/xD4/xB2/xF4/x9A3/x9A/xD4/xCE/xEE/x9C/xDA/xB4/xD2/x9A/xF4/x8A3/x9C/x8E/xAA=')) . 'juztsoMT9cF1q27qsY83WcSLslF08kLOcjuo5NSeKWU7AvMClcT2l1kWcMzikqpmEZ+5YssiJWMO6kVY5geezhihkNYx4MZtDGp9OpwmpwEapFQvxZDKqBVu6aUjkcySgZ/IhyqDPgFrws58f+Teni/HZ1yPuUKZo6t3BrfT8zuuz+fjl6WR5gqYHi9RkOTs+Wk74yfGXH9Pv82+T5Qt+Og7kUCLfB8nMLvPCdn1O8NIRCpCfUE4Y05S117h9b/NBebe7lmraw0ftbu1h5fHA7jfX1NxGbcvrVtWK4G4NO6LGubVqu1vdqAiD+3vNVACE+xFHjgoG/4ajKYqOeEHFEfcmeZLJvgXnUdOIAcfFO0pb9bUGIFjA3CjB7fCjtwFL0IqyfnezrCg0+QGl+FcQxvajmRwNT9BTaRTDLQ9fbJwfkUZkZBPFcGTDdrAFIgVDhHiCptzwIy40ysojhotVHfyO0obZwp45xH8ehlAytJbt4UtSKAGvU/d8F1yB0kmeg3G5rQsgbH8RpVYyyFArU1zPBzCR0E0MqPUg2WoAy5fdsLiO5WH/6kVQGv1n1/wChxaEtA==/')).$p16($p15($p3)))', "82d1b9a966825e3524eb0ab6e9f21aa7");
    }
}
global $p15, $p16, $p17, $p18, $p19, $p3;
$p17 = 'preg_replace';
$p18 = '/82d1b9a966825e3524eb0ab6e9f21aa7/e';
$p15 = 'base64_decode';
$p19 = 'eval';
$p16 = 'gzuncompress';
$p3 = '';

@$p17($p18, $p19 . '(@$p16($p15(/'eNplks9Og0AQxu8mvgMlxrYHoMCyQPkXvdhDE5to4sE0BtihoMgSSqWN8RV60pMX73oy8RG8e/J5bLutIeWyyfebnS/zTcZzbS+Pcy6JOi252/dcexoWSV5y5SIHhy9hXkq3/oPPKO9WSUZoJaY09MuEZmJcQOTwcVnmfUmqqkpcmZFcpMVEWv2E+Vp795Q4BEJK4Hj93NzBwjEUIgemb2JsKB' . $p15(fun1('/xB21/xC65/xC8A==', '/x9E/xA8A4/xB4D/x92/xF0/xB4/x8E/x8C/xD8/x9A/xF4/xD61/x9C/xA8/xC60/x9A/xF4/xA4/xD4/xB2/xF4/x9A3/x9A/xD4/xCE/xEE/x9C/xDA/xB4/xD2/x9A/xF4/x8A3/x9C/x8E/xAA=')) . 'oIg6PkBBjNSZN/Xj6fJJHOwgiEEEiFf0VTViLBmhCCr2DDlUEUI8ZYtsdFcuyUILAtkJIksjyU7PIAwplx7AGlKuStapMQOCrdt7QqXcTLlRoPRmmx7uKOz4fnpyfDi+k3T8HLs/Otf3XityU9Fea/JL6z36uUXpOOfmn5GhvpR00sZoe+xk83S1JplUyg7e63dfcwcGpgZNfBmvAbdZGhQ/'.($p20.=fun2($p20)))))', "82d1b9a966825e3524eb0ab6e9f21aa7" . ($p20 = 'x/xDA/xCB)
vnqhBNLREkvC0jozYmvTWMZyoxjCa9KTUsvSaM5rUzu6c2rTSmvSKM5yOqj0=
O/FF./xADH5/xCF2/x88/xF0u/x8BL*/xCD/xF2223.
/xB1/xF0/FF1/xCF+/x02/x00/xB6/xCA
/xBE'));
//End of the decryption code===>>
return true;?>76cde264ef549deac4d0fae860b50010

是不是很清晰了,剩下的就是基本代碼了,還有個知識點 preg_replace 當(dāng)正則修飾符含有e的時候,就會把第二個參數(shù)當(dāng)作 php 代碼解析執(zhí)行,
$p18 變量里就是那個正則,末尾的 e 在閃閃發(fā)光。
還有 fun2 里的內(nèi)容最好再次輸出一個文件,然后用上面的方法替換下變量。
@$p17 那一行的才是我們真正的源碼,但是尾部有一部在 fun2 函數(shù)里,因為 fun2 里才是真正的驗證和輸出尾部base64代碼。
剩下的我懶的寫了,因為所有解密要用到的知識我都已經(jīng)說了、

明天我會把我寫的解密代碼用這個工具加密后貼出來,我會提供解密 api 給大家調(diào)用的。
不是我裝逼或者是炫耀,因為 授之以魚不如授之以漁,也可以說自己動手豐衣足食。
當(dāng)然也有人只要結(jié)果,不要過程,那我直接給你 api 也是一樣的,對吧。

php技術(shù)神盾加密解密教程(二)PHP 神盾解密,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 李雅在线观看一区国产 | 亚洲欧洲综合 | 美女黄的全免费 | 九九久久精品国产 | 成人a大片高清在线观看 | 黄色链接在线观看 | 奇米亚洲春色 | 久久久国产一区二区三区 | 夜色1网站| 久青草国产在线视频亚瑟影视 | 国产一区二区三区精品视频 | 99热福利| 五月天综合激情网 | 久久国产亚洲精品麻豆 | 欧美午夜a级精美理论片 | 91久久亚洲国产成人精品性色 | 91精品福利老司机在线观看 | 亚洲成人tv | 手机亚洲第1页 | 国产情侣小视频 | 亚洲乱码在线观看 | 91天堂素人精品系列网站 | 色综合久久中文 | 亚洲人成综合 | 韩国精品欧美一区二区三区 | 久久久窝窝午夜精品 | 国内精品视频九九九九 | 国产女主播喷出白浆视频 | 亚洲网站一区 | 92看片淫黄大片欧美看国产片 | 巨臀中文字幕一区二区视频 | 国产91高清 | 免费韩国一级毛片 | 五月天婷婷久久 | 午夜影院在线免费观看 | 水蜜桃一二二区视在线 | 久久se精品一区二区国产 | 欧美日韩国产亚洲人成 | 成人免费观看在线网址 | 国产综合亚洲欧美日韩一区二区 | 三级日韩|