hello侨舆,大jia好谈息,又到了練手時(shí)間了域蜗,這是我給大伙分享的第…篇逆向文章巨双。前面的幾篇猛戳下面:
Python爬蟲之JS逆向入門篇
JS逆向之新榜登錄
JS逆向之國(guó)航登錄
據(jù)說點(diǎn)好看的人最后變得更好看了!
好了霉祸,進(jìn)入正題拉筑累,這個(gè)是我們今天要破解的網(wǎng)站:https://m.beibei.com/login/login.html
分析
Chrome 開發(fā)者工具我覺得還是有必要學(xué)一下的,畢竟工欲善其事丝蹭,必先利其器慢宗。做好爬蟲,做好 JS 逆向奔穿,工具是第一位镜沽。
先看抓包情況:
這個(gè)是最終登錄的請(qǐng)求,what? 密碼居然是明文贱田,checkcode 是圖片驗(yàn)證碼缅茉,那么就只有一個(gè)加密參數(shù) beibeitoekn。
先別急著一把梭男摧,一看到加密參數(shù)就去搜索蔬墩。首先把整個(gè)過程的請(qǐng)求數(shù)據(jù)都點(diǎn)開看看,因?yàn)橛袝r(shí)候加密參數(shù)是前面的請(qǐng)求響應(yīng)中返回的耗拓,比如這種有時(shí)效性 token 一般是服務(wù)器用來做校驗(yàn)拇颅,先發(fā)給客戶端,客戶端再 POST 給服務(wù)器帆离,在服務(wù)器端再進(jìn)行校驗(yàn)
so~,最終我們的方向就是破解第一個(gè)請(qǐng)求结澄,眨眼一看 Form Data 里面也沒有加密參數(shù)呀哥谷。
注意看上面 Params 里面有個(gè) abr 加密參數(shù),關(guān)鍵點(diǎn)就是破解它了
破解
這是 XHR 請(qǐng)求麻献,好辦们妥!直接下 XHR 斷點(diǎn):
<figcaption style="margin: 10px 0px 0px; padding: 0px; line-height: inherit; text-align: center; color: rgb(153, 153, 153); font-size: 0.7em;">下斷點(diǎn)</figcaption>
再點(diǎn)登錄之后,你就會(huì)看下請(qǐng)求被斷下來了勉吻。
再往下點(diǎn)幾下监婶,你就能發(fā)下關(guān)鍵點(diǎn)
最終結(jié)果是由函數(shù) m 生成的,點(diǎn)進(jìn)去,下斷點(diǎn)
重發(fā)請(qǐng)求:
前面幾個(gè)加密函數(shù)都不用管惑惶,只是一個(gè)簡(jiǎn)單的轉(zhuǎn)換煮盼,重點(diǎn)在 l["default"],找到函數(shù)位置带污,點(diǎn)擊進(jìn)去
接下來就正式進(jìn)入扣代碼環(huán)節(jié)僵控,
繼續(xù)往下走,注意發(fā)現(xiàn)關(guān)鍵的地方
很明顯的標(biāo)識(shí)了鱼冀,還扣什么代碼呀报破!是不是嫌棄頭發(fā)太多?千绪?充易?直接先來個(gè)驗(yàn)證吧!這個(gè)是我們傳過去的參數(shù)荸型,將它記錄下來
然后我們用 Python 代碼來實(shí)現(xiàn)一下
1>>>ts = "username=17775731459&scene=h5_login&rams_device_id=2972225991"
2>>>import hashlib
3>>>res = hashlib.md5(ts.encode("utf-8")).hexdigest()
4>>>res
5'8afdca35566e68fd7821aed42cab7ae0'
再去瀏覽器輸出查看結(jié)果
Bingo! 完全正確盹靴。這就完了?? 憋高興太早,后面還有一步加密
感覺這個(gè)套路也是一樣的帆疟!難道也是調(diào)用的加密模塊鹉究!結(jié)果如何,請(qǐng)繼續(xù)往下看
代碼結(jié)構(gòu)很類似踪宠!
1a.HMAC = r.extend()
HMAC自赔!也是一種哈希算法,Hmac 和普通 Hash 算法非常類似柳琢。Hmac 輸出的長(zhǎng)度和原始哈希算法的長(zhǎng)度一致绍妨。Python 自帶的 Hmac 模塊也實(shí)現(xiàn)了標(biāo)準(zhǔn)的 Hmac 算法
同樣的為了頭發(fā),我選擇放棄扣代碼柬脸,直接用 Python 來實(shí)現(xiàn)
先找準(zhǔn)傳入?yún)?shù) 和 salt他去,其中傳入的參數(shù)是上一步生成的,salt 調(diào)用加密函數(shù)的原文中倒堕,可以輸出看下
下面是用 Python 實(shí)現(xiàn)的:
1 import hamc
2
3 def c(g, key):
4 return hmac.new(key.encode("utf-8"), msg=g.encode("utf-8"), digestmod=hashlib.sha1).hexdigest()
這一步加密的驗(yàn)證結(jié)果灾测,自己動(dòng)手試試吧。將代碼整合到一起垦巴,成功獲取到了 token
總結(jié)
對(duì)于加密的 JS 代碼比較多的媳搪, 能用 Python 中的加密算法實(shí)現(xiàn)就盡量用。這其實(shí)也是一種防脫發(fā)秘訣骤宣,當(dāng)然你頭發(fā)比較多的話秦爆,可以忽略,去嘗試扣下 JS 代碼憔披,也不是不可以等限!