實(shí)現(xiàn)的目標(biāo):可以通過JS加密逆向后,得到加密參數(shù),請(qǐng)求獲取數(shù)據(jù)。此方法同樣適用于被前端JS加密的用戶名、密碼爆破。
JS加密逆向分析
首先,分析獲取數(shù)據(jù)的API。抓包,發(fā)現(xiàn)是:
??
這個(gè)網(wǎng)站不存在分頁(yè),是鼠標(biāo)下滑動(dòng)態(tài)加載數(shù)據(jù)的,所以利用selenium爬蟲效率低,效果也不是很好。
當(dāng)然如果是菜鳥,最好還是利用這種方式。
先爬一下看看,發(fā)現(xiàn)返回的數(shù)據(jù)是加密的,先不管他。
我們分析請(qǐng)求參數(shù),發(fā)現(xiàn)是兩個(gè)加密的請(qǐng)求參數(shù),分別是payload和sig。
如果把這兩個(gè)參數(shù)去掉,或者這兩個(gè)參數(shù)是錯(cuò)誤的,則request無法返回正確的數(shù)據(jù)。
所以,需要對(duì)這兩個(gè)進(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}
需要“翻頁(yè)”動(dòng)態(tài)加載數(shù)據(jù),只要需要更改start即可,這個(gè)表示是開始條數(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),返回的值如下。這個(gè)時(shí)候,payload被加密了,但是還不是返回的值,繼續(xù)下一步調(diào)試。
",x177WB:d`ym{1L$'=x10nx02x04x15p8[ '&olwx022"?
接著到了第一次進(jìn)入e1(e) 中,這個(gè)時(shí)候e就是加密后的payload傳進(jìn)去。返回u,就是加密的payload了。
LBc3V0I6ZGB5bXsxTCQnPRBuBwYJfnZeJCM7OXR/AH8q??
這個(gè)是只要payload不變,加密值就不變,還是相對(duì)比較簡(jiǎn)單的。
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這個(gè)常量:t.prototype.update = function(e) 實(shí)際就是這個(gè)函數(shù)
他又調(diào)用了hex函數(shù) finshed函數(shù) 調(diào)用了 hash函數(shù)
LBc3V0I6ZGB5bXsxTCQnPRBuBwYJfnZeJCM7OXR/AH8qW5D80NFZHAYB8EUI2T649RT2MNRMVE2O
跟蹤分析發(fā)現(xiàn),就是一個(gè)普通的md5加密函數(shù),然后轉(zhuǎn)換成大寫。這個(gè)就可以不用JS實(shí)現(xiàn),直接python實(shí)現(xiàn)MD5加密。
使用Python去實(shí)現(xiàn)以上兩個(gè)參數(shù)的加密,修改原來的python腳本如下:
再次請(qǐng)求:
發(fā)現(xiàn)返回的值是d,也是加密的,可以使用攔截技術(shù),獲取到JS解密函數(shù),解密d得到明文。
審核編輯:劉清
-
python
+關(guān)注
關(guān)注
56文章
4782瀏覽量
84452
原文標(biāo)題:python爬蟲之某站JS加密逆向分析
文章出處:【微信號(hào):哆啦安全,微信公眾號(hào):哆啦安全】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論