這個爬蟲JS逆向加密任務,你還不來試試?逆向入門級,適合一定爬蟲基礎的人
阿新 • • 發佈:2020-08-28
> 友情提示:在部落格園更新比較慢,有興趣的關注知識圖譜與大資料公眾號吧。這次選擇蘇寧易購登入密碼加密,如能調試出來代表你具備了一定的JS逆向能力,初學者建議跟著內容除錯一波,儘量獨自將JS程式碼摳出來,實在摳不出來參考這裡[從今天開始種樹](http://www.happyhong.cn/download/suningyigou.html)。
## 傳送門
## 前言
最近都在研究一些網站的登入密碼加密JS程式碼,都比較簡單,非常適合有一定爬蟲基礎準備進階的童靴,只有這些做好了下一步才能開始著手滑塊驗證碼這個大坑,廢話不多說,直接開整。
## 準備
開啟蘇寧易購登入網址[點這裡](http://passport.suning.com/ids/login):
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200819200130956.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x1b2h1YTEzOTUw,size_16,color_FFFFFF,t_70#pic_center)
是不是一陣熟悉的趕腳。老規矩,輸入錯誤的賬號密碼點選登入,看看提交連結:
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200819200249139.png#pic_center)
可以看出登入賬號密碼被提交到了`https://passport.suning.com/ids/login`,看看FormData資料:
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200819200525359.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x1b2h1YTEzOTUw,size_16,color_FFFFFF,t_70#pic_center)
本篇文章只獲取`password2`的加密方法,其它的引數暫時不管。
## 除錯
### 搜尋
除錯的前提是先找到關鍵字在哪個位置,這裡提供了兩種尋找方法:
#### 方法一:呼叫棧方式
即在呼叫棧中點選JS檔案連結進去,可以通過函式名大概做一個判斷再點選,如下圖其實就選擇了位置可能比較正確的函式`loginSubmit`:
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200819200957246.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x1b2h1YTEzOTUw,size_16,color_FFFFFF,t_70#pic_center)
點選進去後其實就靠經驗判斷一下,我往下拉了一小點就發現帶有`encrypt、pwd2`的函數出現,那基本就斷定這就是要找的加密方法:
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200819201111565.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x1b2h1YTEzOTUw,size_16,color_FFFFFF,t_70#pic_center)
#### 方法二:直接搜尋方式
這是我們常用的方法,先搜到包含關鍵字的檔案,再從檔案中搜到關鍵字的位置,這次比較幸運,只有一個檔案包含`password2`,並且這個檔案裡只有一個`password2`,找到的程式碼其實與上面方法找到的一樣:
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200819201405801.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x1b2h1YTEzOTUw,size_16,color_FFFFFF,t_70#pic_center)
至於使用哪種方式全憑個人習慣,沒有好壞之分。
### 斷點
除錯開始前得先上個斷點,我是再1484位置下的,下好斷點就要啟用斷點(即輸入賬號密碼),如下所示:
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200819201657735.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x1b2h1YTEzOTUw,size_16,color_FFFFFF,t_70#pic_center)
一步一步執行看看,首先進入了這裡,看起來像設定公鑰前的準備:
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200819202044731.png#pic_center)
點選這個按鈕直接進入設定公鑰函式。即`encrypt.setPublicKey(loginPBK)`:
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200819202203493.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x1b2h1YTEzOTUw,size_16,color_FFFFFF,t_70#pic_center)
產生公鑰,需要提的是這個公鑰是固定的,一會直接複製給`loginPBK`:
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200819202324713.png#pic_center)
繼續執行:
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200819202532715.png#pic_center)
又有了一個`encrypt`函式:
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200819202618141.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x1b2h1YTEzOTUw,size_16,color_FFFFFF,t_70#pic_center)
原來是一個叫`al`的函式賦給它的。這個函式返回的結果就是加密後的密碼。那該怎麼扣這個程式碼呢,有一個關鍵點就是`var encrypt = new JSEncrypt();`,去這個檔案裡搜一搜`JSEncrypt`。
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200819203101610.png#pic_center)
等於 `JSEncryptExports.JSEncrypt;`,那一直複製到前面J`SEncryptExports`開始的地方一個可以了。
## python呼叫
又來到了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)
```
結果:
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200819203352561.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x1b2h1YTEzOTUw,size_16,color_FFFFFF,t_70#pic_center)
## 結束
到這裡今天的蘇寧易購密碼加密扣JS的環節就結束了,強烈建議您練上一遍,有哪裡不懂的可以在評論區留言。關注下面的公眾號,獲取更多內容,當然不關注也無所謂。完整程式碼請訪問[從今天開始種樹](http://www.happyhong.cn/download/suningyigou.html)。
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200321100547328.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x1b2h1YTEzOTUw,size_16,color_FFFFFF,t_70#pic_center)