實(shí)現(xiàn)的目標(biāo):可以通過JS加密逆向后,得到加密參數(shù),請求獲取數(shù)據(jù)。此方法同樣適用于被前端JS加密的用戶名、密碼爆破。
JS加密逆向分析
首先,分析獲取數(shù)據(jù)的API。抓包,發(fā)現(xiàn)是:
??
這個網(wǎng)站不存在分頁,是鼠標(biāo)下滑動態(tài)加載數(shù)據(jù)的,所以利用selenium爬蟲效率低,效果也不是很好。
當(dāng)然如果是菜鳥,最好還是利用這種方式。
先爬一下看看,發(fā)現(xiàn)返回的數(shù)據(jù)是加密的,先不管他。
我們分析請求參數(shù),發(fā)現(xiàn)是兩個加密的請求參數(shù),分別是payload和sig。
如果把這兩個參數(shù)去掉,或者這兩個參數(shù)是錯誤的,則request無法返回正確的數(shù)據(jù)。
所以,需要對這兩個進(jìn)行JS逆向,還原加密算法。
經(jīng)過調(diào)試發(fā)現(xiàn)規(guī)律如下(至于怎么找斷點(diǎn),怎么找到實(shí)現(xiàn)加密算法的位置,本篇不做介紹)。
找到了sig的地方,下斷點(diǎn):
調(diào)試截圖如下(只截圖了payload的方法):
Payload加密分析:
首先是payload加密,payload加密前:
{sort: 1, start: 40, limit: 20}
需要“翻頁”動態(tài)加載數(shù)據(jù),只要需要更改start即可,這個表示是開始條數(shù),limit表示一次加載20條,比如60、80、100、120等等。
第1次進(jìn)入e2(e) ,進(jìn)去前e還是明文的payload,進(jìn)去了_u_e(e) 返回t '{"sort":1,"start":40,"limit":20}' 值沒變。
接著返回e2(e)繼續(xù)執(zhí)行for循環(huán),返回的值如下。這個時候,payload被加密了,但是還不是返回的值,繼續(xù)下一步調(diào)試。
",x177WB:d`ym{1L$'=x10nx02x04x15p8[ '&olwx022"

接著到了第一次進(jìn)入e1(e) 中,這個時候e就是加密后的payload傳進(jìn)去。返回u,就是加密的payload了。
LBc3V0I6ZGB5bXsxTCQnPRBuBwYJfnZeJCM7OXR/AH8q

這個是只要payload不變,加密值就不變,還是相對比較簡單的。
sign加密分析
sign的值是把加密后的payload值加上常量_P拼接后,作為參數(shù),傳到sig(e)中去,payload+_P如下:
LBc3V0I6ZGB5bXsxTCQnPRBuBwYJfnZeJCM7OXR/AH8qW5D80NFZHAYB8EUI2T649RT2MNRMVE2O
這里的e就是加密后的payload,而sign調(diào)用的方法是md5(e + _p).toUpperCase(),結(jié)果是:
1268D4D682CF9D0C6C3CB4D6E4C3C87F
new t(!0).update(n)[e]() 是payload + -p這個常量:t.prototype.update = function(e) 實(shí)際就是這個函數(shù)
他又調(diào)用了hex函數(shù) finshed函數(shù) 調(diào)用了 hash函數(shù)
LBc3V0I6ZGB5bXsxTCQnPRBuBwYJfnZeJCM7OXR/AH8qW5D80NFZHAYB8EUI2T649RT2MNRMVE2O
跟蹤分析發(fā)現(xiàn),就是一個普通的md5加密函數(shù),然后轉(zhuǎn)換成大寫。這個就可以不用JS實(shí)現(xiàn),直接python實(shí)現(xiàn)MD5加密。
使用Python去實(shí)現(xiàn)以上兩個參數(shù)的加密,修改原來的python腳本如下:
再次請求:
發(fā)現(xiàn)返回的值是d,也是加密的,可以使用攔截技術(shù),獲取到JS解密函數(shù),解密d得到明文。
審核編輯:劉清
-
python
+關(guān)注
關(guān)注
56文章
4822瀏覽量
85874
原文標(biāo)題:python爬蟲之某站JS加密逆向分析
文章出處:【微信號:哆啦安全,微信公眾號:哆啦安全】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
Python數(shù)據(jù)爬蟲學(xué)習(xí)內(nèi)容
Python爬蟲與Web開發(fā)庫盤點(diǎn)
Python爬蟲全國大學(xué)招生的生源數(shù)據(jù)分析
0基礎(chǔ)入門Python爬蟲實(shí)戰(zhàn)課
Python爬蟲簡介與軟件配置
python網(wǎng)絡(luò)爬蟲概述
使用 Python 執(zhí)行 js 代碼
Python學(xué)習(xí)爬蟲掌握的庫資料大全和框架的選擇的分析
python爬蟲入門教程之python爬蟲視頻教程分布式爬蟲打造搜索引擎
Python怎么玩轉(zhuǎn)JS腳本

評論