看登陸包,驗證碼先不管,可以看到加密參數只有password。找到位置,斷點,可以發現調用的是 E.fM 來加密明文數據。往上面翻就找到了E的位置,s(802123)斷點並刷新網頁,去尋找分發器,跳轉到了o的位置,那麽o就是分發器。文件全部複製,新建一個js文件來測試。外部定義一個變量來接收 o ,并在o裏面打印調試信息找到 802123: 發現裏面調用的太多了,乾脆全部複製,添加到我們的調試函數裏面。我們只要内容,外邊的就去掉粘貼到 e 裏面運行發現報錯,找到那一行,注釋掉就可以了,我也不清楚這這行代碼有什麽用。繼續調試,面板輸出的模塊名,從網頁裏面搜了再補充就好了。最後看看效果:全部代碼
查看登錄包,ts明顯是時間戳,通過斷點可以知道password是經過md5加密,所以把焦點放到sign上面。看到了h的内容,其中後面的key是固定的找到d函數斷點,跳轉到這裏,可以看到這符合 webpack格式經過測試 e 為傳進去的明文數據,n 則是未定義,我們往上面找 t 賦值函數,t 再跳轉到 n 對n那裏斷點,刷新頁面,就找到了解釋器的位置複製全部的内容,然後在後面添加執行函數,同時在函數結束前聲明一個變量接收看下面就是加密解析成功了全部代碼:var encryption_obj; var window = global; (function(t) { function e(e) { for (var i, a, r = e[0], c = e[1], u = e[2], p = 0, l = []; p < r.length; p++) a = r[p], Object.prototype.hasOwnProperty.call(n, a) && n[a] && l
RSA 加密詳解什麼是 RSA 加密?RSA 是一種非對稱加密演算法,廣泛應用於資訊安全領域,尤其是網路通訊。它的名稱來自於三位發明者 Rivest、Shamir 和 Adleman 的姓氏首字母。RSA 的工作原理非對稱加密: RSA 使用一對密鑰:公鑰和私鑰。公鑰可以公開分發,而私鑰必須嚴格保密。加密與解密:加密: 使用公鑰對明文進行加密,得到密文。解密: 使用私鑰對密文進行解密,恢復出原始的明文。數學基礎: RSA 的安全性基於大整數分解問題的難解性。也就是說,要從公鑰中推算出私鑰在計算上是不可行的。RSA 的關鍵組成模數 (modulus): 是一個大整數,用於模運算。公鑰指數 (public exponent): 一個小於模數的整數,用於公鑰加密。私鑰指數 (private exponent): 一個大整數,用於私鑰解密。公鑰: 由模數和公鑰指數組成。私鑰: 由模數和私鑰指數組成。RSA 的加密過程生成密鑰對: 選擇兩個大素數 p 和 q,計算模數 n = p * q,再根據歐拉函數計算出其他參數,生成公鑰和私鑰。加密: 使用公鑰對明文進行模冪運算,得到密文。解密: 使用私鑰
從登陸包可以看到用戶名和密碼的加密方法為同一個繼續搜尋相關參數,找到如下代碼,即通過 encryptByAES 函數加密。提取出來以後,可以看到結果和登陸包的請求内容是一樣的相關js代碼:function encryptByAES(message, key) { let CBCOptions = { iv: CryptoJS.enc.Utf8.parse(key), mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }; let aeskey = CryptoJS.enc.Utf8.parse(key); let secretData = CryptoJS.enc.Utf8.parse(message); let encrypted = CryptoJS.AES.encrypt( secretData, aeskey, CBCOptions ); return CryptoJS.e
觀察登錄包,貌似只有sign加密了,是連同輸入的密碼一起加密的,timestamp很明顯是時間戳看上去是層層相扣,要找到sign的參數,就要找到 cr 的值,要找到 cr 的值,就要找到 we 的值不管了,直接全部扣下來,他媽的, var Qe = { exports: {} }; (function(t) { (function() { var e = "input is invalid type" , n = "finalize already called" , o = typeof window == "object" , r = o ? window : {}; r.JS_MD5_NO_WINDOW && (o = !1); var a = !o && typeof self =