當前位置:編程學習大全網 - 源碼下載 - QQ聊天的原理

QQ聊天的原理

首先QQ客戶端向服務器發送壹個請求登錄令牌的數據包.服務器返回登錄令牌.這個令牌是在服務器端生成的.和客戶端的IP地址,版本信息等數據相關.以後會用到這個令牌去進行其他操作.

在QQ客戶端得到登錄令牌之後.就會向服務器發送壹個包含登錄信息的登錄請求.要求登錄.服務順會首先看看客戶端的號碼.I守址和版本是否可以在本服務器上進行登錄.如果可以的話,就驗證客戶端的登錄信息是否與服務器上保存的登錄信息進行比較.匹配的就向客戶端返回壹個登錄成功的數據包.不匹配返回登錄失敗.因為QQ的服務器有很多臺.可能要分管不同的QQ版本.IP等.所以如果客戶端的號碼.IP地址和版本無法在本服務器進行登錄.服務器就返蜀犬吠日壹個重定向包.讓客戶端去另外壹臺服務器登錄.其實整個QQ登錄過程就是這麽簡單的兩個步驟.

了解了QQ登錄的過程後.我們還需要知道具人本的數據包格式.以便解析出我們需要的數據內容.QQ登錄過程的數據包分為頭部.內容和尾部三個部分.其中頭的格式固定為:0x02客戶端版本 命令 序列號 QQ號碼. 其中0x02是1個字節的標誌;客戶端版本2個字節.用於表示QQ客戶端的版本;命令2個字節.表示要發送的命令類型.例如請求登錄令牌登錄請求等;序列號是壹個2字節的隨機數,在壹次QQ會話中通過它來確認回應包是否對應請求包.QQ客戶端默認每次加1;QQ號碼就是4字節的QQ號.對於服務器來說是每個字段是無所謂的.QQ登錄過程數據包的尾部固定為0x03.

1. 請求登錄令牌包

包內容就是對壹次命令的具體信息,對於第壹次發送的請求登錄令牌包來說,包命令是0x0062,整個請求包如下所示;

而服務器返回包則相對復雜壹些,如下所示;

其中0x18表示登錄令牌的長度,現在QQ默認的登錄令牌長度是0x18.這個令牌是在服務器端生成的.具體的生成算法我們當然還無從得知,應該是參考了QQ客戶端的I守址.端口和其他壹些信息生成這個令版的,因為妳把在A機器上得到的令牌用到B機器上,妳就會登錄不了.如果妳把A機器上的IP給改了.妳照樣也登錄不了.

2. 登錄包.

對於我們嗅探QQ密碼來說,最重要的就是這個登錄包.在這裏包含了和QQ密碼相關的信息.登錄包的具體結構如下;

其中初始密鑰是壹個16字節的隨機數,用於本身的加密.這裏最重要的就是密碼密鑰加密的壹個空字符串.

所謂密碼密鑰就是用QQ口呤進行兩次MD5加密後得到的密文,然後以這個密文作為密鑰去加密壹個空字符串,這次加密使用了反饋的TEA算法,加密結果放在QQ登錄包裏,讓服務器去驗證,由於QQ的加密算法使用特殊的填充機制使用QQ服務器可以驗證出用戶密碼是否正確,這個會在後面進行詳細的解釋.QQ登錄包裏面還有壹些諸如登錄狀態,登錄令版和很多未知的內容.但是這些對於我們破解QQ密碼來說都沒有什麽太大的作用.

需要特別提到的是,前面的請求登錄令牌包是不加密的,而這個登錄包除了初始密鑰本身以外的部分都要用初始密鑰進行加密,加密算法同樣是反饋的TEA.

QQ服務器在收到這個登錄包之後,首先要用初始密鑰解密登錄包後面的部分,如果解密成功,就會用保存在服務器上的密信息去解密密碼密鑰加密的那個空字符串密文,我現在還不確定QQ服務器上保存的是密碼明文還是密碼密鑰.猜測是密碼密鑰.這樣服務器就用密碼密鑰去解密那段16位密文,如果用戶提交的密碼是正確的.才可以解密成功.否則解密函數會返回空,認證就失敗了.當驗證QQ客戶端密碼準確無誤後.就返回壹個登錄成功包.格式如下:

QQ的加密算法

了解了上面的QQ登錄的通信協議之後還不足以破解QQ密碼,我們還需要掌握QQ的加密算法.前面提到了,密碼密鑰是用戶密碼進行兩次MD5加密之後得到的結果.然後再用空個結果作為密鑰使用TEA算法進行加密.TEA是Tiny Encrypt Arithmetic的縮寫.顧名思義就是壹種比較簡單的小型加密算法.它用壹個16字節的密鑰去加密壹個8字節的明文.得到壹個8字節的密文.也可以反向從密文解密出明文.具體的算法可以到網上搜索查閱.這裏就不在贅述了.

但是QQ使用的TEA雖然是標準的TEA.但是QQ卻使用了壹種自己特殊的填充反饋機制,QQ消息被分為多個加密單元.每壹個加密單元都是8字節.使用TEA進行加密.加密結果再作為下壹個單元的密鑰.如果明文本身的長度不是8的倍數.那麽還要進行填充.使其成為8的倍數.填充的時候會用壹個32位隨機數存放於明文的開始位置.再在明文的最後用0填充為整個長度是8的倍數.由於會向後反饋這樣即使對於相同的明文,因為使用了不同的隨機數.也會產生完全不同的密文.

使用這種特殊的填充反饋算法所導致的結果就是,壹段密文只能用加密它的密鑰進行解密.如果使用不正確的密鑰.就無法得到正確的填充結果.最常見的就是解密後得到的填充數值不是0,這樣就判斷解密失敗.

參考資料:

/mozhihuidage/blog/item/40765136246a86dda2cc2b21.html

  • 上一篇:海爾l e32a7500遙控器什麽型號?
  • 下一篇:《暗黑破壞神3:死靈鐮刀》中傳奇寶石的獲取和升級方法分析

    在《暗黑破壞神3:死靈法師的鐮刀》中,有各種傳說中的寶石,可以用來增加裝備的屬性。我將為大家帶來壹個獲取和升級傳奇寶石的分析策略。

    如何獲得傳說中的寶石?

    遊戲中有14個傳說中的寶石。其中13種是通過瑰麗秘境的秘衛獲得的。而財神的14布恩落到了寶藏院(地精領地)貪婪的伯爵夫人手中。寶石掉塊率很高,平均每殺1-2塊

  • copyright 2024編程學習大全網