C114门户论坛百科APPEN| 举报 切换到宽版

亚星游戏官网

 找回密码
 注册

只需一步,快速开始

短信验证,便捷登录

搜索
查看: 3158|回复: 1

[通信前沿] QQ下载和分析示范 [复制链接]

军衔等级:

亚星游戏官网-yaxin222  少将

注册:2005-1-192
发表于 2005-7-5 15:36:00 |显示全部楼层
QQ下载和分析示范

     

  

来源:协议分析论坛   稿件提供:jeff_yecn   编辑:  浏览:168人次



需要App:

PC 上: QQ2003(0808)或最新版本。

windump

OS X上: showUDP

calcMD5

qqDecrypt

准备工作:

把QQ的密码改为 123456。目的是以后分析方便。

把PC上可能的网络通讯App都关闭,避免其它数据干扰大家的分析。

截获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的文件。这个文件是一个文本文件,你可以用text
Edit等编辑器来打开它。里面是分为一个包一个包的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 dig
est保存到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协议的细节。

后续数据包的解开:

对于从客户端发出的数据包,前7个字节是包头,接着4个字节是你的QQ号码。后面
到包尾(不包括包尾03)是解密的包数据。大家把它拷贝到一个文件。比方说例子
中我找了个0x0016命令的数据包,把它的数据放到了sendMsg.hex中。然后运行:

qqDecrypt sendMsg.hex sessionKey.hex

输出的结果就是它的真实数据。大家把它保存到sendMsg.decrypt中。它是这样的:


01 82 5D 90 0E C9 37 04

0A 1D 01 82 5D 90 0E C9

37 04 9D DD F7 1A F2 B0

96 CF 57 73 5A 56 3B 2C

D6 ED 00 0B 3B F0 3F 51

24 0E 00 CC 00 00 00 01

00 00 00 00 01 74 72 79

69 6E 67 20 00 09 00 00

00 00 86 02 CB CE CC E5

0D

你会发现其中有这样的一些魔术般的数字:01 82 5D 90,转换成十进制就是25320
848。我的QQ号码。0E C9 37 04,转换成十进制就是248067844,macres的QQ号码。
74 72 79 69 6E 67,转换成ascii字符就是trying。根据前面的操作记录,我曾经
试着向macres发送了一个trying的消息,很明显这个数据包就是这个发送消息的数
据包。

现在大家知道,0x0016是发送消息的命令。而且,大家对其中的一些内容也有些了
解了。

CB CE CC E5是GB18030的“宋体”。显然,它表示的是所使用的字体。关于18030的
码表,可以在http://people.netscape.com/ftang/testscript/gb18030/gb18030.
cgi中查到。前面的一些,分别代表字号,字型等,通过试验就可以了解。

大家就是这样逐步知道这些数据包内容的含义的。。。

举报本楼

本帖有 1 个回帖,您需要登录后才能浏览 登录 | 注册
您需要登录后才可以回帖 登录 | 注册 |

手机版|C114 ( 沪ICP备12002291号-1 )|联系大家 |网站地图  

GMT+8, 2024-11-15 10:17 , Processed in 0.145989 second(s), 15 queries , Gzip On.

Copyright © 1999-2023 C114 All Rights Reserved

Discuz Licensed

回顶部
XML 地图 | Sitemap 地图