资源描述:
《飞信协议分析》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、抓包看了一下,飞信是用了混合协议的:1、基于HTTP(XMLWebServices吧?)进行获取系统配置、更新程序、注册用户2、基于HTTPS进行登录时密码验证3、应用层协议是SIP协议,但不是标准的,估计是自创的?所有交互过程如发消息、短信通过SIP协议进行。关于SIP,有巨多的RFC描述,飞信的SIP协议栈实现的是TCP、HTTP承载1.TCP承载方式:连接服务器(目前是221.130.45.203)的8080端口,这时在客户端的“网络设置”中显示的是“TCP直接连接”,SIP信令直接就放在TCP的包中。2.HTTP承载方
2、式:连接服务器(目前是221.130.45.203)的80端口,采用POST方式,将信令包在POST请示屮,这时在客户端的“网络设置”中显示的是“HTTP直接连接”因为是TCP和HTTP承载,所以其包格式是非常清楚的,那么注意力就可以直接放到SIP协议或SIP信令上,详细的内容稍后再写。总的来说,飞信协议是比较简单的,不对,准确地说法是比较规范和清晰,但I办议本身是复杂的,另外:1.飞信的协议是明文,这一点如同其兄弟MSN,是不如QQ和RTX的,因此,通过飞信的交谈过程是可轻易截获的,通过很简单的工具,就可以截到同一网段上所有
3、人的交谈,估计会有人写FctionChatSniffer的,就跟MSN一样,假如有一天Fetion冇那么流行要不我写一个?:)2.协议效率比较低,我加了近200人,一次登录过程要传递的数据量居然超过了230K,我靠。3.状态有问题,presence处理得不太好好象,我在线别人却看到我离线,真是奇怪,而且一会儿发一个presence一会儿发一个,讨厌啊。Fction分析Z二:服务器地址从何而來一一变态的配置文件2007年03月08日22:30作者:nathan以下分析均基于飞信的这一版本:Fetion2006beta版本2.1.
4、0.0。作协议分析时,一抓包,就发现飞信工作时连的是221.130.45.203这个服务器。那这个1P地址人哪來的呢?会变吗?飞信的客户端程序中并没有配置服务器地址这一说。固定一个IP?不会吧,一面向全国的系统,不可能用一个IP地址。用一个固定域名解析出来的多IP地址中的一个吗?扌出它访问DNS的包一看,它就只在开始时解析过一次域名:nav.fetion.com.cn,这个域名的IP是221.130.45.201——听说开发飞信的人就是微软开发MSN的人,所以啥都跟MSN—样,你看列飞信的主界面元索,你能找一个位置和功能跟MS
5、N不一样的吗?连解析域名这点都跟MSN—样,I意思啊,卬象中MSM也是一开始就解析一个地址,好象是Messenger,msn.com?如果想在局域网穴封锁MSN,就把这个域名给指向127.0.0.1,MSN就傻了。既然只解析过nav.fetion.com.cn,那么221.130.45.203这个工作服务器(SIP的ProxyServer地址,就应该是nav.fetion.com.cn返回来的了。确实是,但只是第一次登录时返回,并保存在〔本地。后面再登录时,如果版本不更新,是不会再返冋这些系统配置信息的。所以,除笫一次外再抓包
6、是看不到这些配置信息的。本地配置文件并没放在Fetion的程序口录屮,而是放到了%USERPROFILE%ApplicationFction「录下。这个目录下有configuration,dat和飞信的用户目录,每个飞信用户目录下还有configuration.dat>contacts,dat^userinfo,dat这三个配置文件,看名字就矢U道是与用户和7的系统配置文件、好友列表文件、用户的个人信息文件。这些文件全是XML格式的,所以可以用Notepad打开,不过,你打开后就会发现,这些文件的内彳全被加密了,变态啊,这
7、些文件有什么好加密的呢。我们如何获得这里头的信息呢?方法有两个:一、我们让Fetion不要加密这些文件的内容,方法是:修改FetionFx.EXE文件。用ildasm,衣FeionFX.EXE反汇编出来,将其中的Imps.Client.Pc.PersistentManager.EncodeModel和Imps.Client.Pc.PersistentManager.DecodeModel这两个函数改掉,将这两个函数体改成以下容:.maxstack1IL_0000:ldarg.0TL_0001:ret即,立即将参数返冋。然后再用
8、ilasml具重新汇编生成FetionFX.EXE文件,覆盖掉以前那个,然后,再运行飞信,所有配置文件就不会再加密了。二、构造一个请求,给nav.fetion.com.cn,让它返冋。请求的内容很简单,抓一下包就会知道:取系统配置的请求过程是:xxx.xxx.xxx.xxx: