Python 爬蟲進階必備 | 某公共資源交易平臺加密參數(shù)與數(shù)據(jù)解密邏輯分析
第一時間關(guān)注Python技術(shù)干貨!

圖源:極簡壁紙
今日網(wǎng)站
aHR0cHM6Ly9nZ3p{刪掉我}5ZncuZmouZ292LmNuL3dlYi9pb{防撞}mRleC5odG1sPyMv{刪掉我}YnVzaW5lc3MvbGlzdA==
抓包分析
打開網(wǎng)站,隨便設(shè)置一個查詢條件,可以在 Chrome 的網(wǎng)絡(luò)選項卡中抓到如下樣式的請求包

需要分析的參數(shù)如下
請求頭參數(shù):protal-sign

以及加密查詢結(jié)果Data的解密邏輯

加密參數(shù)的定位與分析
先看請求頭的部分,這里的protal-sign是網(wǎng)站在請求頭中添加的
一般像這樣xhr請求用xhr斷點是比較好的選擇
同樣的也可以通過hook window.XMLHttpRequest.prototype.setRequestHeader來定位
var?setRequestHeader_?=?window.XMLHttpRequest.prototype.setRequestHeader;
window.XMLHttpRequest.prototype.setRequestHeader?=?function(key,value){
????????console.log(key)
????????if(key.indexOf("portal-sign")?!==?-1){
????????????debugger;
????????}
????????return?setRequestHeader_.apply(this,arguments);
?}
}
但是!這個站它不一般,他不走尋常路,用上面兩種方法都不如直接檢索來的快
直接檢索portal-sign,找到下面的位置


這個時候分析的重心就轉(zhuǎn)移到get_Sign方法了
單步進去,可以看到先是循環(huán)遍歷了傳入的參數(shù)

然后將遍歷結(jié)果傳入s(e)并且和r["d"]進行了拼接
先看這里的s方法,結(jié)果如下

很明顯s方法就是將傳入的參數(shù)拼接起來,這里的r[d]是一串字符串

可以理解為加鹽,防止加密的結(jié)果被撞庫,拼接鹽值之后的結(jié)果經(jīng)過了u和轉(zhuǎn)小寫之后就返回了
所以這里的u就是關(guān)鍵的加密方法了,不過這里的u也比較簡單,單步進去就可以看到了

解密方法的定位與分析
上面進行了加密參數(shù)邏輯的定位和分析,現(xiàn)在還剩一個返回值Data的解密
這種返回值加密,按照開發(fā)的邏輯來說是在xhr請求之后回調(diào)解密方法,所以要在xhr中方法找到回調(diào)的位置打上斷點
像下面這樣

而像上一部分的請求參數(shù)分析,因為請求需要帶上參數(shù)在請求發(fā)出的時候參數(shù)已經(jīng)生成好了,所以我們進入xhr斷點的時候,是從斷點位置往上翻堆棧分析之前的邏輯

現(xiàn)在重新加載是否能找到解密的邏輯,加載斷點之后單步進入o方法

一直單步可以看到如下位置的代碼

很明顯的aes解密方法,拿出key還有iv就可以直接進行還原了
簡單測試一下

以上就是今天的全部內(nèi)容了。
我是沒有更新就在摸魚的咸魚
收到請回復(fù)~
我們下次再見。
對了,看完記得一鍵三連,這個對我真的很重要。
