Python爬蟲進階必備 | 某鏡像網站分析 - 教程隨你出,學會算我輸

Python爬蟲進階必備 | 某鏡像網站分析 - 教程隨你出,學會算我輸

今日份網站


( 由讀者提供網址 )

aHR0cDovL2FjLnNjbW9yLmNvbS8=

抓包分析與加密定位

先來看看加密的內容密文【圖1-1】

Python爬蟲進階必備 | 某鏡像網站分析 - 教程隨你出,學會算我輸

圖1-1

看過前面文章的朋友就會說,這個和 Base64 的加密結果很像,有猜想就直接搞起唄。【圖1-2】

Python爬蟲進階必備 | 某鏡像網站分析 - 教程隨你出,學會算我輸
圖1-2

解密的結果是一串亂碼,說明不是 Base64 ,繼續找找有沒有別的點可以分析。

我們可以看到這裏所有的加密字符串都是 autourl 數組的一個元素,那我們搜索 autourl 試試。【圖1-3】
Python爬蟲進階必備 | 某鏡像網站分析 - 教程隨你出,學會算我輸

圖1-3

只有兩個搜索結果,和現有的內容比較相像的是第二個結果,我們跟進去繼續搜索【圖1-4】,可以看到有 4 個相關項,我們可以都打上斷點,也可以參考鹹魚圖中斷點的位置,重新加載頁面即可進入斷點了。

Python爬蟲進階必備 | 某鏡像網站分析 - 教程隨你出,學會算我輸

圖1-4

加密分析與加密代碼扣取

我們簡單分析下,當斷點在 58 行時,url 的值還是密文的。【圖2-1】

Python爬蟲進階必備 | 某鏡像網站分析 - 教程隨你出,學會算我輸

圖2-1

當代碼運行至 59 行的時候 url 的值已經解析爲明文了。圖2-2
Python爬蟲進階必備 | 某鏡像網站分析 - 教程隨你出,學會算我輸

圖2-2

所以我們可以定位加密的位置爲 strdecode 這個方法。( 看方法名也很清楚了 )

所以接下來我們把這個方法相關的代碼扣出來。

function strdecode(string) {
    string = base64decode(string);
    key = Gword+'ok ';
    len = key.length;
    code = '';
    for (i = 0; i < string.length; i++) {
        var k = i % len;
        code += String.fromCharCode(string.charCodeAt(i) ^ key.charCodeAt(k))
    }
    return base64decode(code)
}
var base64DecodeChars = new Array(-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1);

function base64decode(str) {
    var c1, c2, c3, c4;
    var i, len, out;
    len = str.length;
    i = 0;
    out = "";
    while (i < len) {
        do {
            c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff]
        } while (i < len && c1 == -1);
        if (c1 == -1) break;
        do {
            c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff]
        } while (i < len && c2 == -1);
        if (c2 == -1) break;
        out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4));
        do {
            c3 = str.charCodeAt(i++) & 0xff;
            if (c3 == 61) return out;
            c3 = base64DecodeChars[c3]
        } while (i < len && c3 == -1);
        if (c3 == -1) break;
        out += String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2));
        do {
            c4 = str.charCodeAt(i++) & 0xff;
            if (c4 == 61) return out;
            c4 = base64DecodeChars[c4]
        } while (i < len && c4 == -1);
        if (c4 == -1) break;
        out += String.fromCharCode(((c3 & 0x03) << 6) | c4)
    }
    return out
}

function run(autourl) {
    for (var i = 1; i < autourl.length; i++) {
        url = autourl[i];
        Gword = ' [email protected]'
        if(Gword!='') url = strdecode(url);
        var st = url.indexOf("//",1);
        var _domain = url.substring(st+1, url.length) ;
        var et = _domain.indexOf("/",1);
        surl = url.substring(0,et+st+2) ;
        console.log(surl)
    }
}

function geturl(){
    autourl = ["QSQ7XggEHBUhXDxYLwIFHwh4ZRkwXFI0Pw4jGj5ZXlI="
        , "QSQ7XggIPlUhFktUOl0GGwpodgUlA1I5KRpYBRBHW1I="
        , "QSQ7XggIPlUhFksaBzg7FQpodRkKXFI2KVEVAz5AMRkOLFMd"
        , "QSQ7XggIPlUhFktALhZYHA93bhwwNgQ1ETQ4GREcLQAPXRNIQwtUUw=="
        , "QSQ7XggIPlUhFktEOl0gGjESWAILXFM1FyRUGD4dLQUMKFJTeTQgUw=="
        , "QSQ7XggIPlUhFksdB1wOGg9nTAQLABsyPw5cAz4dLQUMKFJTeTQgUw=="
        , "QSQ7XggIPlUhFksdB1wOGiRkYlgNOT06Eis4GiscWhshXCVKQStQHTIYOl4="
        , "QSQ7XggIPlUhFktALwEdGwp4ahULXSErKTRcGT5DLRkPPFJaeV4BGAkHNRo="
        , "QSQ7XggEHBUhXUdGBwZYAAp4ZhQlAyU2ETBYBRBHWl8JXABW"
        , "QSQ7XggIPlUhFktALwE/XQlzFRYwXAcsEQ4jAz5ZXlI="
        , "QSQ7XggIPlUhFktALwEdGwp4ahULXSErKTRcGT5DLRkPPFMd"
        , "QSQ7XggIPlUhFktALwJcGTF4TF0IPV4qEQpVUg=="
        , "QSQ7XggIPlUhFktAAV1UAQlndVkmLV4oFg07Fih2BwM0ASVQRCs/FCctRg8JLEoT"
        , "QSQ7XggIPlUhFksdOTgkGg53ZhoKKQc1KRpYXBN5Vxk="
        , "QSQ7XggIPlUhFktEAigrFg9obgQKKQA1KVE/AShpWgUOFl5WQwEKGA=="
        , "QSQ7XggIPlUhFksdB1wOGjESRB0MJgQ1FyRUGD5ZXlI="];
    run(autourl)
}
geturl()

這個代碼就比較簡單,缺啥補啥即可。

下面是運行後的解密結果:

Python爬蟲進階必備 | 某鏡像網站分析 - 教程隨你出,學會算我輸

嘮嗑


有讀者後臺私信我說,過往案例太簡單了,有沒有點有難度的案例拿出來講講,比如X程,X寶,X數之類的。

emmmmm...
Python爬蟲進階必備 | 某鏡像網站分析 - 教程隨你出,學會算我輸
沒有,我也不會。

之後也許會有,但是誰知道呢。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章