一、来龙去脉:典型登录方式及原理分析
1、典型剖析:MSN登录实例
一般来说,用户微机上的程序统称为MSN Messenger“客户端”,它通过Internet连接到一个MSN Messenger“服务器”。也就是说,客户端通过服务器与其他客户端交互信息。在大多数时间里,用户的客户端与服务器会话,然后由服务器来处理这些会话信息并通知其他人。了解之前,我们使用Sniffer NT来截获登录时的数据。如图1所示。
图 1
从截获的登录数据中,我们可以看到,在“数据”一栏中,有很多类似CVR、VER、USR等开头的数据,登录连接时还用到了TCP/1863和TCP/443这两个端口,它们记录了MSN Messenger登录的整个过程。在图中,我们看到了这样一条记录:“VER 145 MSNP11 MSNP10 CVR0”。
要回答这个问题,我们首先就要谈到MSN Messenger协议了。1999年,Microsoft向IETF(Internet Engineering Steering Group,国际互联网工程任务组,是世界上做互联网方面技术标准的组织)提交了一份“MSN Messenger Service 1.0 Protocol”草案,这是最初版本的MSN Messenger协议,不同的协议经常被写为“MSNP9”、“MSNP10”、“MSNP11”等。近几年中,MSN已经历经数次修订,目前MSN Messenger的协议已经到了第12版,简称MSNP12。现在,我们使用比较广泛的MSN7.0支持的协议是MSNP10和MSNP11,出于规范的需要,MSN Messenger用户必须升级到较高的版本,因为服务器对MSNP8以下的版本已经不再支持。这就是我们在刚才截获的数据中,为什么可以看到“MSNP11 MSNP10”的缘故了。
那么,CVR、VER、USR这些数据是什么意思呢?客户端与服务器间信息都是以命令格式传递的。命令被描述为三个字符、所有字母大写的命令代号。所有一般命令都有一个事务ID并且以新行结束。客户端发送的命令一般会使服务器响应一个及以上的命令。这些数据是MSN Messenger命令,它们使用了纯ASCII码,同时对非ASCII码字符使用URL编码。命令的语法如下:
XXX [<SP> TrID <SP> PARAM1 <SP> PARAM2…] <CRLF> |
其中,<SP>是空白字符,<CRLF>是回车换行,XXX是一个3字符的命令串,TrID是一个流水号,PARAMx是参数,[ ]内是可选项。关于这些命令的含义,可以参考下表(列举部分):
命令 |
来源 |
去向 |
说明 |
CHG |
Client |
NS |
发出改变状态的请求。 |
NS |
Client |
返回改变状态的应答。 | |
CHL |
NS |
Client |
服务器发出验证要求。 |
SS |
Client | ||
CVR |
Client |
NS |
发出客户端的OS、语言、MSN Messenger版本等信息。对于官方客户端来说,服务器会响应建议用户使用的客户端版本信息。 |
Client |
SS | ||
NS |
Client |
返回推荐的MSN Messenger版本、升级软件需要的下载地址等信息。 | |
SS |
Client | ||
INF |
Client |
NS |
询问服务器所支持的认证方式。 |
Client |
SS | ||
NS |
Client |
返回服务器所支持的认证方式。 | |
SS |
Client | ||
MSG |
Client |
SS |
发送消息到其他用户(聊天对象)。 |
NS |
Client |
传递服务器(系统)的消息到客户端。 | |
SS |
Client |
传递其他用户(聊天对象)的消息到客户端。 | |
SYN |
Client |
NS |
客户端-服务器同步。 |
NS |
Client | ||
URL |
Client |
NS |
发出获取MSN服务URL的请求。 |
NS |
Client |
返回获取URL请求的应答。 | |
USR |
All |
All |
声明、传递、鉴别用户身份。 |
VER |
Client |
DS |
协商MSN Messenger协议版本。 |
Client |
NS | ||
DS |
Client | ||
NS |
Client | ||
XFR |
DS |
Client |
向客户端分配NS(通知客户端转向连接指定的NS)。 |
Client |
NS |
发出分配SS的请求。 | |
NS |
Client |
返回分配SS请求的应答。 |
派遣服务器(Dispatch Server,简称DS服务器)。这是客户端最初连接的服务器,负责给客户端分配合适的通知服务器。域名是messenger.hotmail.com,标准服务端口是1863。完成派遣任务后,切断TCP连接。
通知服务器(Notification Server,简称NS服务器)。通知服务器的目的主要就是保留用户的在线信息,还有其他用户所关心的重要人员的信息。包括登录、改变状态、获取用户列表、修改用户信息、发起聊天、接受呼叫、邮件通知、退出等等。通知服务器同样也提供其他通知服务,如hotmail的新邮件提示和创建或者加入会话等。服务端口由派遣服务器指定,通常也是1863。
接线服务器(Switchboard Server,简称SS服务器)。这里保存了各人员的即时会话信息,换句话说,每个MSN中的用户对应连接到一个共享交换板的会话中。因此,这里也可以看作客户端之间聊天使用的中转服务器。每开一个聊天窗口,客户端和服务器就建立一个TCP会话。当客户端之间需要进行文件传输或语音聊天时,发送系统消息,建立“点对点”会话通道(可能转为使用UDP),服务端口通常也是1863。“点对点”通信使用的端口由客户端自动协商决定,如文件传输通常使用6891端口。
整个登录过程可以划分为四个阶段,基本过程如图2所示。
图 2
知道了这些知识之后,我们开始考虑:登录过程中的顺序是如何规定的呢?过去的MSN Messenger版本(MSNP8以下),简单地使用MD5等Hash算法对用户身份进行认证,其安全性比较差。现在,MSNP10/MSNP11使用了一种TWN(Tweener)认证方式,通过SSL/TLS连接到login.passport.com和loginnet.passport.com等服务器,借助于HTTP协议输入账号和密码,认证通过后,才能取得“进场券”。打开数据记录,如图3所示,查看数据框中的第二行,我们可以看到命令“USR 147 TWN I cndes2005@hotmail.com”,这其中就使用了TWN认证方式,表示声明、传递、鉴别用户cndes2005@hotmail.com的身份。
图 3
了解了这样一个认证过程,现在我们将登录过程中的所有数据归纳如下,通过仔细的分析,来详细了解其登录步骤。整个过程的登录模式十分清晰,可以详细分析如下:
1) VER 145 MSNP11 MSNP10 CVR0 这时,客户端连接到DS服务器的TCP 1863端口,这个DS服务器的DNS名为Messenger.hotmail.com,这时,客户端就像一个要进场看电影的人拿出了门票:“我能支持MSNP10和MSNP11”。 2) CVR 146 0x0804 winnt 5.0 i386 MSNMSGR 7.0.0777 msmsgs cndes2005@hotmail.com 客户端与DS之间进行MSN协议的版本协商;客户端发送本地操作系统的一些系统信息给DS,客户端报告本机信息:OS=Windows 2000(NT 5.0),语言=简体中文,MSN Messenger版本= 7.0.0777,账号= cndes2005@hotmail.com。 3) USR 147 TWN I cndes2005@hotmail.com 使用TWN认证方式连接方式进行身份认证。 4) CVR 146 1.0.0000 1.0.0000 1.0.0000 http://msgr.dlservice.microsoft.com http://messenger.msn.com/cn 客户端初始化用户认证请求,但DS并不负责身份认证的相关事宜,于是它返回一个Notification Server(NS)服务器的地址给客户端。 5) XFR 147 NS 207.46.4.22:1863 0 65.54.239.20:1863 DS将主动断开与客户端的连接,也就是叫客户端去找NS进行身份认证,这个NS服务器的DNS名通常为*.msgr.hotmail.com的格式。 6) VER 148 MSNP11 MSNP10 CVR0 7) VER 148 MSNP11 MSNP10 CVR0 8) CVR 149 0x0804 winnt 5.0 i386 MSNMSGR 7.0.0777 msmsgs cndes2005@hotmail.com 9) USR 150 TWN I cndes2005@hotmail.com 10) VER 148 MSNP11 MSNP10 CVR0 11) CVR 149 0x0804 winnt 5.0 i386 MSNMSGR 7.0.0777 msmsgs cndes2005@hotmail.com 12) USR 150 TWN I cndes2005@hotmail.com 客户端连接到上面得到的NS的TCP 1863端口,由于DS与NS之间没有连接,所以客户端又需要再次向NS提供上面类似的操作。 13) USR 150 TWN S lc=1033,id=507,tw=40,fs=1,ru=http%3A%2F%2Fmessenger%2Emsn%2Ecom,ct=1124521006,kpp=1,kv=7,ver=2.1.6000.1,rn=qp5CBKD1, 客户端向NS服务器初始化认证请求,NS返回一串用于下面Passport认证的字符串。 14) CVR 149 1.0.0000 1.0.0000 1.0.0000 http://msgr.dlservice.microsoft.com http://messenger.msn.com/cn 15) USR 150 TWN S lc=1033,id=507,tw=40,fs=1,ru=http%3A%2F%2Fmessenger%2Emsn%2Ecom,ct=1124521006,kpp=1,kv=7,ver=2.1.6000.1,rn=qp5CBKD1, 客户端用户向微软的Passport服务进行身份认证,认证成功后客户端将得到一个“凭证”。 16) USR 151 TWN S t=7r4WmwwzVEcP3KX880SWs6NeTyAbN2YNtf4TZaZlG6nLJXdrc5Q0ENfGta1FIE90rjih!2A6fs8b*65tgxM2it!hpD3tpsFZwwkb2lZRW2hiT2W487uofkzA$$ 客户端将上面获得的“凭证”给NS看,也就是检查“进场券”。 17) USR 151 OK cndes2005@hotmail.com 1 0 |