不要追求绝对的公平,红尘之中没有公平而言,人活一世,难得糊涂。                                           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软件测试网+[?R*JSd9t.~*H

                                   51Testing软件测试网m/vq4OE`q
51Testing软件测试网`2b@n"ht

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

F}Myz!I0

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

2_#DA9kp*u0

1conten-type:text/x-msmsgscontrol           

f:y F's8e9^ G Fv*Fi0

2conten-type:symmetric-nat                 

3a m7u7w5wBdO0

3conent-type:text/x-msmsgsinvite           

*@(@)R/o;T7S0

4conten-type:text/x-msnmsgrp2p               

|.jr,l8YUQ,EFd0

5Content-Type: text/plain   

I~2z9g!s X6o0

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

8]Xn%OT&ukH{0

为了方便分析,我只抓取了发送文本的数据包,如下图:51Testing软件测试网n{1[3K?G

51Testing软件测试网Z`-gT}L

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

MSG 27 N 16851Testing软件测试网g)H g&Q%b&K/|mT

MIME-Version: 1.051Testing软件测试网m;r"_dX^

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

s4kUS"[7~(c0

X-MMS-IM-Format: FN=MS%20Shell%20Dlg%202; EF=; CO=0; CS=1; PF=051Testing软件测试网.z gcy4u]8^*tI

杩欐槸鎴戠殑鏂规11111111111111111111111 

&~br:s+f bG0

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

{p%h0L&S9f@n0

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

5YWg4\&u Cq0

最后的一串“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的字符转换游戏而已了。

?,{ott!WK7n5k0

这里有一个小工具实现了这个功能,打开那个包,选中消息部分的16进制编码,如图:51Testing软件测试网\PvhI L.V5d#U

   51Testing软件测试网o#k~H_,J`

后面的一串“1”就不用解码了,然后打开这个小工具,把16进制代码复制进去,如图:51Testing软件测试网8CeaY J-eS

'Cp5L}[ C$X*c/f0

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

~1j&u~H(E7op0

kk]J#hy0

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

MSG 27 N 16851Testing软件测试网p9s }D?[`&J

MIME-Version: 1.0

;`:sCg U b0

Content-Type: text/plain; charset=UTF-851Testing软件测试网P eYq,W+H3^4RO2x

X-MMS-IM-Format: FN=MS%20Shell%20Dlg%202; EF=; CO=0; CS=1; PF=051Testing软件测试网;}*gZ h)KO5F xR

杩欐槸鎴戠殑鏂规11111111111111111111111

/vMyn |-E-R0

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

C.j$GH~$C0

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

*_s4R e7VA9UX%A0

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


相关阅读:

TAG: 软件测试技术

 

评分:0

我来说两句

Open Toolbar