QQ协议分析及其还原(二)
http://www.iprotocolsec.com/2012/02/28/qq%E5%8D%8F%E8%AE%AE%E5%88%86%E6%9E%90%E5%8F%8A%E5%85%B6%E8%BF%98%E5%8E%9F%E4%BA%8C/
QQ協議分析及其還原(二)
2012-02-28上一篇講到了QQ協議的Header部分,這一篇主要講密鑰生成及其交換的過程。
QQ登陸協議密鑰交換過程,首先我們使用Wireshark抓報文分析,觀察主要用到的命令字(見上一篇Header部分的介紹)。
| 命令字 | 含義 |
| 1、Touch Information(0×0091) | 根服務器SAY HELLO,如果對該報文做一些小動作,可以讓QQ認為,TX的服務器或網絡不能訪問… |
| 2、Login Request(0x00ba) | 未知,可以不進行處理。 |
| 3、Login Verify(0x00dd) | 向服務器發送登陸請求,需要使用密碼進行運算作為密鑰才能機密該報文,解密的報文中包含對第4步的解密密鑰。 |
| 4、Login get Information(0x00e5) | 未知,但是服務器返回的報文你必須得知道,因為這個報文中包含解密會話密鑰報文(第6步)的密鑰。 |
| 5、Login verify E3(0x00e3) | 未知,可以不進行處理。 |
| 6、Login send Information(0×0030) | 客戶端向服務器發送sessionKey,使用第4步獲取的密鑰進行解密。 |
?
?
1、Touch Information(0×0091)
這個報文無需關心,是客戶端向服務器在SAY HELLO…
2、Login Request(0x00ba)
未知,在此處并不重要。
3、Login Verify(0x00dd)
非常重要!!獲取會話密鑰首先得解密該報文。但是要解密該報文,必須得知道該登陸QQ用戶的密碼,而用戶密碼只有用戶和TX知道,第三方是不知道的(也有可能存在“不可思議”的第三方…)。數據傳輸過程中使用的加密算法是blowfish,這個算法目前從公開的資料上來說,還沒有發現漏洞。因此,要實時獲取用戶的聊天信息,除非已經知道密碼了,或者已經暴力破解了密碼(這里簡單介紹一下怎么進行暴力破解,這里的暴力破解,當然不是模擬一個QQ客戶端不停的向TX服務器發送登陸請求,這樣太慢了,而且TX那邊也會有記錄。首先,得分析出這個報文的密鑰生成算法[不是簡單的直接使用密碼作為密鑰],加密算法(這個已知,是blowfish),第二,需要將對方的登陸報文截取保存到文件,然后寫一個程序,不停拼接字符串、數字、標點符號進行組合,根據第一步分析它密鑰的生成方法生成出密鑰,然后作為blowfish算法的密鑰,去解密報文,如果解密成功,恭喜你,你暴力破解到了一個QQ密碼。但是這種概率比較小,即使有一些,這些號碼的價值不大,扯遠了…)。
LoginVerify報文的解密密鑰生成方法,在QQ2011版本之前,是MD5(MD5(PWD)),對QQ的密碼做了兩次MD5運算。但是QQ2011版本(包括2011版本)之后,這個算法做了一點修改,就是:MD5(MD5(PWD+QQ_NUM)),這個修改其實是非常有必要的,為什么呢?因為隨著硬件技術的發展,以及前些年MD5彩虹表的推出,簡單密碼的MD5值非常容易就能從彩虹表中找出對應MD5值,從而得到原始字符串密碼,即使TX做了兩次的MD5運算。在彩虹表的推出或以前(因為我也不知道是在這以前還是以后,呵呵),在執行MD5運算時,就有了加SALT的說法,很形象!加鹽,在這里,QQ_NUM就是鹽,這樣就加大了使用彩虹表破解的難度。
使用密碼根據以上的算法得出解密密鑰,解密Login Verify報文后,會得到一個新的密鑰,這個密鑰暫且就叫做verify_key。
Login Verify Reply(0x00dd)
服務器對客戶端Login Verify報文的響應,這個報文需要verify_key作為密鑰進行解密,得出一個新的密鑰-verify_reply_key。
4、Login get information(0x00e5)
客戶端接收到服務器的Login Verify Reply報文后,會使用verify_reply_key加密數據發送到服務器,而這里面又包含了一個key – get_info_key。
5、Login verify E3(0x00e3)
未知,此處可以不進行處理。
6、Login send Information(0×0030)
使用get_info_key解密該報文,得到會話KEY – session key。
回想一下:密碼是關鍵,有了密碼才能解密Login Verify(0x00dd)報文,解密了Login Verify(0x00dd),才能解密后續的的報文。其步驟是:passwd -> verify_key -> verify_reply_key -> get_info_key -> session_key。
總結
以上是生活随笔為你收集整理的QQ协议分析及其还原(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WI-FI无线数据解密
- 下一篇: RSA算法和RSA数字签名算法的实现