教你怎麼使用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