實驗網站
aHR0cHM6Ly9jai5lbG9hbmNuLmNvbS8=
破解對應位置
登錄密碼的加密部分
圖示↓
分析解密過程
首先,我們找到登錄密碼的具體 URL,這一步一般是全局搜索關鍵參數,比如 login ,或者 password 模塊,這個網站的 url 請求很少,非常容易就從 xhr 中找到了。對應 /login/v1/02 這個請求
接下來往下翻 看到嗎?password 這個並非是我們輸入時候的密碼,我們的目標就是通過原始密碼,得出這個值 這裏我們先通過全局搜索 password 關鍵字的方式,查看文件中是否有明文的密碼字段 很幸運的是,我們查找第一個文件的時候,就找到了關鍵加密的位置 然後我們去到 source 文件中,找到對應的 js 文件,在我們看 password 位置打上斷點 我們再次刷新頁面,輸入密碼,看到它已經跳到了我們打斷點的位置 鼠標移動到箭頭位置,發現 o.PUBLIC.DESkey 是個固定值:e9284d45-cf2a-4e46-9367-f122413ca6b0 前面 this.checkPwd.password 通過將鼠標移動到 password 上發現,它也是我們自己的原始密碼。後面的 trim 是個匿名的函數頭,先不管它。重點是 encryptByDES 。我們將鼠標移動到函數上,然後上方會出現鏈接到原位置的跳轉提示 點擊進去我們就進入 encryptByDES 的函數具體實現上 接下來就簡單了,通過 python 實現原算法,或者通過 python 調用 js 構造這個函數就可以實現 password 解密了,這裏我們採用後一種方式
代碼實現
首先你需要安裝好 node。
安裝教程可以參照:https://www.runoob.com/nodejs/nodejs-install-setup.html
step1:初始化 node 環境,命令行鍵入
npm init -y
step2:安裝好 crypto-js 環境包(當然你也可以通過拷貝原來的 js 包到本地的方式)
npm install crypto-js -S
step3:創建實現解密邏輯的 js 文件
touch crack.jscode crack.js // 這個是通過 vscode 打開 crack.js 的命令
引入 crypto-js 包,將之前的破解代碼邏輯拷貝進去
var crack = function(t, e) {var CryptoJS = require("crypto-js");var a = CryptoJS.enc.Utf8.parse(e);try {var s = CryptoJS.DES.encrypt(String(t), a, {mode: CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7 }) } catch (t) {console.log(t) }return s.toString()}
step4: 通過 python 調用 js 文件實現解密
touch crack.py
code crack.py
寫入 python 調用 js 文件代碼邏輯
import execjs
import os
js_file = open("./crack.js").read()
js_compile = execjs.compile(js_file)
crack_result = js_compile.call("crack", "frfrfrf", "e9284d45-cf2a-4e46-9367-f122413ca6b0")
print(f"{crack_result}")
最後通過命令行運行,得到結果
>>> python crack.py
StULrhXDyVg=
破解目錄下的文件如下
>>>ls
crack.js crack.py node_modules package-lock.json package.json
後面三個node_modules、package-lock.json、package.json。均是由 node 安裝依賴包時生成的文件,不可移除它們,就醬
參考資料