不要追求绝对的公平,红尘之中没有公平而言,人活一世,难得糊涂。                                           it is no use doing what you like, you have got to like what you do.

MSN协议消息传输过程分析

上一篇 / 下一篇  2007-04-18 09:28:24 / 个人分类:软件测试技术

MSN协议消息传输过程分析51Testing软件测试网*K#XbA{9th

                                  
0UxN(?Az0

R#cTd0fjj0

接着上一篇,分析了MSN认证过程的加密后再来看看MSN会话传输过程,其实MSN的会话传输一直都是明文的,只不过是用UTF-8编码过的,当然E文的消息是直接可以看到的。这次分析采用的工具是Omnipeek,觉得比snifferpro要人性化一些,可以很清楚的看到MSN协议的包。51Testing软件测试网*r%ofy%WERj+W |

开始分析之前先要知道MSN进行任务传输的几个连接过程:

sl%Y$N2mO0

1conten-type:text/x-msmsgscontrol           

1Q2?cg$ND9X y0

2conten-type:symmetric-nat                  51Testing软件测试网8oE&R`}7W

3conent-type:text/x-msmsgsinvite            51Testing软件测试网T:u({G c

4conten-type:text/x-msnmsgrp2p               

]m9sE"Vp1U0

5Content-Type: text/plain    51Testing软件测试网+NW@D7y*L*O ~w

解释一下,1是消息传输控制,2是视频连接,3是音频连接,4是视频,游戏,5是文本传输。本文分析的就是文本的传输过程,总是听人说前段时间某某员工MSN聊天记录被监听到,我孤陋寡闻没听说过,不过MSN一直是明文传输被监听是很正常的事情。其实查看MSN聊天原文是很简单的事情,不至于用工具那么复杂。 51Testing软件测试网4jR`} ?q_EI X6sc

为了方便分析,我只抓取了发送文本的数据包,如下图:51Testing软件测试网$T[k.D'Rs

0E nF @}j+y1P)`0

可以看到协议的类型很清楚的显示出来了,因为MSN协议是建立在TCP协议之上的,所以我们嗅的时候只需要把Filters定义为TCP协议就可以了。下面我们就来分析这些数据包。在MSN上向一个朋友发送一段消息:“这是我的方案11111111111111111111111”加上一段“1”是为了在编码中更好的看出我们的原始消息。 看一下抓到的包如下:

E9v6~5t&?0

MSG 27 N 16851Testing软件测试网"f)c v4Vw(s#Jr

MIME-Version: 1.0

\Y%l2~@H0

Content-Type: text/plain; charset=UTF-851Testing软件测试网c1?,bO6Cx:U/B)u

X-MMS-IM-Format: FN=MS%20Shell%20Dlg%202; EF=; CO=0; CS=1; PF=0

4` b^j Ram!c;d8E:A[ \0

杩欐槸鎴戠殑鏂规11111111111111111111111  51Testing软件测试网1z)b(O cI/Z]E[

从上面的数据我们可以看出MSN消息的组成,MSN消息符合标准的MIME10协议,可以很清楚的看到消息头和消息体,看到这个大家想到了什么?这个一会再说,开始的MSG是消息的命令,后面是MIME的版本号,接着是连接类型Content-Type: text/plain,这里看到了charset=UTF-8,说明消息体是经过UTF-8编码过的,FN=MS%20Shell%20Dlg%202消息头也需要经过URL编码。然后到了消息体:杩欐槸鎴戠殑鏂规11111111111111111111111。这段信息就是我刚才发送的MSN消息,看到那一串“1”了吧,前面的那些字符是不是“这是我的方案”呢?看一下数据包16进制的编码内容:51Testing软件测试网%p|u @ C8n'n

58 2D 4D 4D 53 2D 49 4D 2D 46 6F 72 6D 61 74 3A 20 46 4E 3D 4D 53 25 32 30 53 68 65 6C 6C 25 32 30 44 6C 67 25 32 30 32 3B 20 45 46 3D 3B 20 43 4F 3D 30 3B 20 43 53 3D 31 3B 20 50 46 3D 30 0D 0A 0D 0A E8 BF 99 E6 98 AF E6 88 91 E7 9A 84 E6 96 B9 E6 A1 88 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 51Testing软件测试网%p3RVI eSZ

最后的一串“31”就是“1”的16进制了再往前看“E8 BF 99 E6 98 AF E6 88 91 E7 9A 84 E6 96 B9 E6 A1 88就是“杩欐槸鎴戠殑鏂规”的16进制编码,为什么这么说呢?往前看4个字节“0D 0A 0D 0A”,在MSN中每行命令都需要以“0D 0A”作为结束符,转换过来就是“\r\n”在数据包没有decode格式中的表现形式就是“..”。MIME-Version: 1.0 \r\n16进制格式就是4D 49 4D 45 2D 56 65 72 73 69 6F 6E 3A 20 31 2E 30 0D 0A ,感兴趣的朋友可以相应的对照下 。下面就来看下如何解码MSN的中文消息,大家也可以自己编程实现,无非是一个UTF-8的字符转换游戏而已了。

f.d*f)\m-\ }0

这里有一个小工具实现了这个功能,打开那个包,选中消息部分的16进制编码,如图:

}]5T ~X/P0

   51Testing软件测试网2NT0^3|l

后面的一串“1”就不用解码了,然后打开这个小工具,把16进制代码复制进去,如图:51Testing软件测试网` A&RFj$u/UfO~)zu N

.gX@&c:t&Q sI0

从下面的回显中我们已经看到了被UTF-8编码后的中文消息,这个Raw功能就实现了16进制消息还原的功能,接下来要做的就是UTF-8解码,点下旁边的UTF8Decode按扭,可以看到原始消息已经被还原了,如图:

8a| [l V5H*jX0

51Testing软件测试网c4`5esT%VV:V

可以看到MSN协议的消息传输其实就是一个字符编码游戏而已,根本没有经过加密。这里再提供一个方法,看下MSN的消息体:51Testing软件测试网 C6_r)K^6b

MSG 27 N 16851Testing软件测试网9r6z5Aol V

MIME-Version: 1.051Testing软件测试网K/n ]/_ARQ&G7}.H

Content-Type: text/plain; charset=UTF-8

CM {'r3]"HJ0

X-MMS-IM-Format: FN=MS%20Shell%20Dlg%202; EF=; CO=0; CS=1; PF=051Testing软件测试网2~ Oa1H.vaa%H!pa

杩欐槸鎴戠殑鏂规1111111111111111111111151Testing软件测试网f4[r:{Rn6`r

符合MIME标准,我们知道所有的邮件都是符合MIME标准的,也就是说一条MSN消息可以被当作一封邮件来处理,我们来实验下,把以上内容保存为.eml格式,用outlook打开会是什么样呢?结果如图所示:

#OW8Qi0X6_G:u0

x#U+I2^0WB*SP*^0P0

消息被还原成功了。其实还原MSN消息的方法还是有很多的,记住这只是一个编码游戏,那么用一些字符处理工具试试?比如winhex之类的,这里我就不演示了,感兴趣的可以自己去实验下。51Testing软件测试网 |2s:h9@%v

live messageer中,MS为了保持MSN协议的开放性和扩展性,而又想增加一些隐私性给用户,所以消息还是明文传输的,只不过增加了一个“悄悄话”功能,在这里对用户的消息传输进行加密,有时间我会分析一下这个功能的加密形式,这篇文章就到这里结束了,有问题或者对协议分析感兴趣的朋友可以来BCT或手册和我讨论,互相学习。51Testing软件测试网V} qr~/U:ks


相关阅读:

TAG: 软件测试技术

 

评分:0

我来说两句

Open Toolbar