Python爬蟲進階JS逆向之新榜登陸

分享一個破解JS登陸的案例,源碼地址 github.com/GoJerry/xin…javascript

抓包調試

網站以下:[www.airchina.com.cn) 下面是登陸的抓包:java

登陸

一個 XHR 請求,下斷點。或者搜索請求參數python

斷點

打完斷點後,從新發起請求,結果以下:git

分析

此時的斷點位置,通常是一個 XMLHttpRequest 的請求操做。因此咱們順着調用棧往回追。github

找到了密碼加密的地方,看代碼調用了兩次 h 函數。 其中第二次調用的的參數是將第一次返回的結果加上 d.mdValue 的值! 咱們點擊進入 h 函數dom

函數h

將這部分代碼扣下來,寫到本地 JS 文件中函數

在本地運行一下和網站上結果進行比對驗證網站

能夠看到 password 這個參數對上了。 後面還有兩個 nonce 和 xyz 的參數,直接全局搜索,找到加密位置打上斷點以下!加密

注意關鍵地方spa

var j = h();
 return g.nonce = j,
 i += "&nonce=" + j,
 g.xyz = d(i)
複製代碼

參數 nonce 是從函數 h 返回的。參數 xyz 是從函數 d 返回的!繼續往下調試:

原來和以前函數加密是同一個函數。 到這裏基本上加密函數都找出來了,接下來就是理清思路,找對參數。

驗證

其實,這兩個 JS 加密函數均可以用 Python 代碼來轉換 其中密碼加密的那個函數是 MD5

def md5(parm):
    hl = hashlib.md5()
    hl.update(parm.encode(encoding='utf-8'))
    sign = hl.hexdigest()
    return sign
複製代碼

nonce 就是一個隨機生成的參數,也能用 Python 改寫,以下:

def non():
    li = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"]
    nonce = ''.join(li[random.randint(0, 15)] for _ in range(9))
    return nonce
複製代碼

直接來驗證下吧,結果以下:

登陸成功了!

總結

JS 逆向須要耐心調試,同時要理清思路,調試過程當中發現的加密過程要記錄下來,以避免後續再發費時間尋找。同時須要大膽的去假設,多嘗試。

相關文章
相關標籤/搜索