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

亚星游戏官网

 找回密码
 注册

只需一步,快速开始

短信验证,便捷登录

搜索
查看: 8717|回复: 2

[通信前沿] 如何截获QQ的数据包 [复制链接]

军衔等级:

亚星游戏官网-yaxin222  少将

注册:2005-1-192
发表于 2005-7-5 15:35:00 |显示全部楼层
如何截获QQ的数据包?

     

  

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



首先,你需要安装有VPC,这样你才能运行PC版的QQ。其次,你要有你机器root用户
的权限。

然后,你启动VPC,注意先不要登录QQ。

打开终端窗口。输入su命令,在提示里面输入root用户密码,进入root用户。这时
候提示符应该是个#号。

以root身份运行终端命令:

tcpdump -w dump.dat -s 0 udp

这个命令的作用是把网络上传输的数据截获下来。

-w dump.dat 意思是把输出存到dump.dat文件下。

-s 0 是指定保存完整的包,如果指定一个非零的数值,那么将会保存这个数值的
长度。

udp 是指只保存UDP协议的数据(Tencent文字通讯所采用的协议)。

(你有PC的话,也可以使用windump来截获你PC上的QQ的数据包。windump是window
s下的命令行程序,它的使用参数和tcpdump完全一样。你可以在 http://windump.
polito.it/ 中下载)。

然后大家启动VPC里面的QQ,实行大家所想要研究的有关操作。完成以后,会到终端
窗口,按ctrl-c中断tcpdump的运行。这时,在当前目录下就有dump.dat了。

然后,可以用hexedit打开这个文件,观察一下大家dump的结果。

里面是连接着的数据,是按照“QQ包->UDP包->IP包->链路层封装->tcpdump的文件
格式”的层次结构进行封装的。

下面是一个数据片段:

0008: A1 B2 C3 D4 00 02 00 04

0008: 00 00 00 00 00 00 00 00

0016: 00 00 FF FF 00 00 00 01

0024: 3F 44 32 28 00 0C 2D AF

0032: 00 00 00 96 00 00 00 96

0040: 00 06 25 60 F4 C0 00 03

0048: 93 A7 09 38 08 00 45 00

0056: 00 88 8E 53 00 00 80 11

0064: 9D 9D C0 A8 01 66 CA 68

0072: 81 FD C2 34 1F 40 00 74

0080: C3 AD 02 08 16 00 22 00

0088: 10 01 82 5D 90 6F 30 FD

0096: 96 3B B1 0F E5 FF 8E 3E

0104: 4B 38 E2 86 E1 8A F7 C8

0112: CA B2 01 76 B6 ED 9E 2B

0120: 97 FD B9 7F 23 B2 09 02

0128: 71 22 94 E3 4B E8 E2 8F

0136: FD FF 02 87 83 0B 32 57

0144: 73 91 7F EF 7B 7A 60 CB

0152: 44 A4 B5 CA 13 19 F6 CE

0160: D5 EC 2F D5 8A 88 22 48

0168: 14 4E 44 08 18 37 9D 8D

0176: AA 42 9C 88 A4 AB 44 0D

0184: 4B 23 74 AC ED 03 3F 44

0192: 32 29 00 06 D0 EA 00 00

0200: 00 68 00 00 00 68 00 06

0208: 25 60 F4 C0 00 03 93 A7

0216: 09 38 08 00 45 00 00 5A

0224: 8E 54 00 00 80 11 B2 F9

0232: C0 A8 01 66 3D AC F9 8A

0240: C2 35 1F 40 00 46 23 2C

0248: 05 01 00 01 82 5D 90 01

0256: 1F 02 16 08 00 00 00 00

0264: 00 00 00 00 00 00 00 00

0272: 00 00 00 00 01 02 5E FD

0280: 00 01 01 00 00 00 00 42

0288: 62 0B 9F 27 F3 D9 FB 05

0296: C6 54 E3 7F 01 E4 B4 01

0304: 00 00 00 00 04 00 3F 44

0312: 32 29 00 06 F6 48 00 00

0320: 00 B3 00 00 00 B3 01 00

0328: 5E FF FF FA 00 06 25 60

0336: F4 C0 08 00 45 00 00 A1

0344: 00 4C 00 00 04 11 F9 CE

0352: 18 C0 B3 77 EF FF FF FA

0360: 04 09 07 6C 00 8D 91 43

0368: 4D 2D 53 45 41 52

Tcpdump文件格式:

首先大家看到的是最外面的一张包装纸:tcpdump的文件格式。它的格式是这样的(
详细的描述可以参考:libpcap-format的资料):

文件头 | 数据包头 | 链路层数据 | 数据包头 |链路层数据| ....

首先,每个文件以一个24字节长的文件头开头,大家需要知道的是最前面的四个字
节是:A1 B2 C3 D4,如果不是这个标识,那么就不是tcpdump生成的数据文件(如
果是PC上的windump生成的文件,那么则是D4 C3 B2 A1,以表明PC上的endian不同
,大家这里不用关心这个区别)。

跳过这24个字节,下面就是以“数据包头|链路层数据”为一组的这样一组组的数
据。数据包头不是网络上真正传输的数据,它包含的信息主要是截获这个包的时间
等信息。它的长度16个字节。大家关心的是第8-11和9-15字节(大家按编程的习惯
,把第一个字节称为第0字节,下同)。前者表明后面的链路层数据包在文件里面的
长度,后者表明它的实际长度。两者可能不同是因为可能存在截断的情况。由于我
们使用了-s 0参数,所以他们应该是相同的。从数据包头结束,到长度指明的字节
数为止,是实际在网络中传输的链路层数据包。然后,就是下一个数据包头。这样
,大家就可以逐个把tcpdump文件的封装去掉,获得一个一个实际在网络中传输的数
据包了。例如,大家忽略文件头,从第24字节开始的3F 44 32 28 ...就是数据包,
数据包的第8-11字节:00 00 00 96就是这个后面数据链路层数据包的长度。也就是
说,从40字节开始00 06 25 60...的150(0x96的转换成10进制)个字节就是实际网
络传输的链路层数据包。然后,大家在第190(40+150)字节的位置又看到了3F 44
32 29...的下一个数据包头。

大家这样就获得了一个个的链路层数据包。大家上面例子中的第一个是:

0000: 00 06 25 60 F4 C0 00 03

0008: 93 A7 09 38 08 00 45 00

0016: 00 88 8E 53 00 00 80 11

0024: 9D 9D C0 A8 01 66 CA 68

0032: 81 FD C2 34 1F 40 00 74

0040: C3 AD 02 08 16 00 22 00

0048: 10 01 82 5D 90 6F 30 FD

0056: 96 3B B1 0F E5 FF 8E 3E

0064: 4B 38 E2 86 E1 8A F7 C8

0072: CA B2 01 76 B6 ED 9E 2B

0080: 97 FD B9 7F 23 B2 09 02

0088: 71 22 94 E3 4B E8 E2 8F

0096: FD FF 02 87 83 0B 32 57

0104: 73 91 7F EF 7B 7A 60 CB

0112: 44 A4 B5 CA 13 19 F6 CE

0120: D5 EC 2F D5 8A 88 22 48

0128: 14 4E 44 08 18 37 9D 8D

0136: AA 42 9C 88 A4 AB 44 0D

0144: 4B 23 74 AC ED 03

链路层数据包:

下面大家要撕去链路层数据包这个第二层包装纸。链路层数据包格式是和传输的方
式有关的:如果大家是在局域网里面共享上网,那么一般是用称为RFC894以太网协
议,少数情况下也会是RFC 1042的802.3协议。如果你用Modem拨号上网,那么可能
会是RFC 1055的SLIP协议,如果是用ADSL,那么将会是RFC 1548的PPP协议。

链路层数据对大家来说意义不大,大家要做的是剥去这层包装纸而已。

RFC894/RFC1042/RFC 1548:

这三种协议的形式都是:

包头|IP数据包|(包尾)

对RFC894,包头是14字节;RFC1042,包头是22字节;RFC 1548,包头是5个字节。
大家跨过这些字节,就是IP包的数据了。包尾如何并不要紧,因为IP包的内容本身
会告诉大家它的长度。

在上面的链路层数据包中,大家跳过14个字节,第14字节以45 00 00 88开始的就是
IP包的数据。其它的协议也可以这样处理。

RFC 1055:

IP数据包被封装在一对的0xc0字符中间。但是,由于数据包中间就不能有0xc0字符
,所以原来的0xc0字符被其它代替了,大家要把它还原。方法是搜索这个数据包,
把0xdb 0xdc转换为0xc0;0xdb 0xdd转换为0xdb。比较麻烦,所以,最后不要使用
它来截取数据。

IP包的第2-3字节是它的长度,上面大家看到的第14字节开始的IP包,它的长度就是
00 88。也就是136个字节。所以,从14字节开始的136个字节就是IP数据包。这样,
大家就剥去了链路层的包装纸,获取了IP包。

大家上面的例子的第一个IP包是:

0000: 45 00 00 88 8E 53 00 00

0008: 80 11 9D 9D C0 A8 01 66

0016: CA 68 81 FD C2 34 1F 40

0024: 00 74 C3 AD 02 08 16 00

0032: 22 00 10 01 82 5D 90 6F

0040: 30 FD 96 3B B1 0F E5 FF

0048: 8E 3E 4B 38 E2 86 E1 8A

0056: F7 C8 CA B2 01 76 B6 ED

0064: 9E 2B 97 FD B9 7F 23 B2

0072: 09 02 71 22 94 E3 4B E8

0080: E2 8F FD FF 02 87 83 0B

0088: 32 57 73 91 7F EF 7B 7A

0096: 60 CB 44 A4 B5 CA 13 19

0104: F6 CE D5 EC 2F D5 8A 88

0112: 22 48 14 4E 44 08 18 37

0120: 9D 8D AA 42 9C 88 A4 AB

0128: 44 0D 4B 23 74 AC ED 03

IP包

IP包是网络上传送的与传输线路无关的数据包,也是大家开始需要真正关心的数据
。IP包的格式是:

IP包头|IP包数据(大家这里就是UDP数据包)

IP包头,除了大家刚才说的包长度(第2-3字节)以外,还有几个重要的信息是大家
所需要关心的:

第12-15和第16-19分别为源和目的IP地址。它用四个字节来代表一个IP地址,把每
个字节转换成十进制,就是大家熟悉的IP地址。比如,上面的源IP地址:C0 A8 01
66就是192.168.1.102,这是我局域网的IP地址,所以,这是一个从我的机器上发
出的包。目的地址是CA 68 81 FD就是202.104.129.253。从后面大家对QQ数据包的
了解大家知道这是一个发往服务器的包,所以大家就获得了一个QQ服务器的IP地址
。(注意,并不是全部发出的包都是发往服务器的!)

如果,找到一个原来不知道的服务器,那么是一个很重要的发现。

第0个字节,高4位为IP的版本号,低四位为IP包头的长度。比如说,大家上面的数
据包第一个字节为45,它的高4位为4,表明它是大家通常所说的IPv4协议,低四位
为5,表明IP包头的长度为5X4=20字节(头的长度是以四字节为单位的)。这样表明
从第20字节开始就是IP包的数据部分,也就是UDP包的内容了。这样大家可以剥离出
UDP包:

0000: C2 34 1F 40 00 74 C3 AD

0008: 02 08 16 00 22 00 10 01

0016: 82 5D 90 6F 30 FD 96 3B

0024: B1 0F E5 FF 8E 3E 4B 38

0032: E2 86 E1 8A F7 C8 CA B2

0040: 01 76 B6 ED 9E 2B 97 FD

0048: B9 7F 23 B2 09 02 71 22

0056: 94 E3 4B E8 E2 8F FD FF

0064: 02 87 83 0B 32 57 73 91

0072: 7F EF 7B 7A 60 CB 44 A4

0080: B5 CA 13 19 F6 CE D5 EC

0088: 2F D5 8A 88 22 48 14 4E

0096: 44 08 18 37 9D 8D AA 42

0104: 9C 88 A4 AB 44 0D 4B 23

0112: 74 AC ED 03

UDP包

UDP包是多数即时通讯App采用的协议。它的格式是:

UDP包头|UDP包数据(这里就是TencentQQ协议包)

UDP包头是固定8个字节。

第0-1字节是源端口号,第2-3是目的端口号。一般,大家客户端的端口号可以随便
选取(有资料说是4000,但是实际发现,新版的QQ已经是随便选取,没有限制了)
。从上面的UDP包,大家从以前IP包的信息知道是大家发送出去数据包,所以目的端
口号就是服务器所使用的端口号。这里是1F 40,也就是8000号端口,目前还没有发
现使用其他端口的,所以,如果发现有服务器使用其他端口,也将是一个很重要的
信息。

第4-5字节是UDP包的长度,这不是很重要,但是也可以用它来检验一下大家的剥离
过程有没有错误。

大家去除掉头8个字节,剩下的就是QQ协议包了:

0000: 02 08 16 00 22 00 10 01

0008: 82 5D 90 6F 30 FD 96 3B

0016: B1 0F E5 FF 8E 3E 4B 38

0024: E2 86 E1 8A F7 C8 CA B2

0032: 01 76 B6 ED 9E 2B 97 FD

0040: B9 7F 23 B2 09 02 71 22

0048: 94 E3 4B E8 E2 8F FD FF

0056: 02 87 83 0B 32 57 73 91

0064: 7F EF 7B 7A 60 CB 44 A4

0072: B5 CA 13 19 F6 CE D5 EC

0080: 2F D5 8A 88 22 48 14 4E

0088: 44 08 18 37 9D 8D AA 42

0096: 9C 88 A4 AB 44 0D 4B 23

0104: 74 AC ED 03

大家有一个命令行小工具showUDP,可以从tcpdump截取的文件中,直接显示其中UD
P包的内容。

QQ协议包

QQ协议包的构成是:

QQ协议包头|QQ命令包|包尾

QQ包头是7个字节:分别的意义是:

第0-0字节:总是02,表明是基本的QQ协议。在新版本的QQ中,大家发现还有使用0
6和01的,大约的作用似乎是:06是向服务器(和不同QQ使用的服务器不同)请求发
送一些作用不明的文件。01是服务器向它进行发送这个文件。目前,大家明白作用
的是02协议族。

第1-2字节:发送者的QQApp版本代码。如果是01 00表示是发自服务器的包。这时
候大家检查源IP地址就可以获得服务器的IP。

第3-4字节:QQ指令代码。如果发现有新的指令,将是很重要的信息。

第5-6字节:指令序列号。QQ的指令总是成对出现的,也就是说,一方发出一个命令
,将会收到另一方的同样序列号的应答。另外,发送方每条指令的序列号都是上一
条指令的加一。有两个方面要注意的是,每一方都维持自己的序列号,也就是说,
客户端的当前序列号和服务器的当前序列号是不一致的,当客户端为指令发出方的
时候,它使用自己的当前序列号,而服务器作为应答方,在应答的时候使用的接受
到的命令的序列号;反之,如果是服务器是指令的发出方,那么它就使用自己的当
前序列号,而不用理会客户端上一条指令的序列号。另外一个事情是,由于服务器
会同时和多个客户端通信,所以,对每个客户端收到的服务器指令的序列号不是连
续的,序列号的连续性不应该作为丢包的判断依据。

另外,通信开始客户端的第一个序列号是随机选取的,但似乎没有发现大过0x00ff
的。最后的退出登录数据包总是使用0xffff作为序列号,而且是不会有应答的。

包尾是一个字节,目前发现总是0x03。

由于大家截取的是机器上的全部UDP包,所以大家需要使用这些信息来综合判断大家
当前分析的是不是QQ的命令。

这样大家就可以剥离出QQ的命令包数据部分:

0000: 01 82 5D 90 6F 30 FD 96

0008: 3B B1 0F E5 FF 8E 3E 4B

0016: 38 E2 86 E1 8A F7 C8 CA

0024: B2 01 76 B6 ED 9E 2B 97

0032: FD B9 7F 23 B2 09 02 71

0040: 22 94 E3 4B E8 E2 8F FD

0048: FF 02 87 83 0B 32 57 73

0056: 91 7F EF 7B 7A 60 CB 44

0064: A4 B5 CA 13 19 F6 CE D5

0072: EC 2F D5 8A 88 22 48 14

0080: 4E 44 08 18 37 9D 8D AA

0088: 42 9C 88 A4 AB 44 0D 4B

0096: 23 74 AC ED

到这里为止,大家已经可以观察网络上客户端往返的指令的大概情况,而了解QQ协
议的大概框架。另外将叙述数据包文件的分析。




举报本楼

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

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

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

Copyright © 1999-2023 C114 All Rights Reserved

Discuz Licensed

回顶部
XML 地图 | Sitemap 地图