友情提示:在部落格園更新比較慢,有興趣的關注知識圖譜與大資料公眾號吧。這次選擇蘇寧易購登入密碼加密,如能除錯出來代表你具備了一定的JS逆向能力,初學者建議跟著內容除錯一波,儘量獨自將JS程式碼摳出來,實在摳不出來參考這裡從今天開始種樹。
傳送門
前言
最近都在研究一些網站的登入密碼加密JS程式碼,都比較簡單,非常適合有一定爬蟲基礎準備進階的童靴,只有這些做好了下一步才能開始著手滑塊驗證碼這個大坑,廢話不多說,直接開整。
準備
開啟蘇寧易購登入網址點這裡:
是不是一陣熟悉的趕腳。老規矩,輸入錯誤的賬號密碼點選登入,看看提交連結:
可以看出登入賬號密碼被提交到了https://passport.suning.com/ids/login
,看看FormData資料:
本篇文章只獲取password2
的加密方法,其它的引數暫時不管。
除錯
搜尋
除錯的前提是先找到關鍵字在哪個位置,這裡提供了兩種尋找方法:
方法一:呼叫棧方式
即在呼叫棧中點選JS檔案連結進去,可以通過函式名大概做一個判斷再點選,如下圖其實就選擇了位置可能比較正確的函式loginSubmit
:
點選進去後其實就靠經驗判斷一下,我往下拉了一小點就發現帶有encrypt、pwd2
的函式出現,那基本就斷定這就是要找的加密方法:
方法二:直接搜尋方式
這是我們常用的方法,先搜到包含關鍵字的檔案,再從檔案中搜到關鍵字的位置,這次比較幸運,只有一個檔案包含password2
,並且這個檔案裡只有一個password2
,找到的程式碼其實與上面方法找到的一樣:
至於使用哪種方式全憑個人習慣,沒有好壞之分。
斷點
除錯開始前得先上個斷點,我是再1484位置下的,下好斷點就要啟用斷點(即輸入賬號密碼),如下所示:
一步一步執行看看,首先進入了這裡,看起來像設定公鑰前的準備:
點選這個按鈕直接進入設定公鑰函式。即encrypt.setPublicKey(loginPBK)
:
產生公鑰,需要提的是這個公鑰是固定的,一會直接複製給loginPBK
:
繼續執行:
又有了一個encrypt
函式:
原來是一個叫al
的函式賦給它的。這個函式返回的結果就是加密後的密碼。那該怎麼扣這個程式碼呢,有一個關鍵點就是var encrypt = new JSEncrypt();
,去這個檔案裡搜一搜JSEncrypt
。
等於 JSEncryptExports.JSEncrypt;
,那一直複製到前面JSEncryptExports
開始的地方一個可以了。
python呼叫
又來到了python呼叫的環節,老程式碼又來了:
import execjs
with open('..//js//suningyigou.js', encoding='utf-8') as f:
suningyigou= f.read()
js = execjs.compile(suningyigou)
logid = js.call('get_pwd', "123456")
print(logid)
結果:
結束
到這裡今天的蘇寧易購密碼加密扣JS的環節就結束了,強烈建議您練上一遍,有哪裡不懂的可以在評論區留言。關注下面的公眾號,獲取更多內容,當然不關注也無所謂。完整程式碼請訪問從今天開始種樹。