QQ分析
QQ版本升级比较频繁,每次升级都对应着协议的变化或者加密方法的更改。针对QQ的分析网上资料林林总总,对不同版本都有一定的分析,但都没有彻底的分析。这里总结了一部分资料,加入了一点点我自己针对QQ抓包后的分析。
QQ功能分析:
登陆:
范冰冰遭袭胸
首先QQ客户端服务器发送一个请求登录令牌的数据包.服务器返回登录令牌.这个令牌是在服务器端生成的.和客户端的IP地址,版本信息等数据相关.以后会用到这个令牌去进行其他操作. 在QQ通信中用户必需要登录后才可以进行互相发送信息等。QQ的登录是很关键的,大家所看到的用户在线 ,并不是用户的QQ一直连接着服务器,而是定时发送消信给服务器,证明自己还连着线,如果超出时间QQ 就认为用户已经掉线了。
登陆QQ服务器的时候,服务器会保留你的保留IP地址和端口号信息,并在你的好友的QQ进程中进行列表显示,然后两个进程就可以通信了。
QQ连接服务器的方式,它主要有3种方式:1.通过本机UDP:4001开始的端口连接服务器UDP 8000端口;2.通过本机任意端口连接服务器80端口;3.通过通过本机任意端口连接服务器443端口。
QQ使用UDP端口8000做为主要的通讯端口,并提供HTTP(80)和HTTPS(443)端口做为辅助的通讯方式。 登陆时,QQ首先尝试去连接服务器的8000端口,如果不通的话就会依次去尝试80和443端口。
吴虹飞死时照片登录过程中的包(均是UDP传输)分析:
合肥土特产1. 0x0091 Touch包
该数据包是QQ客户端登录时发送的第一个包,它的作用在于测试远程服务器是否能够正常响应,根据我们的抓包分析,对于不同的QQ号码段,提供服务的QQ服务器是不相同的,对于QQ会员有专门的QQ会员服务器。在对QQ客户端的回应包中,如果连接的服务器不对该 QQ号码提供服务,它会返回另外一个服务器地址,让客户端重新连接该地址。
2 0x00BA获取验证码
因为部分QQ号码可能存在异地登录,或者QQ号码被盗发送大量垃圾信息,或者用了挂机软件或者挂机网站挂机,腾讯服务器检验到这些非正常的QQ情况时即会要求输入验证码。
3 0x00DD密码验证
该数据包的作用是将本地QQ的密码发送给服务器端进行验证。(密钥为QQ密码,算法:两次MD5)
4 0x00E5数据校验
该数据包主要用于校验前几个数据包的Token数据,如果通过验证,服务器端会返回本次登录的时间和IP地址等信息。
5 0x00E3数据校验 0x00E3发送包
6 0x0030是该数据包是QQ登录流程的最后一个数据包,主要用于向QQ客户端返回会话密钥(Session Key),该会话密钥由服务器端生成,目前不知道其生成算法。但是估计和QQ号码,登录IP,登录时间以及QQ密码有关。
文字聊天:
文字聊天协议族(TCPF, Text Chatting Protocol Family):它主要支持与其它QQ客户端进行文字聊天。TCPF是建立在UDP协议之上。UDP数据包中的第一个字符02为这个协议族的标识最后的字符是03。TCPF的服务器使用8000号端口,腾讯的QQ客户端软件一般从4000号端口开始尝试使用,但实际上,对客户端使用的端口号并没有限制。目前的研究集中在TCPF上。QQ的聊天通讯信息是加密的,每次登陆时QQ客户端会获取一个会话密钥,以后的通讯数据都会通过此密钥来进行加密。
QQ 的文本聊天消息和基本控制命令通过TCP 和UDP 传输,因此对于TCP 和UDP 这两类数据包都需要进行识别其识别方法也不同。以下是对于两者不同的识别方法:
1) 对于 UDP 传输的数据包,系统设计的识别方法是将首字节为0x 02 且同时满足结尾字节是0x 03 的数据包认为是QQ 的文本或者控制消息数据包。
2) 对于 TCP 传输的数据包,系统设计的识别方法是在满足首两字节长度等于载荷长度的同时此后的载荷部分首字节为0x 02 且结尾字节为0x 03。经分析认为此类数据包是QQ 的控制命令数据包。
语音视频聊天:
QQ的语音聊天服务通过服务器建立连接交互对应的IP地址联系端口,客户端之间根据网络状况决定采用点对点直连或服务器转发的发送方式实现语音聊天会话。
语音聊天会话的连接通过客户端与服务器之间的基本控制命令交互实现,整个会话过程的主要流量分布在两个客户端之间通信的实际语音数据通信流中。根据实验,得到语音聊天会话数据流中的数据包只有两种固定的载荷首字节这一载荷特征。
对于整个会话中此两类数据包基本功能的分析:
1.首字节为 0x 00 的数据包具有比较固定的包长特征,一般出现的是126 字节和110 字节这两种包长的数据包。整个语音会话流的前若干个数据包一般都属于这类特征的数据包,同时具体的会话数据传输过程中也偶尔出现2~3 个此类数据包。根据其出现位置判断此类数据包为携带会话流状态维护信息的数据包。
2.首字节为 0x 03 的数据包的数量较多,大部分长度特征不明显,且没有内容特征。在会话刚刚建立时期的此类数据包有固定的长度和非明文的固定字段特征(如图)。在这些字段之后出现的都是利用明文的SIP 命令来交换信息的数据包,通过这些SIP 命令能够确认双方的连接,采用的编码方式等。在完成这些信息交互之后出现的具有此载荷特征的数据包连续出现、长度相近,因此判断其为实际的语音内容数据包。
除了首字节的载荷特征外,还发现在两个客户端建立会话的时候,会话数据包的包长有明显的特征。在会话建立的初期,会话流中的数据包都是载荷首字节为0x 00 的数据包。两个客户端之间的交互符合下面图中所示的规律。(1,2 分别指代客户端1 和客户端2,客户端1 发起会话请求):
1->2 126
1->2 110
料理机食谱>韩国av女星最漂亮排名1->2 110
2->1 126
2->1 126
2->1 110
在完成了上述的数据流建立的过程之后,QQ 利用SIP 协议的明文消息在这个流中协商所传输的数据的编码等特征。
QQ 语音聊天会话流中用以建立数据传输的SIP 协议字段可以被用以作为协议识别的特征。同时QQ 语音聊天流基本采用UDP 实现传输,识别的对象是UDP 数据包。
实现识别算法的过程中必须注意单纯的语音聊天和视频聊天之间的区别。视频聊天的INVITE 数据包中包括m=video 和m=audio 两个字段,语音聊天则只包含m=audio,除此之外两者的整个SIP 连接建立过程中的其他数据包和INVITE数据包的其余部分的内容基本一致,而且没有明显用以区分的特征。因此在本系统顺序匹配各个应用程序特征的基础上,通过对于QQ 的视频聊天服务类型的优先匹配,通过这样的设计使得在匹配QQ 语音聊天流的过程中避免了对于QQ 视频聊天流的区分问题。
以下是用以识别QQ 语音聊天流的几个特征:
1) 从载荷的第 20 个字节开始出现“INVITE sip”字段;
2) 包含有“o=QQuser”字段,可以说明此 SIP 数据流是由QQ 建立的而不是别的应用程序;
包含有“m=audio”字段,表明后续的聊天会话流中传输了语音数据。
文件传输:
    P2P方式传输文件。使用TCP与服务器间建立联系,文件传输过程中每成功传输一个子文件就会有一次联系,初步分析是用TCP来保证文件可靠性(个人观点)。QQ的文件传输并不进行加密,支持UDP和TCP两种方式,通讯端口由双方协商确定。网络监控(超级嗅探狗)可以直接获取QQ文件传输内容。
P2P中内外网连接问题:如果使用TCP就没什么好说了~由内网向外网连接,只要能够连接上进行握手了,消息就可以畅通无阻的进行发送了.如果使用UDP的话,就是使用的打洞技术了,只要通道打通了,发送消息基本和TCP没什么区别,要做的只是维护消息的完整性而已.
文件传输方式: A 要向 B 发送一个文件,于是发出一个文件传送请求。服务器收到这个文件传送请求后,转发给 B ,同时或者在 B 应答后,将 A 的 IP 地址同时发送给 B 。 B 这个时候就得到了 A 的真实 IP 。这里的 IP 是你的本机 IP 。也就是说,如果 A 处在内网, B 得到的地址就是一个内网地址。 B 得到了 A 的地址之后,就会尝试去连接 A 。如果 B 也处于内网,那么,显然 A 跟 B 之间的连接是无法建立的。这个时候,客户端就会请求服务器进行文件中转。因为服务器具有公网 IP ,处在内网的 A 跟 B 都是可以连接到服务器的,
于是, A 跟 B 的文件传送就通过服务器中转的方式,顺利进行。(注:服务器文件中转使用 443 端口),“ 穿透内网 ” 的原理就是这样的。
聊:
天肯定是TCP/IP,可靠的链接,通过ACK标识发送数据包,需要保证数据不丢失传送文件是UDP,非可靠链接,和语音,视频是同原理的