hello,大 jia 好,又到了練手時間了,這是我給大夥分享的第…篇逆向文章。前面的幾篇猛戳下面:html
JS逆向之國航登陸瀏覽器
JS逆向之電信登陸bash
聽說點好看的人最後變得更好看了! 好了,進入正題拉,這個是咱們今天要破解的網站:m.beibei.com/login/login…服務器
Chrome 開發者工具我以爲仍是有必要學一下的,畢竟工欲善其事,必先利其器。作好爬蟲,作好 JS 逆向,工具是第一位。 先看抓包狀況:函數
這個是最終登陸的請求,what? 密碼竟然是明文,checkcode 是圖片驗證碼,那麼就只有一個加密參數 beibeitoekn。 先別急着一把梭,一看到加密參數就去搜索。首先把整個過程的請求數據都點開看看,由於有時候加密參數是前面的請求響應中返回的,好比這種有時效性 token 通常是服務器用來作校驗,先發給客戶端,客戶端再 POST 給服務器,在服務器端再進行校驗工具
so~,最終咱們的方向就是破解第一個請求,眨眼一看 Form Data 裏面也沒有加密參數呀。 注意看上面 Params 裏面有個 abr 加密參數,關鍵點就是破解它了網站
這是 XHR 請求,好辦!直接下 XHR 斷點:ui
再點登陸以後,你就會看下請求被斷下來了。
再往下點幾下,你就能發下關鍵點
最終結果是由函數 m 生成的,點進去,下斷點
重發請求:
前面幾個加密函數都不用管,只是一個簡單的轉換,重點在 l["default"],找到函數位置,點擊進去
接下來就正式進入扣代碼環節,
繼續往下走,注意發現關鍵的地方
很明顯的標識了,還扣什麼代碼呀!是否是嫌棄頭髮太多???直接先來個驗證吧!這個是咱們傳過去的參數,將它記錄下來
而後咱們用 Python 代碼來實現一下
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'
複製代碼
再去瀏覽器輸出查看結果
Bingo! 徹底正確。這就完了?? 憋高興太早,後面還有一步加密
感受這個套路也是同樣的!難道也是調用的加密模塊!結果如何,請繼續往下看
代碼結構很相似!
1 a.HMAC = r.extend()
複製代碼
HMAC!也是一種哈希算法,Hmac 和普通 Hash 算法很是相似。Hmac 輸出的長度和原始哈希算法的長度一致。Python 自帶的 Hmac 模塊也實現了標準的 Hmac 算法
一樣的爲了頭髮,我選擇放棄扣代碼,直接用 Python 來實現 先找準傳入參數 和 salt,其中傳入的參數是上一步生成的,salt 調用加密函數的原文中,能夠輸出看下
下面是用 Python 實現的:
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()
複製代碼
這一步加密的驗證結果,本身動手試試吧。將代碼整合到一塊兒,成功獲取到了 token
對於加密的 JS 代碼比較多的, 能用 Python 中的加密算法實現就儘可能用。這其實也是一種防脫髮祕訣,固然你頭髮比較多的話,能夠忽略,去嘗試扣下 JS 代碼,也不是不能夠!
公衆號:【Python編程與實戰】歡迎關注