來自#博客園#文章,七月份的時候突然對QQ協議產生了些興趣,于是這幾個月有空就研究QQ協議,目前對QQ2010的協議已經分析得差不多了。QQ登錄分為UDP和TCP登錄,還支持代理登錄。默認是UDP登錄。UDP登錄端口服務器為8000,本地端口一般是從4000開始選擇,如果該端口已經被占用,則加1再測試,一直測試到一個沒有被占用的端口。TCP登錄服務器一般是80或者443端口,本地端口選擇方式和UDP一樣。
這些登錄方式登錄設置里面可以自由選擇。但是無論哪種方式登錄,其登錄流程和數據包格式都是一樣。QQ登錄時需要進行6次與服務器的交互,每次交互均伴隨著登錄相關信息的攪渾。QQ登錄主要分6步。
1. 0×0091 Touch包
該數據包是QQ客戶端登錄時發送的第一個包,它的作用在于測試遠程服務器是否能夠正常響應,根據我們的抓包分析,對于不同的QQ號碼段,提供服務的QQ服務器是不相同的,對于QQ會員有專門的QQ會員服務器。在對QQ客戶端的回應包中,如果連接的服務器不對該QQ號碼提供服務,它會返回另外一個服務器地址,讓客戶端重新連接該地址。
0×0091發送包:
02 1E 07 00 91 5B B8 04 EE D4 E9 02 00 00 00 01
01 01 00 00 64 2F 6A 84 FA 78 CC 16 51 86 A7 B8
1C 55 E8 29 6B C8 50 95 FB 5A CE E8 6C 89 0A C9
83 D0 68 51 DB 6E D1 93 C1 32 11 9B 84 13 EF 7D
4B 55 8C 08 6C F3 F0 5F 11 16 26 E4 00 68 0D 98
02 BC 06 B9 4E E2 03
[
02 //包頭
1E 07 //版本號
00 91 //命令
5B B8 //包序號
04 EE D4 E9 //QQ號碼:82760937
02 00 00 00 01 01 01 00 00 64 2F //固定,QQ版本號不同則不同
6A 84 FA 78 CC 16 51 86 A7 B8 1C 55 E8 29 6B C8 //0x91密鑰
00 01 //固定兩字節
00 00 08 04 01 E0 //0091Data01(在后面的命令里面要用到的)
00 00 03 20 00 00 00 01 00 00 0B BF //0091Data02(在后面的命令里面要用到的)
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 //首次發送為15字節0
03 //包尾
]
0×0091接收包:
02 1E 07 00 91 5B B8 04 EE D4 E9 00 00 00 C0 EB
D0 BF C5 F9 E1 F2 C9 51 9D 3B 26 07 B5 AD 46 49
49 C4 49 D7 69 36 9E 11 8E 24 2E A1 B3 AB 90 CE
CA 38 C9 99 94 8E 0A 41 03 EB AC E7 C6 BA 34 FD
64 9E E7 4B 3D 24 6F 44 0A 77 80 69 96 91 0C 00
87 6B 51 25 E5 15 9F E3 54 6E B8 C6 1D 5F DE 40
54 BB D8 0C 36 8D 03
[
02 //包頭
1E 07 //版本號
00 91 //命令
5B B8 //包序號
04 EE D4 E9 //QQ號碼:82760937
00 00 00 //固定全為0
00 //接觸成功
4D 16 07 CC //登錄時間:
2010
-12-25 23:03:40
7D 47 C8 04 //登錄IP地址:125.71.200.4
00 00 00 00 00 00 00 00 //固定8字節0
00 38 //0091_Token長度:56字節
6E F0 FB 35 5F 8E 65 0F 77 E7 A7 D0 AE 69 8C 4D
EF 43 41 89 BB 79 9C B9 B5 0C 4C 86 5E 8D A0 CB
84 D7 66 69 CF 63 E9 0D 80 48 F4 E6 C1 30 A7 88
7E B0 68 0A E6 8C FC D4
00 //接觸成功
03 //包尾
]
2 0x00BA獲取驗證碼
因為部分QQ號碼可能存在異地登錄,或者QQ號碼被盜發送大量垃圾信息,或者用了掛機軟件或者掛機網站掛機,騰訊服務器檢驗到這些非正常的QQ情況時即會要求輸入驗證碼。 以下分析我都直接截取QQAnalyzer的分析圖片。貼分析代碼比較麻煩,關于QQAn alyzer的介紹和下載請看這篇博客: http://www.cnblogs.com/83008911/archive/2010/10/09/QQAnalyzer.html 。
0x00BA發送包
0x00BA接收包
3 0x00DD密碼驗證
該數據包的作用是將本地QQ的密碼發送給服務器端進行驗證。
0x00DD發送包
0x00DD接收包
4 0x00E5數據校驗
該數據包主要用于校驗前幾個數據包的Token數據,如果通過驗證,服務器端會返回本次登錄的時間和IP地址等信息。
0x00E5發送包
0x00E5接收包
5 0x00E3數據校驗
0x00E3發送包
0x00E3接收包
6 0×0030獲取會話密鑰
該數據包是QQ登錄流程的最后一個數據包,主要用于向QQ客戶端返回會話密鑰(Session? Key),該會話密鑰由服務器端生成,目前不知道其生成算法。但是估計和QQ號碼,登錄IP,登錄時間以及QQ密碼有關。
0×0030發送包
0×0030接收包
以上就是一個完整的QQ登錄流程,我們可以看到,騰訊對于登錄的設計是相當巧妙而安全的,既能安全的將客戶端密碼賬戶傳遞到服務器端驗證,又能保證數據即使被截獲也無法獲取太多有用的信息,不過個人覺得部分登錄過程有些冗余,一些數據包可以整合為一個直接發送至服務器端。
下一篇博客即將為大家 帶來QQ 2010的消息發送和接收分析,還有QQ的右下角廣告彈出窗口的分析,目前發現這個彈出窗口存在一些漏洞我們可以利用從而輕易獲取QQ的賬號和密碼。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
