|
需要软件:
PC 上: QQ2003(0808)或最新版本。 windump
OS X上: showUDP calcMD5 qqDecrypt
准备工作:
把QQ的密码改为 123456。目的是以后分析方便。
把PC上可能的网络通讯软件都关闭,避免其它数据干扰我们的分析。
截获QQ与服务器的通讯数据:
我们在windows的命令行输入:
windump -w pc.dump -s 0 udp
由于我们目前只关心QQ使用UDP协议通信的部分,所以我们只选择获取UDP数据。
然后启动QQ,执行一些我们所要分析的操作。
在命令行按ctrl+C,中断截取数据的操作。
记录下我们所对QQ做的操作。包括每一步操作的顺序,系统反馈和要我们输入的信息等等。
把当前目录下生成的pc.dump文件传送到Mac上准备做进一步分析。
数据的预处理:
我们在sample目录底下已经有一个这样的pc.dump。我们在开始分析前,需要对数据进行一些预处理,以方便以后的分析。
首先,我们要把这个文件转化为方便阅读的文本文件格式。我们使用:
showUDP pc.dump > pc.ascii
这时会生成了一个名为pc.ascii的文件。这个文件是一个文本文件,你可以用textEdit等编辑器来打开它。里面是分为一个包一个包的UDP数据的内容。我们可以简单地判断一下,把一些与QQ无关的数据删除掉。然后我们保存下这个文件。在sample目录里面,你也可以看到这个文件。
我们把这个文件进一步删除一些我们暂时不感兴趣的内容。比如,我们只留下以02开头的数据包。这些数据包是我们称为TCPF协议族的通信。它构成了QQ文字聊天功能的主体。我们把这个文件保存为tcpf.ascii。这是我们下一阶段的分析重点。
下面,我们要准备一些解密的密钥。
首先,在tcpf.ascii中,第一个包应该是以02 0a 1d 00 22开头的登录数据包。我们把它的随机密码部分(应该是16个01拷贝到一个空白的存文本文件中,并把它保存为loginKey.hex。然后我们把后面的登录包数据部分(不包括包尾的03),保存为loginData.hex。
然后我们执行:
qqDecrypt loginData.hex loginKey.hex
这个程序的作用是使用loginKey.hex文件的内容作为密钥去解密loginData.hex文件中的数据。
如果解密成功的话,程序输出的最后一块数据就是解密后的结果。我们把这块数据保存为loginData.decrypt。这时我们就有了QQ登录数据包的真实数据。
下面,我们还要制作一个文件,它里面是我们QQ密码的ascii数值。对123456的密码,应该就是31 32 33 34 35 36。我们的sample里面有这个文件,文件名为pwd.hex。
然后,我们还要制作我们密码的md5 digest。这可以运行:
calcMD5 pwd.hex
这个命令会计算pwd.hex文件里面数值的Md5 digest。我们把输出结果中的md5 digest保存到pwdmd5.hex中。然后,我们还要计算它的md5 digest:
calcMD5 pwdMD5.hex
把计算的结果部分保存到pwdmd5md5.hex文件中。我们可以使用它来作为密钥解密登录请求的应答数据包:
我们在tcpf.ascii文件中找到以02 01 00 00 22开头的数据包,把它的数据部分拷贝到loginReplyData.hex中,然后运行命令:
qqDecrypt loginReplyData.hex pwdmd5md5.hex
输出的结果就是登录响应数据包的真实数据。第一个数字应该是0,后面的16个数值就是以后通讯所使用的密钥。我们把它保存到名为sessionKey.hex文件中。
下面我们就可以用sessionKey.hex逐个解开这些以后的数据包,凭借着想象力和不断的尝试,我们可以越来越了解QQ协议的细节。
上一篇:TCPDUMP中文手册
下一篇:QQ协议概述
|