① 京東post登陸參數js分析,密碼加密的RSA加密實現
老規矩先用錯誤信息登陸一下抓一下包,看看有那些post欄位:
大概我們就知道我們要分析的欄位有nloginpwd其餘欄位還不清楚,就在上下在看看其他數據包,根據pubkey我們猜測加密方式大概是RSA,繼續查看其他數據包,找到一個有價值的get包
信息是:
沒有發現明確的關鍵字,但是可以猜想bg、challenge、patch應該和我們的加密參數相關,但是不確定,只有繼續分析加密的js片段:
其中好幾個欄位都是$("#??")格式,這種表示是來自頁面的,那在看看網頁源碼
果然發現了很多有價值的東西在post表單中的,其中只有兩個參數是需要單獨獲取的,其餘都是從html源碼裡面解析出來的
authcode來源
是獲取的源碼中的一個值,再看源碼
看樣子是在驗證碼操作的時候觸發的一個請求,返回的authcode的值,查看authcode請求的數據包
這個請求看起來不是那麼友好,有好幾個疑似加密欄位,這個參數暫時放放,繼續分析我們的passWord的加密。
繼續深入getEntryptPwd($('#nloginpwd').val()),查看源碼
核心的就兩行
encrypt.setPublicKey(pubKey); return encrypt.encrypt(pwd);這必定是RSA加密無疑了,繼續查看源碼,單獨的一個源碼文件,一共3300多行,刪減版如下
JSEncrypt是前端使用的實現RSA加密的庫,看樣子應該比較標准,那就試試能不能改寫了,復制全部源碼到node.js,會提示navigator、window未定義,這個問題很簡單,在文件頭定義
var navigator = this;
var window = this
然後在文件尾部寫個調用程序試試
是可以成功返回RSA加密結果的
京東的post請求不是太難,參數也能在源碼中找到,但是他的難度在發出post請求之前的一個get請求,這個get請求和驗證有關,和用戶名相關,簡單看了一下感覺有點復雜,留在第二篇講獲取authcode參數的其他參數是怎麼來的。
ID:python之戰
|作|者|公(zhong)號:python之戰
專注Python,專注於網路爬蟲、RPA的學習-踐行-總結
喜歡研究和分享技術瓶頸,歡迎關注
獨學而無友,則孤陋而寡聞!