最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2014年06月08日 12:36:06   作者:  
前些日子一個(gè)朋友丟了個(gè)shell給我,讓我?guī)兔饷埽蜷_(kāi)源碼看了下寫(xiě)著是 “神盾加密” , 牛逼閃閃的樣子、 百度下發(fā)現(xiàn)神盾是個(gè)很古老的東西,最后一次更新是在 2012-10-09。和他相似的另一款是phpjm,有人說(shuō)是神盾抄襲phpjm的,這些都不是我們所要關(guān)心的問(wèn)題、phpjm一直在更新,而神盾貌似不搞了,我們分析下神盾,順便寫(xiě)成工具,方便大家使用(因?yàn)樗桓?,所以就不用?dān)心解密工具失效問(wèn)題了)。

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

打開(kāi)神盾加密過(guò)后的源碼,可以看到這樣的代碼

上面寫(xiě)著廣告注釋?zhuān)也荒軇h除,因?yàn)槲募┪灿袀€(gè)md5效驗(yàn)碼,以驗(yàn)證代碼是否被修改過(guò),如圖、

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

有點(diǎn)扯遠(yuǎn)了,我們來(lái)做第一步解密處理吧。
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]); // 把所有不可見(jiàn)字符都轉(zhuǎn)換為16進(jìn)制、
    $p = str_replace('%', '\x', $p);
    $p = str_replace('+', ' ', $p); // urlencode 會(huì)吧 空格轉(zhuǎn)換為 +
    return $p;
}
$str = preg_replace_callback('|[\x00-\x08\x0e-\x1f\x7f-\xff]|s', "tohex", $str);

// 寫(xiě)到文件
file_put_contents("1_t1.php", $str);

function tolog($str) {
    file_put_contents("replace_log.txt", $str . "\n", FILE_APPEND);
}
?>

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

找個(gè)工具格式化一下,我用的 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

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

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

相關(guān)文章

  • PHP使用Session遇到的一個(gè)Permission denied Notice解決辦法

    PHP使用Session遇到的一個(gè)Permission denied Notice解決辦法

    這篇文章主要介紹了PHP使用Session遇到的一個(gè)Permission denied Notice解決辦法,本文系統(tǒng)環(huán)境是ubuntu、Debian系統(tǒng),有很小的概率會(huì)遇到這個(gè)提示,需要的朋友可以參考下
    2014-07-07
  • php權(quán)限調(diào)整強(qiáng)制用戶(hù)退出的解決步驟

    php權(quán)限調(diào)整強(qiáng)制用戶(hù)退出的解決步驟

    這篇文章主要介紹了php權(quán)限調(diào)整強(qiáng)制用戶(hù)退出的解決步驟,當(dāng)用戶(hù)登錄時(shí),將用戶(hù)的登錄狀態(tài)和其他相關(guān)信息存儲(chǔ)在服務(wù)器端,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-09-09
  • 兩種php給圖片加水印的實(shí)現(xiàn)代碼

    兩種php給圖片加水印的實(shí)現(xiàn)代碼

    本文提供了兩種php給圖片加水印的實(shí)現(xiàn)代碼,其中一種是添加文字水印,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2015-07-07
  • CentOS 上搭建 PHP7 開(kāi)發(fā)測(cè)試環(huán)境

    CentOS 上搭建 PHP7 開(kāi)發(fā)測(cè)試環(huán)境

    本文給大家分享的是作者在centos上搭建部署php7的開(kāi)發(fā)測(cè)試環(huán)境的全部過(guò)程,非常的細(xì)致,有需要的小伙伴可以參考下
    2017-02-02
  • yii2簡(jiǎn)單使用less代替css示例

    yii2簡(jiǎn)單使用less代替css示例

    本篇文章主要介紹了yii2簡(jiǎn)單使用less代替css示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-03-03
  • PHP實(shí)現(xiàn)活動(dòng)人選抽獎(jiǎng)功能

    PHP實(shí)現(xiàn)活動(dòng)人選抽獎(jiǎng)功能

    這篇文章主要介紹了PHP實(shí)現(xiàn)活動(dòng)人選抽獎(jiǎng)功能,隨機(jī)抽取指定人數(shù),依次列舉被抽中的人名,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • 使用phpunit進(jìn)行接口自動(dòng)化測(cè)試

    使用phpunit進(jìn)行接口自動(dòng)化測(cè)試

    下面小編就為大家分享一篇使用phpunit進(jìn)行接口自動(dòng)化測(cè)試,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • WHOOPS PHP調(diào)試庫(kù)的使用

    WHOOPS PHP調(diào)試庫(kù)的使用

    下面小編就為大家?guī)?lái)一篇WHOOPS PHP調(diào)試庫(kù)的使用。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • ThinkPHP CURD方法之order方法詳解

    ThinkPHP CURD方法之order方法詳解

    ThinkPHP CURD方法的order用于對(duì)操作的結(jié)果排序。這篇文章主要介紹了order方法的用法,需要的朋友可以參考下
    2014-06-06
  • PHP生成指定長(zhǎng)度隨機(jī)數(shù)最簡(jiǎn)潔的方法

    PHP生成指定長(zhǎng)度隨機(jī)數(shù)最簡(jiǎn)潔的方法

    這篇文章主要介紹了PHP生成指定長(zhǎng)度隨機(jī)數(shù)最簡(jiǎn)潔的方法,一行代碼搞定隨機(jī)數(shù)生成,是不是最簡(jiǎn)潔、最優(yōu)雅的方法,需要的朋友可以參考下
    2014-07-07

最新評(píng)論

资源县| 罗源县| 梁河县| 宿迁市| 六安市| 和林格尔县| 儋州市| 万山特区| 遵义县| 固原市| 义乌市| 涿鹿县| 洪洞县| 伊宁市| 徐州市| 昌江| 邻水| 启东市| 民和| 甘泉县| 儋州市| 寿光市| 宜兰县| 滁州市| 沈丘县| 台南县| 祁东县| 怀安县| 武汉市| 盘锦市| 久治县| 苍梧县| 班玛县| 营口市| 安阳市| 洱源县| 肃宁县| 新蔡县| 永胜县| 西丰县| 社旗县|