Python 爬蟲進階必備 | 某策網(wǎng)數(shù)據(jù)返回值 data 解密邏輯分析
點擊上方“咸魚學Python”,選擇“加為星標”
第一時間關(guān)注Python技術(shù)干貨!

圖源:網(wǎng)絡(luò)
今日網(wǎng)站
aHR0cHM6Ly93d3cuY2hhY2V3YW5nLmNvbS9jaGFueWUvaW5kZXg=
無限 Debugger繞過
打開控制臺,就進入 debugger 模式了

直接右鍵 Never Pause Here 就可以了

抓包分析
繞過反調(diào)試,刷新頁面,可以看到如下的請求包

請求的參數(shù)沒有什么好分析的,都是明文,主要是返回的內(nèi)容是加密的

加密定位
先用上 xhr 斷點,找到發(fā)包的位置,然后向上翻
可以看到處理 response 的邏輯

在這個位置打上斷點,然后放過斷點讓邏輯運行

可以看到這里的 n 就是請求的返回值
然后繼續(xù)向下分析,直到這個邏輯

這里是對 page_set 的解密
繼續(xù)向下,就是對返回值內(nèi)容的解密

繼續(xù)跟進去,看到這里的解密是一個 AES CBC 解密

p 上面的變量操作基本都是對 key iv 的處理,所以需要逐個分析一下
加密分析
首先是解密的密鑰 c
c 的生成邏輯如下
e = r.decode(t)
a = e.slice(0, 10)
n = l(a, e)
s = n.slice(0, 32)
c = i.default.enc.Utf8.parse(s)
點進 decode 方法,里面是一大串對于返回值的處理
看了一下decode邏輯主要是對返回的字符串進行一些字符的替換,然后再調(diào)用了 atob,其實就是base64解碼
這里的 a = e.slice(0, 10) 就是獲取了解碼結(jié)果的前 10 的字符然后和解碼的結(jié)果一塊進入 l 計算
這里的 l 主要是對解碼的結(jié)果進行遍歷hex ,每次的hex 的結(jié)果都拼接起來

拼接的結(jié)果取前 48位作為結(jié)果返回
之后的 s 就是對 l 的結(jié)果切割取值,再之后的步驟就是 CryptoJS 的常規(guī)操作
直接導入 CryptoJS 包就可以
npm install crypto-js
這里的解密使用的 AES CBC 的解密,直接使用 CryptoJS 就可以實現(xiàn)
簡單使用 js 復現(xiàn)一下解密的邏輯

這樣就得到解密好的結(jié)果了
Python 請求全流程
用 Python 請求結(jié)果如下

這個站點在 page 的部分好像還動態(tài)加載了字體文件,不知道是否還有對字體做了一些操作
本次操作是在未登錄狀態(tài)下的測試,不知道在登錄狀態(tài)下是否還有其他不同的操作,感興趣的朋友可以拓展測試一下
End.
以上就是全部的內(nèi)容了,咱們下次再會~
備注【咸魚666】,入群交流
我是沒有更新就在摸魚的咸魚
收到請回復~
我們下次再見。
對了,看完記得一鍵三連,這個對我真的很重要。
