來自#博客園#文章,七月份的時候突然對QQ協(xié)議產(chǎn)生了些興趣,于是這幾個月有空就研究QQ協(xié)議,目前對QQ2010的協(xié)議已經(jīng)分析得差不多了。QQ登錄分為UDP和TCP登錄,還支持代理登錄。默認(rèn)是UDP登錄。UDP登錄端口服務(wù)器為8000,本地端口一般是從4000開始選擇,如果該端口已經(jīng)被占用,則加1再測試,一直測試到一個沒有被占用的端口。TCP登錄服務(wù)器一般是80或者443端口,本地端口選擇方式和UDP一樣。
這些登錄方式登錄設(shè)置里面可以自由選擇。但是無論哪種方式登錄,其登錄流程和數(shù)據(jù)包格式都是一樣。QQ登錄時需要進(jìn)行6次與服務(wù)器的交互,每次交互均伴隨著登錄相關(guān)信息的攪渾。QQ登錄主要分6步。
1. 0×0091 Touch包
該數(shù)據(jù)包是QQ客戶端登錄時發(fā)送的第一個包,它的作用在于測試遠(yuǎn)程服務(wù)器是否能夠正常響應(yīng),根據(jù)我們的抓包分析,對于不同的QQ號碼段,提供服務(wù)的QQ服務(wù)器是不相同的,對于QQ會員有專門的QQ會員服務(wù)器。在對QQ客戶端的回應(yīng)包中,如果連接的服務(wù)器不對該QQ號碼提供服務(wù),它會返回另外一個服務(wù)器地址,讓客戶端重新連接該地址。
0×0091發(fā)送包:
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 //固定兩字節(jié)
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 //首次發(fā)送為15字節(jié)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字節(jié)0
00 38 //0091_Token長度:56字節(jié)
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號碼被盜發(fā)送大量垃圾信息,或者用了掛機(jī)軟件或者掛機(jī)網(wǎng)站掛機(jī),騰訊服務(wù)器檢驗到這些非正常的QQ情況時即會要求輸入驗證碼。 以下分析我都直接截取QQAnalyzer的分析圖片。貼分析代碼比較麻煩,關(guān)于QQAn alyzer的介紹和下載請看這篇博客: http://www.cnblogs.com/83008911/archive/2010/10/09/QQAnalyzer.html 。
0x00BA發(fā)送包
0x00BA接收包
3 0x00DD密碼驗證
該數(shù)據(jù)包的作用是將本地QQ的密碼發(fā)送給服務(wù)器端進(jìn)行驗證。
0x00DD發(fā)送包
0x00DD接收包
4 0x00E5數(shù)據(jù)校驗
該數(shù)據(jù)包主要用于校驗前幾個數(shù)據(jù)包的Token數(shù)據(jù),如果通過驗證,服務(wù)器端會返回本次登錄的時間和IP地址等信息。
0x00E5發(fā)送包
0x00E5接收包
5 0x00E3數(shù)據(jù)校驗
0x00E3發(fā)送包
0x00E3接收包
6 0×0030獲取會話密鑰
該數(shù)據(jù)包是QQ登錄流程的最后一個數(shù)據(jù)包,主要用于向QQ客戶端返回會話密鑰(Session? Key),該會話密鑰由服務(wù)器端生成,目前不知道其生成算法。但是估計和QQ號碼,登錄IP,登錄時間以及QQ密碼有關(guān)。
0×0030發(fā)送包
0×0030接收包
以上就是一個完整的QQ登錄流程,我們可以看到,騰訊對于登錄的設(shè)計是相當(dāng)巧妙而安全的,既能安全的將客戶端密碼賬戶傳遞到服務(wù)器端驗證,又能保證數(shù)據(jù)即使被截獲也無法獲取太多有用的信息,不過個人覺得部分登錄過程有些冗余,一些數(shù)據(jù)包可以整合為一個直接發(fā)送至服務(wù)器端。
下一篇博客即將為大家 帶來QQ 2010的消息發(fā)送和接收分析,還有QQ的右下角廣告彈出窗口的分析,目前發(fā)現(xiàn)這個彈出窗口存在一些漏洞我們可以利用從而輕易獲取QQ的賬號和密碼。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

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