1. 程式人生 > >爬蟲必看,每日JS逆向之愛奇藝密碼加密,今天你練了嗎?

爬蟲必看,每日JS逆向之愛奇藝密碼加密,今天你練了嗎?

> 友情提示:優先在公眾號更新,在部落格園更新較慢,有興趣的關注一下知識圖譜與大資料公眾號,本次目標是摳出愛奇藝passwd加密JS程式碼,如果你看到了這一篇,說明你對JS逆向感興趣,如果是初學者,那不妨再看看我之前的一些文章,可能對你的學習路有些幫助,跟著一起除錯,對JS加密方法理解會更深點。如果除錯不出來,可以參考我的程式碼,本期JS程式碼放在[從今天開始種樹](http://www.happyhong.cn/download/aiqiyi.html) ## 提示 文章首先在公眾號更新,CSDN更新較慢,有興趣的關注一下**知識圖譜與大資料公眾號**吧。 ## 準備 本期摳愛奇藝`passwd`加密`JS`程式碼,[傳送門](https://www.iqiyi.com/),登入介面如下(我已經嘗試了一次): ![愛奇藝登入介面](https://img-blog.csdnimg.cn/20200823203647320.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x1b2h1YTEzOTUw,size_16,color_FFFFFF,t_70#pic_center) 老老方法(`輸入錯誤賬號密碼`)找到提交`url`和提交的引數(即`FormData`裡的值): ![請求URL](https://img-blog.csdnimg.cn/20200823203913901.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x1b2h1YTEzOTUw,size_16,color_FFFFFF,t_70#pic_center) `FormData`提交的引數: ![FormData](https://img-blog.csdnimg.cn/20200823203939592.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x1b2h1YTEzOTUw,size_16,color_FFFFFF,t_70#pic_center) 可以看到`passwd`已經被某種加密演算法加密了,那我們接下來的任務就是找到這個加密`JS`程式碼,然後使用`python`程式碼呼叫執行出來。 ## 除錯 #### 找到passwd 選擇剛才的url,檢視呼叫棧: ![呼叫棧](https://img-blog.csdnimg.cn/20200823204142236.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x1b2h1YTEzOTUw,size_16,color_FFFFFF,t_70#pic_center) 仔細觀察後可以看到有一個檔案裡包含`doLogin`,那就點進去,進去後搜尋`passwd`關鍵字,如果你一直看我之前的文章,應該就對這些加密方法名字非常敏感了,能馬上找到: ![找到passwd](https://img-blog.csdnimg.cn/20200823204720433.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x1b2h1YTEzOTUw,size_16,color_FFFFFF,t_70#pic_center) 找到一個`rsaFun`,基本斷定就是這裡了,那就整上一個斷點: ![斷點](https://img-blog.csdnimg.cn/20200823204852105.png#pic_center) #### 啟用斷點 輸入錯誤的密碼,點選登入即可啟用斷點: ![啟用斷點](https://img-blog.csdnimg.cn/20200823205106991.png#pic_center) 斷點啟用後那就點選下一步(`F11)`按鈕開始執行,進入加密函式: ![rsa函式](https://img-blog.csdnimg.cn/20200823205247265.png#pic_center) 仔細看上圖,一個`getKeyPair`函式,一個`encryptedString`函式就是我們尋找的目標,繼續`F11`瘋狂除錯: ![getkey](https://img-blog.csdnimg.cn/20200823205532226.png#pic_center) 這就是`getKeyPair`函式,只要把`A`裡的函式`biFromHex、biHighIndex、BarrettMu`搜一下定義的地方摳出來算是把這個搞定了。 下一個`encryptedString`: ![encryptedString函式](https://img-blog.csdnimg.cn/20200823205931706.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x1b2h1YTEzOTUw,size_16,color_FFFFFF,t_70#pic_center) 依然只要找到這些方法,摳出來放一個檔案裡,等待`python`呼叫。 ## python呼叫執行 如果呼叫報錯,記得根據報錯資訊缺啥補啥,比如`window`可以定義為`window={}`,如果提示某某函式未定義,可能是你程式碼沒有摳全,全原檔案裡繼續查詢,摳出來,下面是我呼叫的結果: `python`程式碼: ```python import execjs with open('..//js//aiqiyi.js', encoding='utf-8') as f: aiqiyi = f.read() js = execjs.compile(aiqiyi) #logid = js.call('hexEncode', "123456") logid = js.call('get_pwd', "12345") print(logid) ``` 執行結果: ![執行結果](https://img-blog.csdnimg.cn/20200823210339650.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/aiqiyi.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_