由于QQ使用的通信协议细分了发送消息到服务器和从服务器接收消息为两种不同格式,所以需要分开讨论。

所需基础知识:
01、对TCP/UDP协议有简单了解。
02、了解基本的Sniffer软件使用方法。
03、对QQ登录过程有了解。可以查看rgbsky帖子:http://bbs.pediy.com/showthread.php?t=62660&highlight=QQ+%E5%8D%8F%E8%AE%AE

软件工具:
Sniffer Pro:              抓取QQ登录及聊天数据包。
QQDebugger.exe:   解密QQ登录过程,会话密钥,聊天内容工具。
SmartConvert.exe:  数据文本转换工具,用于查看聊天内容。

这些工具包含在附件中,都是网上的朋友发给我的。在此对这些朋友表示感谢!
有了这些工具可以手动解密查看聊天内容了,要实现自动分析你必须写代码了。


QQ发送聊天信息一般使用的是UDP协议,源端口为4000,目的端口为8000。消息在发出前使用"会话密钥"和改进的TEA算法进行加密。试验发现如果一台PC上有两个QQ登录则一个使用4000端口号,另一个使用4001端口号。


面对如潮水般涌来的数据包,要解密QQ发送出去的消息必须解决两个问题:
01、哪种数据包是包含发出消息的数据包。必须有个判据。
02、必须知道加密该数据包的"会话密钥"是什么。


对于第一个问题我目前的解法是:
根据数据包的协议类型,目的端口号,以及QQ命令来判断。
如果协议类型是UDP协议,目的端口号为8000,QQ命令为:0016,我们认为该数据包包含有发出的聊天信息。通过分析CAP文件中的协议头很容易得到数据包的协议类型和目的端口号等信息。至于QQ命令,是QQ协议的一个部分没有加密。

一般包含发送聊天内容的数据包格式为:
0000:        02 ->表示QQ数据包的起点。
0001 - 0002: 为QQ客户端版本号对于QQ2008为:1221。
0003 - 0004: 就是我们所说的QQ命令。根据试验发现命令为0016表示该包包含发出聊天记录的信息。
0005 - 0006: 2B的序列号。
0007 - 000A: 4B的发送消息的QQ号码。
000B - 倒数第二字节: 用改进的TEA算法加密的包含聊天内容的数据包。(里面有很多丰富的信息如接收信息的QQ号码IP地址等)
最后一个字节:03 ->表示该数据包结束标志。

如图01,就是一个典型的发送聊天内容的数据包。(★里面包含丰富的信息,大家可不要来黑我!^_^。里面QQ号也是实验用的,平时不用。)


由于发送数据包有固定的格式,前面我们讨论过从Sniffer包头中有整个数据包的大小,所以很容易得到加密的数据块。现在就是怎样解密的问题了。


前面说过聊天内容是用"会话密钥"加密而成的。这里所说的"会话密钥"是在QQ客户端登录系统时在第6次认证时由服务器发回给客户端的。根据试验发现客户端和服务器进行第六次认证时使用的QQ命令是:0022,所以目前的问题就是我们必须解密从服务器发来的QQ命令为0022的数据包。但是很不幸,聪明的腾讯公司使用了用户密码(就是大家平时输入的密码)的两次MD5摘要得到的16B信息对该数据包进行加密。★因此在目前情况下,要想解密抓到的包含聊天内容的数据包必须有用户密码。如果有朋友有其他办法也请不吝赐教!

我们的试验比较简单,因为大家总是知道自己的QQ密码的。这时就要请出我们的第二个工具QQDebugger.exe了。这个小程序是用C#写成的需要.NET 2.0环境才能运行。你可以输入自己的QQ密码让他帮你计算出两轮MD5摘要后的结果。然后用这个结果来解密包含会话密钥的数据
包。包含会话密钥的数据包如图02。不过要特别注意,解密的时候应该去掉数据包中首尾无用的QQ命令,序列号等信息。如果解密成功在QQDebugger的输出窗口可以看到解密内容,如果解密失败QQ的TEA算法可以识别,因而不会看到任何内容。

解密后的信息第一个字节应该是:00。后面的16字节是"会话密钥"。

有了会话密钥就可以拷贝到上端的密钥窗口中。再把发送消息数据包(注意去掉首尾的标志信息)拷贝到输入窗口,点击解密。

如果成功可以看到输出窗口有一堆解密的数据。如图03就是使用会话密钥解密的一段包含聊天记录的数据包。在密钥窗口隐藏了4B的会话密钥内容。输入窗口是去掉首尾后的加密数据内容。输出窗口是解密后的数据包。该数据包的最前4B是发送消息的QQ号码,后面隐藏的4B是接收消息的QQ号码。下面高亮显示的是聊天信息。

拷贝这些聊天信息打开:SmartConvert.exe这个小程序可以自动转换成易读的文本。
★发出信息的起点偏移量在解密数据包中是固定的,结束部分都是20 00。


补充说明:腾讯作为一家老牌的技术企业研发能力还是非常强。所使用的协议也很丰富,并且还在随着版本的升级不断更新。我分析的时间和内容还很有限,希望各位高手能够指出不足之处,非常感谢!

上传的附件 两个工具软件.rar