先來看看今天的受害者:
aHR0cDovL3d3dy5taWd1dmlkZW8uY29tL21ncy93ZWJzaXRlL3ByZC9pbmRleC5odG1s
一、分析密碼加密
這次分析的是他登陸的三個引數,先分析登陸邏輯,抓個包看看,
可以看到這里用的是彈出的視窗登陸【圖1-1】,為了避免主頁其他元素的干擾抓包,我們可以通過右鍵 查看框架源代碼 的方式打開登陸框分析抓包【圖1-2】,
把打開的源代碼頁面地址欄中的 view-source: 洗掉即可打開以下頁面【圖1-3】:
接下來用錯誤的賬號密碼登陸一波,可以看到如下的包【圖1-4】,不過通過上面的 publickey 隱隱猜到這里的加密引數可能和 RSA 有關,先來找找密碼加密的位置:
照常搜索一下 enpassword ,預料之中是沒有搜索到有用的結果【圖1-5】,不過定位元素可以通過 name 定位 也可以通過 class 定位,所以同樣試試 J_RsaPsd ,果然找到像樣的檔案了【圖1-6】,
在打開的檔案里檢索 J_RsaPsd ,可以看到有3個相關的結果(熟悉加密的已經可以看出這里是 RSA 加密),我們通過把所有相關的結果都打上斷點【圖1-6】,并通過重新發起一次登錄請求,來判斷哪個 J_RsaPsd 是密碼的加密邏輯,
通過重新發起請求,斷點斷在 333 行【圖1-8】,
我們先復制整段代碼:
c.setPublic(a.result.modulus, a.result.publicExponent);
var d = c.encrypt(b.val());
b.siblings(".J_RsaPsd").val(d)
復制代碼
我們通過控制臺看看這些引數分別是什么【圖1-9】,
通過前文抓包和JS頁面的代碼,我們判斷密碼的加密是RSA加密,所以我們就需要找齊RSA加密的需要的幾個要素,比如他的公鑰 ,因為RSA是非對稱加密本地使用公鑰加密,服務器上使用私鑰解密,再看看【圖1-8】上的幾個引數不知道你們有沒想起開頭【圖1-4】我提及的那條抓包,我們切換到 控制臺-Network 看看【圖1-10】,
{"status":2000,"message":"","header":{},"result":{"publicExponent":"010001","modulus":"00833c4af965ff7a8409f8b5d5a83d87f2f19d7c1eb40dc59a98d2346cbb145046b2c6facc25b5cc363443f0f7ebd9524b7c1e1917bf7d849212339f6c1d3711b115ecb20f0c89fc2182a985ea28cbb4adf6a321ff7e715ba9b8d7261d1c140485df3b705247a70c28c9068caabbedbf9510dada6d13d99e57642b853a73406817"}}
復制代碼
是不是和我們在【圖1-9】中列印出來的數值完全相同
tip : 這里的 b.val() 是我輸入的錯誤密碼,
這里我們找齊了加密需要的引數,其實我覺得沒必要扣JS,但是我知道,,
不要我覺得,你要你覺得
所以偷懶用之前扣的代碼測驗一下:
-----------此處省略500行-----------
function bodyRSA()
{
//setMaxDigits(130);
var key = RSAUtils.getKeyPair("010001","","00833c4af965ff7a8409f8b5d5a83d87f2f19d7c1eb40dc59a98d2346cbb145046b2c6facc25b5cc363443f0f7ebd9524b7c1e1917bf7d849212339f6c1d3711b115ecb20f0c89fc2182a985ea28cbb4adf6a321ff7e715ba9b8d7261d1c140485df3b705247a70c28c9068caabbedbf9510dada6d13d99e57642b853a73406817");
return key
}
function get_encrypt(password) {
key = bodyRSA();
var a = RSAUtils.encryptedString(key,password)
//var b = RSAUtils.encryptedString(key,username)
console.log(a)
console.log('----------------------------------')
//console.log(b)
return a
}
get_encrypt('11111111111')
復制代碼
二、分析FingerPrintDetail與fingerPrint
根據第一部分的【圖1-5】和圖【1-6】可以很快定位加密的位置,這里就不說了【圖2-1】,
追進去分析一下 rsaFingerprint 的邏輯,可以看到其實和密碼加密用的是一樣的RSA加密【圖2-2】只是部分引數不同,
這里比較疑惑的是 $.fingerprint.result 和 $.fingerprint.details 是怎么來的,
通過檢索 $.fingerprint 根據查找的結果找到他的位置【圖2-3】
繼續向上查找,最終找到這里,發現是根據瀏覽器的請求頭等資訊生成的一串哈希值【圖2-4】,
這個值如果不修改請求頭資訊,那么這個值就是固定不變的,如果修改請求頭資訊,那么就需要重新生成這段hash,這就是這個的瀏覽器指紋資訊,
因為我們這里只是抱著學習的態度學習,所以就不瞎搞,不過這個整段的代碼也比較簡單沒事可以扣一扣,
tip: 如果想要分析這個指紋的演算法,記得要重繪一下頁面才可以進入斷點,
三、總結
這個網站的加密總體還是只用RSA的加密演算法就可以搞定了,整體加密演算法比較簡單有經驗的老哥直接通過加密庫就可以實作,如果想練練手的也可以摳出來試試,只要頭發多,肝就完事了,
需要源代碼或者想了解更多的點擊這里獲取
此文轉載文,著作權歸作者所有,如有侵權聯系小編洗掉!
原文地址:https://www.tuicool.com/articles/rIBfYve
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/157938.html
標籤:其他
