1. 程式人生 > 實用技巧 >教你怎麼使用Python爬蟲進階--X咕視訊密碼與指紋加密分析!

教你怎麼使用Python爬蟲進階--X咕視訊密碼與指紋加密分析!

先來看看今天的受害者:

aHR0cDovL3d3dy5taWd1dmlkZW8uY29tL21ncy93ZWJzaXRlL3ByZC9pbmRleC5odG1s

一、分析密碼加密

這次分析的是他登陸的三個引數,先分析登陸邏輯,抓個包看看。

可以看到這裡用的是彈出的視窗登陸【圖1-1】,為了避免主頁其他元素的干擾抓包,我們可以通過右鍵 檢視框架原始碼 的方式開啟登陸框分析抓包【圖1-2】。

把開啟的原始碼頁面位址列中的view-source:刪除即可開啟以下頁面【圖1-3】:

接下來用錯誤的賬號密碼登陸一波,可以看到如下的包【圖1-4】,不過通過上面的 publickey 隱隱猜到這裡的加密引數可能和 RSA 有關,先來找找密碼加密的位置:

照常搜尋一下enpassword,預料之中是沒有搜尋到有用的結果【圖1-5】,不過定位元素可以通過 name 定位 也可以通過 class 定位,所以同樣試試J_RsaPsd,果然找到像樣的檔案了【圖1-6】。

在開啟的檔案裡檢索J_RsaPsd,可以看到有3個相關的結果(熟悉加密的已經可以看出這裡是 RSA 加密),我們通過把所有相關的結果都打上斷點【圖1-6】,並通過重新發起一次登入請求,來判斷哪個J_RsaPsd是密碼的加密邏輯。

通過重新發起請求,斷點斷在 333 行【圖1-8】。

我們先複製整段程式碼:

c.setPublic(a.result.modulus, a.result.publicExponent);
var d = c.encrypt(b.val());
b.siblings(".J_RsaPsd").val(d)
複製程式碼

我們通過控制檯看看這些引數分別是什麼【圖1-9】。

通過前文抓包和JS頁面的程式碼,我們判斷密碼的加密是RSA加密,所以我們就需要找齊RSA加密的需要的幾個要素,比如他的公鑰 ,因為RSA是非對稱加密本地使用公鑰加密,伺服器上使用私鑰解密。再看看【圖1-8】上的幾個引數不知道你們有沒想起開頭【圖1-4】我提及的那條抓包。我們切換到 控制檯-Network 看看【圖1-10】。

{"status":2000,"message":"","header":{},"result":{"publicExponent":"010001","modulus":"00833c4af965ff7a8409f8b5d5a83d87f2f19d7c1eb40dc59a98d2346cbb145046b2c6facc25b5cc363443f0f7ebd9524b7c1e1917bf7d849212339f6c1d3711b115ecb20f0c89fc2182a985ea28cbb4adf6a321ff7e715ba9b8d7261d1c140485df3b705247a70c28c9068caabbedbf9510dada6d13d99e57642b853a73406817"}}
複製程式碼

是不是和我們在【圖1-9】中打印出來的數值完全相同

tip : 這裡的b.val()是我輸入的錯誤密碼。

這裡我們找齊了加密需要的引數,其實我覺得沒必要扣JS,但是我知道。。

不要我覺得,你要你覺得

所以偷懶用之前扣的程式碼測試一下:

-----------此處省略500行-----------
function bodyRSA()
{
    //setMaxDigits(130);

    var key = RSAUtils.getKeyPair("010001","","00833c4af965ff7a8409f8b5d5a83d87f2f19d7c1eb40dc59a98d2346cbb145046b2c6facc25b5cc363443f0f7ebd9524b7c1e1917bf7d849212339f6c1d3711b115ecb20f0c89fc2182a985ea28cbb4adf6a321ff7e715ba9b8d7261d1c140485df3b705247a70c28c9068caabbedbf9510dada6d13d99e57642b853a73406817");
    return key
}
function get_encrypt(password) {

    key = bodyRSA();
    var a = RSAUtils.encryptedString(key,password)

    //var b = RSAUtils.encryptedString(key,username)
    console.log(a)
    console.log('----------------------------------')
    //console.log(b)
    return a
}
get_encrypt('11111111111')
複製程式碼

二、分析FingerPrintDetail與fingerPrint

根據第一部分的【圖1-5】和圖【1-6】可以很快定位加密的位置,這裡就不說了【圖2-1】。

追進去分析一下rsaFingerprint的邏輯,可以看到其實和密碼加密用的是一樣的RSA加密【圖2-2】只是部分引數不同。

這裡比較疑惑的是$.fingerprint.result和$.fingerprint.details是怎麼來的。

通過檢索$.fingerprint根據查詢的結果找到他的位置【圖2-3】

繼續向上查詢,最終找到這裡,發現是根據瀏覽器的請求頭等資訊生成的一串雜湊值【圖2-4】。

這個值如果不修改請求頭資訊,那麼這個值就是固定不變的,如果修改請求頭資訊,那麼就需要重新生成這段hash,這就是這個的瀏覽器指紋資訊。

因為我們這裡只是抱著學習的態度學習,所以就不瞎搞,不過這個整段的程式碼也比較簡單沒事可以扣一扣。

tip: 如果想要分析這個指紋的演算法,記得要重新整理一下頁面才可以進入斷點。

三、總結

這個網站的加密總體還是隻用RSA的加密演算法就可以搞定了,整體加密演算法比較簡單有經驗的老哥直接通過加密庫就可以實現,如果想練練手的也可以摳出來試試,只要頭髮多,肝就完事了。

需要原始碼或者想了解更多的點選這裡獲取

此文轉載文,著作權歸作者所有,如有侵權聯絡小編刪除!

原文地址:https://www.tuicool.com/articles/rIBfYve