Python爬蟲進階 | X咕視頻密碼與指紋加密分析

先來看看今天的受害者:git

aHR0cDovL3d3dy5taWd1dmlkZW8uY29tL21ncy93ZWJzaXRlL3ByZC9pbmRleC5odG1s算法

1、分析密碼加密

此次分析的是他登錄的三個參數,先分析登錄邏輯,抓個包看看。json

能夠看到這裏用的是彈出的窗口登錄【圖1-1】,爲了不主頁其餘元素的干擾抓包,咱們能夠經過右鍵 查看框架源代碼 的方式打開登錄框分析抓包【圖1-2】。瀏覽器

圖1-1

圖1-2

把打開的源代碼頁面地址欄中的 view-source:刪除便可打開如下頁面【圖1-3】:服務器

圖1-3

接下來用錯誤的帳號密碼登錄一波,能夠看到以下的包【圖1-4】,不過經過上面的 publickey 隱隱猜到這裏的加密參數可能和 RSA 有關,先來找找密碼加密的位置:框架

圖1-4

照常搜索一下 enpassword ,預料之中是沒有搜索到有用的結果【圖1-5】,不過定位元素能夠經過 name 定位 也能夠經過 class 定位,因此一樣試試 J_RsaPsd,果真找到像樣的文件了【圖1-6】。學習

圖1-5

圖1-6

在打開的文件裏檢索J_RsaPsd,能夠看到有3個相關的結果(熟悉加密的已經能夠看出這裏是 RSA 加密),咱們經過把全部相關的結果都打上斷點【圖1-6】,並經過從新發起一次登陸請求,來判斷哪一個J_RsaPsd是密碼的加密邏輯。測試

圖1-7

經過從新發起請求,斷點斷在 333 行【圖1-8】。網站

圖1-8

咱們先複製整段代碼:ui

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

咱們經過控制檯看看這些參數分別是什麼【圖1-9】。

圖1-9

經過前文抓包和JS頁面的代碼,咱們判斷密碼的加密是RSA加密,因此咱們就須要找齊RSA加密的須要的幾個要素,好比他的公鑰 ,由於RSA是非對稱加密本地使用公鑰加密,服務器上使用私鑰解密。再看看【圖1-8】上的幾個參數不知道大家有沒想起開頭【圖1-4】我說起的那條抓包。咱們切換到 控制檯-Network 看看【圖1-10】。

圖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')
複製代碼

2、分析FingerPrintDetail與fingerPrint

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

圖2-1

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

圖2-2

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

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

圖2-3

繼續向上查找,最終找到這裏,發現是根據瀏覽器的請求頭等信息生成的一串哈希值【圖2-4】。

圖2-4

這個值若是不修改請求頭信息,那麼這個值就是固定不變的,若是修改請求頭信息,那麼就須要從新生成這段hash,這就是這個的瀏覽器指紋信息。

由於咱們這裏只是抱着學習的態度學習,因此就不瞎搞,不過這個整段的代碼也比較簡單沒事能夠扣一扣。

tip: 若是想要分析這個指紋的算法,記得要刷新一下頁面才能夠進入斷點。

3、總結

結合以前的建議,文章的配圖都標註了序號,但願可以起到必定梳理思路的做用。

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

相關文章
相關標籤/搜索