JS加解密,python

之所以寫這篇文章是因爲之前在做一些爬蟲項目的時候遇到在url或者header頭中的加密參數,每次請求都需要變換,如果用chromdriver來解析的話耗費資源比較高,且耗時長,而剛接觸 js 逆向的時候真的是頭皮發麻,另外這裏不談哪個網站的加密參數,只說方法。

 

到現在爲止遇到的參數加密類型主要分爲兩類:

第一類: 在請求數據接口之前不需要發起其它請求,其中可能只需要你連接中的數個參數或者頁面中的一些信息來生成一個值;

第二類:在請求數據接口前還需要請求一段文本與來生成加密值,並且會在你的 cookie 中加入數一些信息,這裏又分爲兩種(1. 這段文本是加密參數,2,這段文本是一段 js(可能是加密的),在瀏覽器中運行會生成你需要的值)。

 

 

想要用自己的代碼來生成加密參數又分爲兩步:

第一步:找到生成加密參數方法,這裏使用chrom瀏覽器。兩種方法(1. 在開發者工具的 sources 欄中搜索數據接口中的關鍵字, 2.在開發者工具中的 Network 中抓一下包,找到你需要的那個請求,鼠標移動至那條請求的 Initiator 欄中,會顯示這條請求所使用的函數),然後就是 debug 之路。這裏就不貼截圖了,想詳細學習的話可以找依照 js加解密系列的視頻。

如果你已經找到加密函數後,請往下看,不然的話還是繼續找吧。

第二步:執行加密方法,生成加密值。 另外,我這裏使用的是 PyExecJS,雖然 PyV8的效率比較高,但是安裝比較煩,不兼容。這裏還是介紹兩種方式:

一. 利用 selenium 和 chromdriver ,首先實例化一個瀏覽器,然後打開一次你所需要的數據接口所在的頁面,這是爲了加載一次js, 如果加密類型是第一大類的話,可以直接利用瀏覽器實例的 execute_script 方法來執行一段js代碼,這段代碼可以是調用加密函數的代碼,然後瀏覽器實例不要關閉等待下次使用。注:如果不是必須,推薦使用這種方法,因爲相比下面那種方法,這個還是比較省力的;如果加密類型是第二大類的話可以先使用 requests 把 所需要文本給請求一次,然後在使用 execute_script 方法的時候作爲參數傳入進去就ok。

二. 這個就是不斷的進行 debug ,然後把自己把需要的js代碼給賦複製粘貼下來,因爲js中有很多地方會使用到瀏覽器的 windows,documen等對象,甚至還有什麼先在 html 標籤的屬性中寫入一個值,在接下來的運算中再取出來進行計算這種騷操作,所以就需要改寫 js 了。 這裏可以給到大家幾條經驗,你猜是幾條。。。。。。

JS改寫的兩條經驗(沒錯,就是 2 )!!:

1.JS代碼中如果遇到什麼 三元表達式 、&&、|| 這種從HTML中拿東西的話,可能只是爲了判斷真假,這裏你可以直接改寫爲布爾值;

2.在js代碼中遇到什麼 crypto 或者是 cryptoJS的話,就可以使用 PyExecJS 來解析了,不過你需要更換PyExecJS的引擎。PyExecJS的默認引擎爲  JScript,這點你可以通過打印  execjs.get().name 來驗證,你現在需要 安裝node.js 並放到環境變量中,再次打印  execjs.get().name ,如果現在結果爲 Node.js (V8) 的話,就說明你成功了。 其中 node 環境中已經有 crypto , 如果需要 cryptoJS 的話還需要安裝 crypto-js 包。

這裏提供一款JS調試工具:https://download.csdn.net/download/meteorcountry/10842095

珍愛生命,遠離爬蟲,且行且珍惜。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章