1. 程式人生 > >面對js加密時破解全流程 python版

面對js加密時破解全流程 python版

遇到各種密碼加密,引數加密時,當加密較為複雜時,不好使用python重寫加密方法。

這時候我們可以找到對應js程式碼,並直接呼叫js中的方法

流程如下:

這是一個網站傳送簡訊驗證碼的頁面,其引數被加密過:

定位到獲取驗證碼的按鈕

搜尋找到該方法:

發現該方法中並未進行加密,推測在ajaxDirect中,還是找到該方法:

可以發現該方法為傳入url後對引數進行拆分,然後單獨加密:

定位到加密方法:(這裡我們可以新增幾個斷點確定加密函式)

發現加密為AES加密,但是這都不重要,我們並不需要重寫整個加密方法。

我們只需要瞭解一個大概,呼叫該方法傳入了一個引數data,即為需要加密的字串,如果需要加密則會返回加密過的字串,否則返回原字串。

我們分析得該加密是呼叫了AES中的encrypt方法,那我們也找到該js:

6000多行的js,看起來很複雜,但是我們不理他,直接在我們本地建立一個js檔案並複製進去,並將我們需要呼叫的加密方法也複製進去:

這樣一個我們自己的js就建立好了。

這時候我們可以去瀏覽器中測試一下是否可行:

新建一個瀏覽器標籤進入開發者模式,在console中將我們的js複製進去,回車。

輸入encrypt('post'),回車:

我們發現,已經加密成功,說明我們的js是可以執行的。(這裡如果發現不能執行,則需要回頭檢視是否有呼叫其他js的方法,也需要都複製到我們的js中。)

好的,現在回到我們的js檔案中,在最後一行加上

console.log(encrypt('post'));

進入命令列中js檔案目錄下輸入:(test為js檔名稱。)

node test.js

便可以執行js檔案了,這時我們發現有錯誤報出:

意思是我們的加密方法中沒有找到cryptoJS,但我們在瀏覽器中明明是可以執行的,所以推測是由於上面定義了cryptoJS,但是作用域並不包括我們的加密函式。

所以我們可以進行一些小改造:

我們首先在第一行定義一個window作為全域性定義:

隨後在所有用到cryptoJS的地方,將cryptoJS改為window.cryptoJS

而我們的加密函式中也要做相應的修改:

這時候我們再次執行試試:

我們發現已經加密成功了。

隨後我們在使用中只用呼叫該js中的方法即可:

(最後加上replace是由於原加密中有一段是替換符號。)