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
1.conten-type:text/x-msmsgscontrol
f:yF's8e9^
G Fv*Fi0
2.conten-type:symmetric-nat
3a m7u7w5wBdO0
3.conent-type:text/x-msmsgsinvite
*@(@)R/o;T7S0
4.conten-type:text/x-msnmsgrp2p
|.jr,l8YUQ,EFd0
5.Content-Type: text/plain
I~2z9g!sX6o0
解释一下,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"_d X^
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软件测试网.zgcy4u]8^*tI
杩欐槸鎴戠殑鏂规11111111111111111111111
&~br:s+fbG0
从上面的数据我们可以看出MSN消息的组成,MSN消息符合标准的MIME1。0协议,可以很清楚的看到消息头和消息体,看到这个大家想到了什么?这个一会再说,开始的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\n的16进制格式就是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(E7o p0
kk]J#hy0
可以看到MSN协议的消息传输其实就是一个字符编码游戏而已,根本没有经过加密。这里再提供一个方法,看下MSN的消息体:51Testing软件测试网]{TYB\5i
MSG 27 N 16851Testing软件测试网p9s}D?[ `&J
MIME-Version: 1.0
;`:sCg Ub0
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软件测试网_zBmPD;j2V2m2c:P!R
C.j$GH~$C0
消息被还原成功了。其实还原MSN消息的方法还是有很多的,记住这只是一个编码游戏,那么用一些字符处理工具试试?比如winhex之类的,这里我就不演示了,感兴趣的可以自己去实验下。
*_s4R e7VA9UX%A0
在live
messageer中,MS为了保持MSN协议的开放性和扩展性,而又想增加一些隐私性给用户,所以消息还是明文传输的,只不过增加了一个“悄悄话”功能,在这里对用户的消息传输进行加密,有时间我会分析一下这个功能的加密形式,这篇文章就到这里结束了,有问题或者对协议分析感兴趣的朋友可以来BCT或手册和我讨论,互相学习。51Testing软件测试网%c"X'H])G