网络即时通信软件协议分析摘要:随着人们对即时通信软件的依赖越来越大,而对于这些即时通信软件的协议分析也显得越来越重要,本文主要即时通信软件的发展现状,比较了几款即时通信软件的特点,着重介绍了QQ协议的分析方法和对于登陆过程的简要分析,为QQ的其他功能的协议分析提供了参考。关键词:即时通信;协议分析;抓包一、引言随着Internet在世界的迅速发展,宽带业务的普及率也越来越高,几乎每个人的家庭中,工作中都有连接Internet的个人电脑,同时应人们对Internet即时通信(文字,语音,视频,文件传输)的要求,网络上的即时通信软件应运而生,目前网络上流行的即时通信软件有:QQ,Fetion,MSN,ICQ,在国外ICQ,MSN占主流地位,国内则是QQ,Fetion占主流地位,中国移动开发的Fetion依靠它在移动通信方面的优势大有超越腾讯QQ的趋势,同时对于不同职业的人群,即时通信软件的选择也不尽相同,公司职员和商务人事主要选择MSN,而学生则主要选择QQ和Fetion。由于这些即时通信软件的功能越来越多同时也越来越完善,所以人们对它的依赖程度也越来越大,这些即时通信软件的协议格式都不相同,各个软件公司都想要自己的产品在网络上能提供一些与其他软件不同的服务,所以这些软件的协议都是不公开的,避免有人编写插件用以逃过付费,从而享受软件提供的有偿服务。但是这也严重的束缚了即时通信软件的发展。因此对这些主流的即时通信软件进行协议分析是十分必要的。本文对现在国内主流的QQ和MSN进行初步的协议分析,对分析方法进行了介绍。二、对协议分析前的准备采集QQ数据是我们对QQ协议进行分析的基础。PC上:QQ2OO8,windumpOSX上:showUDP,calcMD5,qqDecrypt把QQ密码更改为123456。这主要是为了方便分析。关闭其它不必要的网络程序,避免产生干扰数据。如果有必要的话,重新启动计算机。三、数据包收集过程1、打开命令行窗口,输人命令,开始收集:windump—wpc.dump-s0udp。2、运行QQ,且登录。3、登录成功以后,等待4到5秒。其主要目的是把登录的命令和后面要收集的命令区分开来。4、执行需要收集的操作,其间注意把操作细节给以记录。包括操作顺序,系统的反馈提示,输人过的信息。如果某一操作反馈时间比较长,记录大约的时间间隔,且记录下我们可能需要的信息。信息越详细,越有助于进行猜测。5、完成需要记录的信息后,等4到5秒,选择离线。目的是把后面的操作和中间的操作区分开来。6、回到命令行窗口,应用Ctrl+C键结束收集。把当前目录下生成的pc.dump文件传送到Mac上准备做进一步分析。四、QQ文本传输协议数据包分析在sample目录下已经有一个这样的pc.dump文件。在开始分析前,需要对数据进行一些预处理,以便以后的分析。1、要把这个文件转化为方便阅读的文本文件格式,使用showUDPpc.dumppc.ascii。这时能够生成一个名为pc.ascii的文件。这个文件是一个文本文件,你可以用textEdit等编辑器来打开它。里面是分为一个包一个包的UDP数据的内容。进行简单地判断,把一些与QQ无关的数据删除。然后保存这个文件。在sample目录里面,也能够看到此文件。进一步删除这个文件中一些我们暂时不感兴趣的内容。例如,只留下以02开头的数据包。这些数据包是我们称为TCPF协议族的通信。它构成了QQ文字聊天功能的主体。把此文件保存为tepf.ascii。这是我们下一阶段的分析重点。2、准备一些解密的密钥。首先,在tcpf.ascii文件中,第一个包应该是以020a1do022开头的登录数据包。把它的随机密码部分(应该是16个01拷贝到一个空白的纯文本文件中,并把它保存为loginKey.hex文件。其次把后面的登录包数据部分(不包括包尾的03),保存为loginData.hex。最后我们执行:qqDeeryptloginData.hexloginKey.hex。这个程序的作用是使用loginKey.hex文件的内容作为密钥去解密loginData.hex文件中的数据。如果解密成功的话,程序输出的最后一块数据就是解密后的结果。把这块数据保存为loginData.deerypt。这时我们就有了QQ登录数据包的真实数据。3、制作一个文件,它里面是QQ密码的ascii数值。对123456的密码,应该为313233343536。第一,在sample里面有这个文件,文件名为pwd.hex。第二,制作密码的MD5digest,运行:ealeMD5pwd.hex。这个命令能够计算pwd.hex文件里面数值的MD5digest,且把输出结果中的MDd5digest保存到pwdmd5.hex中。第三,计算MD5digest的MD5digest,运行ealeMD5pwdMD5.hex,把计算的结果部分保存到pwdmd5md5.hex文件中。且使用其来作为密钥解密登录请求的应答数据包:在tcpf.ascii文件中找到以o201000o22开头的数据包,把它的数据部分拷贝到loginReplyData.hex中,然后运行:qqDeeryptloginReplyData.hexpwdmd5md5.hex。输出的结果就是登录响应数据包的真实数据。第一个数字应该是0,后面的16个数值就是以后通讯所使用的密钥。我们把它保存到名为sessionKey.hex文件中。4、用sessionKey.hex逐个解开这些以后的数据包,凭借着想象力和不断的尝试,我们可以越来越了解QQ协议的细节。五、QQ其他功能协议对于从客户端发出的数据包,前7个字节是包头,紧跟的4个字节是你的QQ号码。其后到包尾(不包括包尾o3)是解密的包数据。把数据包拷贝到一个文件。例如,找个0x0016命令的数据包,把它的数据放到了ndMg.hex中。然后运行:qqDeeryptsendMsg.hexsessionKey.hex,输出的结果就是它的真实数据,把它保存到sendMsg.deerypt中。其数据为:01F83D6504FA73BA0A1D01825D900EC937049DDDF71AF2BO96CF57735A563B2CD6ED00OB3BFO3F51240EooCCO000000100O000O0O1747279696E6720O009O0O000o086O2CBCECCE5OD由以上的数据,可以发现其中有这样的一些魔术般的数字:01F83D65,转换成十进制就是33045861。我的QQ号码。o4FA73BA,转换成十进制就是83522490,feifei的QQ号码。747279696E67,转换成ascii字符就是trying。根据前面的操作记录,我曾经试着向feifei发送了一个trying的消息,很明显这个数据包就是这个发送消息的数据包。由此说明Ox0016是发送消息的命令。而且了解了其中包含的一些内容。CBCECCE5是GB18030的“宋体”。显然,它表示的是所使用的字体。前面的一些,则分别代表字号,字型等,通过试验不断的进行了解。这样就能够逐步了解这些数据包内容的含义。)六、MSN通信软件文本消息传输协议分析1、(1)AIM与ICQ同是AOL公司的产品,因此协议格式基本相同。有两点不同之处:一是AIM支持聊天室消息发送和接收服务,分别如表1所示的SNAC(0xoe,0x05)和SNAC(0xoe,0x06)服;二是AIM采用HTML格式组织消息体数据。(2)MSN文本消息传输协议格式简单,应用层数据以命令为首标,采用命令行的方式组织数据,命令使用ASCll码表示,统一采用三个字母组成,如“MSG”为消息传送命令,后面跟随零个或者更多个参数,参数之问被一个或者多个空格字符分开,命令结束通过回车换行符(CRLF)表示。例如MSN客户端给消息服务器发送一个即时文本消息的应用层协议格式为:MSGTrIDNLength\r\nMessage。该消息中MSG是一个发送消息命令,命令之后是用空格隔开三个数;TrlD是客户端与服务器交互的标志N是服务器响应的特征码,表示只要求服务器不能转发消息给接收客户端时才响应;I朋gth是消息长度;\r\n是回车换行符,表示命令结束{Message是指定长度的消息体。MSN的Message消息体消息是一个MIME格式编码流,使用标准的MIME头,可以参考RFC-1521和RFC-822来了解更多的关于MIME格式的信息。(3)雅虎通的协议格式YMSG为应用层首标,由ASCII表示;其后的四个字节为客户端的协议版本号;数据长度指出教据部分的字节长度;服务是两字节的操作码,指明客户端发送的是哪一种服务请求或者说明服务器对哪一个服务的响应。雅虎通至少提供了45种以上的服务,发送一般消息的服务是0x0006,聊天室消息的服务是0x00a8t状态在服务器响应的情况下,表示对请求的响应状态(成功,失败等)。会话ID是客户端与服务器端通信的标志,一旦服务器指定它们之间的一个会话ID以后,它们之间的所有数据包都使用这个ID进行通信。2、MSN即时通信软件系统架构分析即时通信系统一般有两种模式:客户/服务器模式,即发信端用户和收信端用户必须通过服务器来交流;客户/客户模式,即服务器给每对客户端建立一个TCP通道,他们的交流在这个TCP之上进行,无须通过服务器。QQ、MSN、ICQ、AIM和YahooMessenger这些主流软件使用的是客户/服务器模式,文本消息必须通过服务器才能从一个客户端传到另一个客户端。对于文本消息的传送,除了通信架构均是基于客户/服务器务器模式之外,消息传输均是建立在TCP协议基础之上的,而且服务器的端口一般都是固定端口。服务器通过提供固定的服务端口被动式地与客户端进行通信,起到消息中转的作用。需要特殊说明.雅虎通对同一个局域网内的客户端通信采用客户/客户的通信架构。下面以MSN的通信机制为例进行阐述:MSN是一个基于MSNP协议的IM通信系统,它提供了包括登录、认证、授权、重定向在内的全面服务框架。从网络拓扑的角度来说,MSNMessenger分为服务层、连接层和客户层三层。客户层的主要功能是接收用户指令,如发出登录请求、改变用户名状态、发送文本消息请求和发送文件请求等,并提交给相应的服务器集群。连接层提供了一个客户层到服务层的网络通路。MSN使用TCP传输协议,除了文件传输和语音聊天是直接的点对点通信之外,其他所有的情形全部通过服务器进行。服务层有三种类型的服务器:(1)派遣服务器(DS)。它足客户与服务器建立连接的初始服务器。域名是messenger.hotmail.con,标准服务端口是1863。其主要功能是协商协议版本和向客户发送可用的通知服务器IP及端口。在客户收到NS的IP及端口并发回确认后,DS切断与用户的连接。(2)通知服务器叫(NS)。在MSN会话期间,客户需要一直保持与它的连接,很多任务要在这个会话内完成,包括登录、改变状态、获取用户列表、修改用户信息、发起聊天、邮件通知、退出等。服务端口通常也是1863。(3)中转服务器(SS)。客户之间聊天时负责内容的中转。每开一个聊天窗口,客户与服务器就建立一个TCP会话。服务端口通常也是1863。当客户之间需要进行文件传输或语音聊天时,发送系统消息,建屯点对点会话通道(可能转为使用UDP)。点对点通信使用的端口由客户端自动协商决定,如文件传输通常使用6891端口。3、数据采集及存储系统采用基于网络嗅探技术的数据采集方法,以WinPcap4.0.1作为开发工具,Windows平台下使用WinPcap从网络适配器嗅探数据十分方便,图3是使用WinPeap捕获网络数据包的基本流程。使用WinPcap开发应用程序除可以捕获数据包外,最大的优点在于WinPcap可以对数据包进行过滤。WinPeap从网络适配器上嗅探到的是最原始的数据帧,这包括了所有流经的数据。如果不对数据包进行相应的过滤,将会捕获到许多无关的数据,这会增加系统的负担,使系统工作效率降低。在