QQ协议分析.docx
《QQ协议分析.docx》由会员分享,可在线阅读,更多相关《QQ协议分析.docx(32页珍藏版)》请在冰豆网上搜索。
![QQ协议分析.docx](https://file1.bdocx.com/fileroot1/2023-1/4/b3f902a2-84a2-4a3e-9a4e-ce10ecfa1c64/b3f902a2-84a2-4a3e-9a4e-ce10ecfa1c641.gif)
QQ协议分析
QQ2013协议分析
(一)准备工作
腾讯QQ(统一简称“QQ”)是腾讯公司开发的一款基于Internet的即时通信(IM)软件。
腾讯QQ支持在线聊天、视频电话、点对点断点续传文件、共享文件、网络硬盘、自定义面板、QQ邮箱等多种功能,并可与移动通讯终端等多种通讯方式相连。
1999年2月,腾讯正式推出第一个即时通信软件——“腾讯QQ”,QQ在线用户由1999年的2人(2人指马化腾和张志东)到现在已经发展到上亿用户,在线人数超过一亿,是中国目前使用最广泛的聊天软件之一。
从我接触最早的QQ2002版本到现在,目睹了txn次变革,其间协议也是变化较大,随着用户量的增加,qq协议越来越勾起开发者的兴趣,从今天开始,我将开始分析QQ2013版本协议,敬请感兴趣的同行关注,笔者所有分析均来自于黑盒分析,不涉及法律问题,另外技术仅作学习之用,请勿用做非法用途。
工欲善其事,必先利其器,开门见山,先上法宝!
分析QQ协议需要的工具并不多,只需要一个smartsniff、一个解密工具、和一个编辑器足以。
最好按以下图片配置,省却了你很多麻烦
官方下载地址
QQcrypter自己搜索吧,很多,主要是包含了一组解密工具,可以用来解密qq的很多加密数据。
编辑器就用word吧,简单、来的快。
另外,文章主要是以UDP协议来分析的,请在登陆窗口设置如下。
好吧为了方便某些懒人,我好人做到底,我把smartsniff的配置文件也贴出来,以便与你们复制粘贴,以下内容为smsniff.cfg
[General]
ShowGridLines=1
ShowInfoTip=1
SaveFilterIndex=4
SaveSteamsFilterIndex=2
ResolveIPAddr=1
AddExportHeaderLine=1
DecompressHTTP=1
UseDnsQueriesForHostNames=1
MarkOddEvenRows=0
TrayIcon=0
CaptureOnProgramStart=0
GetProcessInfo=1
StatOnly=0
SummaryMode=0
LiveMode=1
LiveModeDisplayContent=1
SplitLoc=16280
PromiscuousMode=0
CaptureMethod=1
PCapAdapterName=
NetMonAdapterName=
NetMon3AdapterName=
AdapterName={ADB5CAC4-3727-4139-B125-E51198B811AD}
DisplayHighChars=0
DisplayMode=3
HexDumpCharsPerLine=16
HexDumpCharsSpc=8
HexDumpDisplayChars=0
HexDumpDisplayCounter=0
HexDumpMaxSize=100
MaxDataSizeDisplay=1000
DisplayTCP=1
DisplayUDP=1
DisplayICMP=1
DisplayCaptureTime=1
ShowOutgoingIncoming=1
ForeColorLocal=16711680
ForeColorRemote=16711872
ForeColorTime=16760832
AutoModeCharsToCheck=64
NonDisplayChar=.
AutoLiveModeScroll=1
ShowOnlyActiveConnections=0
HideLowerPane=0
HttpExtractOptions.Folder=
CaptureFilter=696E636C7564653A72656D6F74653A7564703A3830303000
DisplayFilter=00
WinPos=2C0000000000000001000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF020400003401000090060000F5020000
Columns=240000004E00010087000200D70003003C0004003C0005003C0006008F0007003C0008006900090062000A0030000B003C000C003C000D0054000E003E000F0031001000480011003C00120058001300580014004700150047001600
Sort=13
QQ2013协议分析
(二)TCPF
我们尝试把QQ的协议进行分类
文字聊天协议族(TCPF,TextChattingProtocolFamily):
它主要支持与其它QQ客户端进行文字聊天。
TCPF是建立在UDP协议之上。
UDP数据包中的第一个字符02为这个协议族的标识。
TCPF的服务器使用8000号端口,腾讯的QQ客户端软件一般从4000号端口开始尝试使用,但实际上,对客户端使用的端口号并没有限制。
目前的研究集中在TCPF上。
其它未知可能存在的协议族:
我们观察到QQ除了与TCPF服务器通信以外,还有与其它的服务器使用UDP进行通信。
目前我们观察到的服务器为 218.17.217.111:
8000。
客户端使用与TCPF不同的端口。
目前观察到的从客户端发出的包以06开头,而服务器返回的包则以01开头。
目前其具体作用未知。
我们注意到一个有趣的现象是,如果选择离线后重新上线,那么在发出登录包之前,这个通讯已经开始。
我们暂时把它命名为数据传输协议族(DTPF,DataTransferProtocolFamily)。
最新的研究发现,它传递的是QQShow的图片数据。
语音、视频聊天、文件传输:
目前还没有开始分析,尚未知道是使用UDP还是TCP协议。
下面说说我们关心的TCPF协议
TCPF是建立在UDP协议上的协议族,主要支持文字聊天功能。
TCPF是以请求-响应模式工作的。
也就是说,客户端发出一个请求,服务器端会给出一个相应的响应;服务器向客户端发送信息,客户端也会给服务器相应的响应。
请求和响应通过相同的序列号来进行配对(请求代码也应该相同)。
而且每种请求的发起方都是相同的。
TCPF包结构
对于TCPF包我们又把它分为5类:
1)、登录请求包(LIP,LogInPacket),它是由客户端向服务器发出登录请求的数据包。
2)、登录应答包(LRP,LoginReplyPacket),它是由服务器响应客户端登录请求的数据包。
3)、注销请求包(LOP,LogOutPacket),它是由客户端向服务器发出注销登录请求的数据包,服务器对这个包不作应答。
4)、客户端其它包(CSP,ClientSentPacket),它是由客户端向服务器发送的其它包。
5)、服务器其它包(SSP,ServerSentPacket),它是由服务器向客户端发送的其它包。
TCPF包头:
0)、所有TCPF包的前7个字节是包头,包头可以识别TCPF包的内容。
包头的格式为:
1)、第0字节:
TCPF包标识:
0x02。
2)、第1-2字节:
发送者标识。
如果是0x010x00,表明是由服务器发送。
客户端的标识与所使用的使用的QQ版本有关,如:
版本QQ2003(0808)的标识为0x0A0x1D。
具体的协议的格式与这个字段所标识的客户端版本有关。
目前我们以这个最新的0A1D版本来讨论。
3)、第3-4字节:
命令编号。
具体的命令编号含义在《QQ协议概述》(ProtocolOverview.rtf)中有描述。
如果这个字段是0x000x01,那么这是一个注销请求包。
如果这个字段是0x000x22,而发送者标识是0x010x00,那么这是一个登录应答包。
如果这个字段是0x000x22,而发送者标识是其它(例如0x0A0x1D),那么这是一个登录请求包。
其它的命令代码表明是其它包,我们通过发送者标识来区分它是CSP还是SSP。
4)、第5-6字节:
命令序列号。
客户端和服务器都有各自的当前发送序列号。
每初始发出一个指令的时候,使用当前的序列号,然后把当前序列号加一,如果超过0xFFFF,就绕回。
如果是响应对方发出的命令,则使用这个命令的序列号。
例如,客户端当前的序列号为0x1110,它向服务发送一个0x0016命令,它使用0x1110这个序列号,服务器收到以后,返回一个序列号为0x1110的0x0016命令响应。
下一次,客户端又发送一个0x0026命令,这一次它使用加一了的序列号0x1111,服务器也响应0x1111序列号的一个0x0026命令响应。
如果这是服务器要向客户端发送0x0017命令,它使用它自己的当前序列号,比如说0x2220,客户端收到以后,也响应一个序列号为0x2220的0x0017命令应答。
我们可以通过序列号来判断发出的指令是否已经得到了应答,如果没有,可以重发。
服务器对收到的命令的序列号顺序没有要求。
服务器也不会一定按照发出的顺序给予应答。
TCPF包尾:
所有的TCPF包都以0x03作为包尾。
QQ2013协议分析(三)0825touch1
1.1 0825touch1(0825)
有时候在抓包工具里可以看到两组本地4000端口发往服务器8000端口的数据,那是因为重定向的原因,不过貌似并非那么肯定,有时候重定向并非必须的,所以直接进入第二个包。
1.1.1 [2013/6/611:
01:
16:
524]发送
02
3259//版本号
0825//命令
5B31//包序号
QQ号//892844868
3537BB44//固定,QQ版本号不同则不同
030000000101010000663F//固定
00000000//固定
5A8519D1405E39B40DDA56E7160F0240[王超1] //临时钥匙A
下面是加密数据:
B570C10E75B86C270EDFE28EA1B709263F8AABFDE7B2135C2E73471CDB4F1BDFF03A5C8C78856EB0A68EBCA9767621A50138FBBC7E1442AFE7481D54421C57A2EC02C388B0D7F2DE447B9F892C7A8E3E7630A3E20673C59CFE37864E0AE1BC1684D34155F6F31ABF
[
001800160001fixdata0
0000043200000001000013E1fixdata1
3537BB44QQ号
00000000030900080001固定
未知/随机生成?
705F
F0FC0001003600120002000100000000
000000000000000000000114001D0102001902339DFE698C688F8BDCE1B75951182429EFD22ED70578A224
]
03包尾
1.1.1 [2013/6/611:
01:
16:
732]接收
02
3259
0825
5B31
3537BB44//QQ号码
000000
以下是加密数据,用发送的那个key_0825_0解
9F7678EBE06EC01E0B0929D4421C64A5
C4D4980BF9F83E8B390E2E9F7F969631
F54F83CCBB5BDC6722CF5CD51BAB12D4
AA90C824664BF8678197EF0CC34774DA
34952E2B38214DB2E92F2D5B147E5DBB
7C24FA25C45BFE39ABDA7943B473DC1B
C39CDB25EDEFA69A49AA1A0563E330A6
4577477714275BAB
03
[
FE// 服务器IP需要中转..。
。
。
其实根据接收的数据包大小就可以知道。
需要中转的话接收的数据包是135的长度,不需要的话是111的长度
0112
0038//0038的token38的10进制是56,下面56的长度后就可以是下一个命令了,这些数据在 0826包都需要
832BC8FBF46BDDECBEFF987996FEFA660E9085D1F10BF802ED404B05B412AE5CD76E059C3076254EAADD1861034751FB529E0FFCAFE3047C
0017000E0001//固定了
51AFFB85//这个是连接的时间2013-06-0611:
01:
25
7C80E7BE//偶的本机IP124.128.231.190
11C40000000C0016000200000000000900000000
705A56FB//中转的服务器IP112.90.86.251这里把解密出来的IP地址直接放到socket的IP设置那里就可以了
000000000000
]
r
QQ2013协议分析(四)0825touch2
索引
4
协议
UDP
本地地址
10.196.7.11
远程地址
112.90.86.200
本地端口
4000
远程端口
8000
本地主机
test
远程主机
服务名称
包
325{168;157}
数据大小
32,873字节 {11,454;21,419}
总大小
42,156字节 {16,158;25,998}
数据速率
0.2KB/秒
捕获时间
2013/6/814:
35:
13:
621
最后包体时间
2013/6/814:
37:
53:
042
Duration
00:
02:
39.421
进程ID
进程文件名
进程用户
加载MAC地址
远程MAC地址
本地IP国家
远程IP国家
1 112.90.86.200
1.1 0825touch2
1.1.1 [2013/6/814:
35:
13:
621]发送
原文
02325908253B433537BB440300000001
01010000663F000000000CBE6A514A04
D39F042E94E2E6C26601FD7080D9F4DE
40F25FB9791249B361AEE13E5F4A2B48
0E4E7C842FBC70E4806794E82B438765
47E31F61F24B688734E1A3748686E4F8
6BBC7BCA7C8D734F64B3C5A07AA2725F
99A9DEBB72EBF36610B4B0873D60C81F
CC41A833F0925420FA1D2C63A5B77AB9
1C2F521B3E471ACFD5B803
解密
02//包头
3259//版本号
0825//命令
3B43//包序号
3537BB44//QQ号码:
892844868
030000000101010000663F//固定
00000000
0CBE6A514A04D39F042E94E2E6C26601[王超1]
FD7080D9F4DE40F25FB9791249B361AE
E13E5F4A2B480E4E7C842FBC70E48067
94E82B43876547E31F61F24B688734E1
A3748686E4F86BBC7BCA7C8D734F64B3
C5A07AA2725F99A9DEBB72EBF36610B4
B0873D60C81FCC41A833F0925420FA1D
2C63A5B77AB91C2F521B3E471ACFD5B8
[
001800160001
0000043200000001000013
E13537BB44
000100000309000C0001705FF02D01B73C30AE01003600120002000100000000000000000000000000000114001D0102001903DC12300FFD4C38312D92A7F753848D127445EB0D6DE1A6CE
]
03
1.1.2 [2013/6/814:
35:
13:
669]接收
原文
02325908253B433537BB440000000D0D
C36D6481B7CB9FB2A536BDF44409858A
2A0CCAC3DDB3D87A230257918CB646CB
88D2F5900FF4EFF261526B5EE1B33213
B23C2028FB99FEDB0C785B9CF80B4BCB
95478495058E2FED3B696783BF0DFEF5
993CE21B771330887FDD669CD6CA03
解密
02
3259
0825
3B43
3537BB44
000000
0D0DC36D6481B7CB9FB2A536BDF44409858A
2A0CCAC3DDB3D87A230257918CB646CB
88D2F5900FF4EFF261526B5EE1B33213
B23C2028FB99FEDB0C785B9CF80B4BCB
95478495058E2FED3B696783BF0DFEF5
993CE21B771330887FDD669CD6CA
[
00
0112
0038
96439BC3D0923C9F63DAE3692ACFBDC1C6DF186F0B1C70B290A91E6625459E3D89242CC1FA2029D8327F4DA0028890B46CB7CB1B1378E55A [王超2]
0017000E0001//固定,每次都一样
51B2D0AF//连接的时间
7C80E7BE//偶的本机
0FA0//端口
0000//成功
]
03
[王超1]key_0825_0
[王超2]。
token_0825_0e
QQ2013协议分析(五)0826Loginverify
1.1 0826Loginverify
1.1.1 [2013/6/814:
35:
13:
675]发送
原文
0232590826020E3537BB440300000001
01010000663F00000000D1789D1467F6
A3BA916CA5C8681F23CF07F89434427E
FB4286ADC863CEE97EDA2A3F69C95EFA
7C98B9DC028296700392D5DFA506595F
69F06B2CAAF514EB6ACA9E1AB1B51375
1645BD3C74F29961242B0B730A890FF4
451B4B94835E1BED63A2FAD03D58552A
17EDBD9E682966F096C8B7351EDB5CEC
2EAF01D35CCC219C77B4A0BA25F12541
7C7A5E609BB9AE98C7D480A21FD5CE42
11FF5FA190A0D66A9B6FE634C98ACAC4
9211266A208BF4D0595CF6F16514001D
F0553FA8752CF64B96E5FBFFC7AEFA9D
CA5964F7F14937B6A5DCCF7842399A70
2046A69DAA4DD9795587864493CF4644
96CB1D759D6A0FC1