1. 程式人生 > 實用技巧 >記錄一次4399加密資訊解密過程

記錄一次4399加密資訊解密過程

記錄一次4399加密資訊解密過程

一、前提須知

  1. 在4399頁面中,登入面板中輸入了使用者名稱和密碼(隨便輸入,只是拿來試試解密),輸入的使用者名稱是:test ,密碼:23232323;

  2. 4399網站採用的是 HTTP 協議,意味著安全性是較低的,找解密其實並不難

  3. 純屬娛樂,在種種巧合之下無難度阻礙的解了密

二、正題

大體想法:尋找網站使用何種加密演算法,然後嘗試利用線上網站的工具對其解密(如果得知加密演算法是base64,那麼通過base64加密,對應的也通過base64解密),如果有需要私鑰,嘗試分析私鑰可能儲存在何處,有無可能獲得。

  • 提前開啟開發者工具,便於發起登入請求後檢視報文。使用者名稱和密碼輸入後點擊登入,在 Network 選項卡中找本次做的登入請求,很明顯可以看到在眾多請求中有個叫 login.do?v=1 的項惹人注目,如圖:

    在這裡插入圖片描述

  • 點進去檢視該請求附帶的表單資訊 Form Data,如圖:
    在這裡插入圖片描述
    username:test
    password:U2FsdGVkX19DpJPPbUtzw5/nC4pHHe8jhj3mbzJaVyE=

  • 可以看到密碼是有被加密過的,首先我去找了登入按鈕所在面板的 HTML 結構,發現它是通過 iframe 嵌入的一個頁面,找到它引入的指令碼檔案,類似處理互動的方法或工具方法不用說,都寫在指令碼檔案裡的,於是去找它引入的指令碼檔案。

個人認為在開發中遇到通用的問題需解決時,一般會找市面上已成熟大家都會去用或流通較久的方案去解決問題,因此猜想可能加解密使用的是現成的庫

在這裡插入圖片描述

  • 紅框標註出來的檔案,猜測驗證登入或其他輸入的方法應該都放在 validation.js 中,加解密模組想必是放在 cryptojs-aes.js 中了,其實看到檔名也能有點懷疑

高階加密標準(AES,Advanced Encryption Standard)為最常見的對稱加密演算法(微信小程式加密傳輸採用該加密演算法)

crypto-js 是一個純 javascript 寫的加密演算法類庫 ,可以非常方便地在 javascript 進行 MD5、SHA1、SHA2、SHA3、RIPEMD-160 雜湊雜湊,進行 AES、DES、Rabbit、RC4、Triple DES 加解密

  • 使用 cryptojs 庫 ase 加密的方式有多種,因此需要先商量並確定好採用何種方式,傳遞如下引數:
    1. 明文
    2. 私鑰 - 這個私鑰只有自己知道,別人不知道,因為你要通過它對明文進行加密
    3. 物件,裡面包括要指定的 mode(加密模式) 和 padding (填充方式), iv(祕鑰偏移量)這個可選
  • 點開 cryptojs-aes.js ,發現該指令碼是經過壓縮後的程式碼,於是嘗試去看 validation.js ,如果也被壓縮了,那這就…尷尬了…,所幸開啟後,發現沒被壓縮,反而立馬發現一個有趣東西:
    在這裡插入圖片描述
    難道這就是傳說中的得來全不費工夫?懂了懂了,這不就是把方法在封裝了下嗎,我盯著’lzYW5qaXVqa’ 看了很久,也沒搞明白這咋整的,就這樣明晃晃的把私鑰寫在外邊,沒做任何處理,這。。都挺好
  • 接著在頁面中找該方法都有哪些呼叫了它,沒什麼好說的,仙人指路看圖:
    在這裡插入圖片描述
    可以確認,加密密碼是呼叫該方法實現的,接下來就是驗證過程了:
    在這裡插入圖片描述

三、結尾

要解決的這樣的問題,方法還是多種多樣的,例如將私鑰儲存在服務端,或者對私鑰進行加密等,如若有感,邀請留言指出!