面對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是由於原加密中有一段是替換符號。)