`
lancelot_WT
  • 浏览: 4645 次
  • 性别: Icon_minigender_1
  • 来自: 丽江
文章分类
社区版块
存档分类
最新评论

中国移动飞信协议分析

阅读更多

登录

POST /nav/getsystemconfig.aspx HTTP/1.1
User-Agent: IIC2.0/PC 2.2.0230
Content-Type: application/x-www-form-urlencode; charset=utf-8
Host: nav.fetion.com.cn
Content-Length: 75
Connection: Keep-Alive


HTTP/1.1 100 Continue

<config><client type="PC" version="2.2.0230" platform="w5.1" /></config>


HTTP/1.1 200 OK
DATE: Wed, 11 Apr 2007 08:19:39 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Content-Language: zh-cn
Set-Cookie: ASP.NET_SessionId=3siqq555hhsjllshshsssw32; path=/; HttpOnly
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Length: 202

<?xml version="1.0" encoding="utf-8" ?><config><client version="2.0.0.0"><compatible>
2.0.0.0</compatible><date>2006-7-27 18:48:27</date><pc-live-update value="http://221.130.45.198/"/></client></config>
//此处返回升级服务器地址

查看是否有升级
GET /UpdateInfo.ashx?Version=2.2.0230&Switch= HTTP/1.1
User-Agent: IIC2.0/PC 2.2.0230
Host: 221.130.45.198
Connection: Keep-Alive

HTTP/1.1 204 No Content
Connection: close
Date: Wed, 11 Apr 2007 08:19:39 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Cache-Control: private
Content-Length: 0

//开始取配置文件
POST /nav/getsystemconfig.aspx HTTP/1.1
User-Agent: IIC2.0/PC 2.2.0230
Host: nav.fetion.com.cn
Content-Length: 262
Connection: Close


HTTP/1.1 100 Continue


<config><user mobile-no="13412344321" /><client type="PC" version="2.2.0230" platform="W5.1"/><servers version="0"/><service-no version="0"/><parameters version="0" /><hints version="0" /><http-applications version="0" /><client-config version="0" /></config>

HTTP/1.1 200 OK
Connection: close
Date: Wed, 11 Apr 2007 09:41:41 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Content-Language: zh-cn
Set-Cookie: ASP.NET_SessionId=1lkl1h550rvost2ujpr0prfy; path=/; HttpOnly
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Length: 5644

<?xml version="1.0" encoding="utf-8" ?><config><servers version="12"><apply-sub-service>HTTP://221.130.45.201/nav/ApplySubscribe.aspx</apply-sub-service><crbt-portal>http://221.130.46.134/crbt/default.aspx</crbt-portal><get-general-info>HTTP://221.130.45.201/nav/GeneralGetInfo.aspx</get-general-info><get-pic-code>HTTP://221.130.45.201/nav/GetPicCode.aspx</get-pic-code><get-svc-order-status>HTTP://221.130.45.201/nav/GetSvcOrderStatus.aspx</get-svc-order-status><get-system-status>HTTP://221.130.45.201/nav/GetSystemStatus.aspx</get-system-status><get-uri>HTTP://221.130.45.205/hds/geturi.aspx</get-uri><http-tunnel>HTTP://221.130.45.203/ht/sd.aspx</http-tunnel><j2me-adapter></j2me-adapter><matching-portal></matching-portal><portal>http://www.fetion.com.cn/</portal><sipc-proxy>221.130.45.203:8080</sipc-proxy><ssi-app-sign-in>https://221.130.45.201/ssiportal/SSIAppSignIn.aspx</ssi-app-sign-in><ssi-app-sign-out>http://221.130.45.201/ssiportal/SSIAppSignOut.aspx</ssi-app-sign-out><sub-service>https://221.130.45.201/nav/Subscribe.aspx</sub-service></servers><service-no version="1"><help-desk>10086</help-desk><ivr>125862</ivr><mms></mms><rbt>12530</rbt><sms>161</sms></service-no><parameters version="4"><batch-sms-max-receivers>8</batch-sms-max-receivers><forbidden-share-content-type>exe;bat;cmd;msi</forbidden-share-content-type><ivr-invite-timeout>60</ivr-invite-timeout><max-ivr-participants>8</max-ivr-participants><max-msg-convert-sms>3</max-msg-convert-sms><max-msg-length>400</max-msg-length><max-share-content-size>10485760</max-share-content-size><max-sms-length>182</max-sms-length><max-sms-unicode>70</max-sms-unicode><offline-max-share-content-size>2048000</offline-max-share-content-size><portrait-file-type>image/pjpeg;image/jpeg;image/bmp;image/x-windows-bmp;image/png;image/gif</portrait-file-type><single-sms-max-length>70</single-sms-max-length><temp-group-max-share-content-size>2048000</temp-group-max-share-content-size><max-blacklist>128</max-blacklist><max-buddies>300</max-buddies><max-buddy-list>64</max-buddy-list><max-chat-buddies>20</max-chat-buddies></parameters><hints version="4"><i-not-log-on>您没有登录,不能发送消息</i-not-log-on><i-not-online>您当前的状态设置为“{0}”</i-not-online><participants-not-online>一些参与者可能无法及时回复 您的消息</participants-not-online><user-busy>{0}可能无法及时回复您的消息,因为{1}的状态为{2}。</user-busy><user-in-blacklist>对方在您的黑名单中,您不能和他会话</user-in-blacklist><user-offline>{0}已离线,不能立即收到您的消息。 您发送的消息将被保存下来并延迟发送。</user-offline><user-sms-status>{0}没有登录,您的消息将会以短信发送到对方的手机。每条消息最多{1}个字符,根据您输入的内容长度,消息可 能会被拆为2~{2}条短信。</user-sms-status></hints><http-applications version="5"><crbt-common-access>HTTP://221.130.45.205/hds/CrbtCommonAccess.aspx</crbt-common-access><del-portrait>HTTP://221.130.45.205/hds/DeletePortrait.aspx</del-portrait><delete-msg-history>HTTP://221.130.45.205/hds/DeleteMessageHistory.aspx</delete-msg-history><get-ad>HTTP://221.130.45.205/hds/GetAd.aspx</get-ad><get-personal-ext-info>HTTP://221.130.45.205/hds/getpresenceinfo.aspx</get-personal-ext-info><get-personal-info>HTTP://221.130.45.205/hds/getpersonalinfo.aspx</get-personal-info><get-portrait>HTTP://221.130.45.205/hds/getportrait.aspx</get-portrait><get-tab-info>HTTP://221.130.45.205/hds/GetTabInfo.aspx</get-tab-info><query-msg-history>HTTP://221.130.45.205/hds/QueryMessageHistory.aspx</query-msg-history><record-share-content-op>HTTP://221.130.45.205/hds/recordsharecontentevent.aspx</record-share-content-op><relay-upload-share-content>HTTP://221.130.45.206/hds/RamRelayUploadShareContent.aspx</relay-upload-share-content><set-personal-info>HTTP://221.130.45.205/hds/setpersonalinfo.aspx</set-personal-info><set-portrait>HTTP://221.130.45.205/hds/setportrait.aspx</set-portrait><set-tone-info>HTTP://221.130.45.205/hds/SetToneInfo.aspx</set-tone-info><upload-share-content>HTTP://221.130.45.205/hds/BlockUploadShareContent.aspx</upload-share-content></http-applications><client-config version="5"><item key="sms-mode-main-desc" value="您可以发送短信与好友进行交流、使用语音聊天,还可以邀请您 的手机好友加入Fetion服务" /><item key="sms-mode-invite-buddy" value="hy" /><item key="sms-mode-invite-ivr" value="yy" /><item key="sms-mode-no-contact-list" value="目前您还没有好友,可以通过登录后邀请,获取好友或将手机通讯簿的联系人导入为Fetion好友" /><item key="online-no-buddies" value="目前您还没有好友,可以通过菜单中的导入手机联系人、移动速配交友、用飞信号和手机号添加好友的方式来添加好友。" /><item key="online-garden-desc" value="" /><item key="mobile-no-dist" value="<r><c v="cmcc"><d s="13500000000" e="13999999999"/><d s="13400000000" e="13489999999"/><d s="15900000000" e="15999999999"/><d s="15800000000" e="15899999999"/></c></r>" /><item key="fee-charge-desc-url" value="http://www.fetion.com.cn/shuoming1.aspx"/><item key="ivr-charge-desc" value="资费咨询当地10086"/><item key="info-redirect-url" value="https://uid.fetion.com.cn/SSIPortal/Redirect.aspx?key="/></client-config><client version="2.0.0.0"><compatible>2.0.0.0</compatible><date>2006-7-27 18:48:27</date><pc-live-update value="http://221.130.45.198/"/></client> </config>

抓包看了一下,飞信是用了混合协议的:
1、基于HTTP(XML Web Services吧?)进行获取系统配置、更新程序、注册用户

2、基于HTTPS进行登录时密码验证

3、应用层协议是SIP协议,但不是标准的,估计是自创的?所有交互过程如发消息、短信通过SIP协议进行。


关于SIP,有巨多的RFC描述,飞信的SIP协议栈实现的是TCP、HTTP承载

1.TCP承载方式:连接服务器(目前是221.130.45.203)的8080端口,这时在客户端的“网络设置”中显示的是“TCP直接连接”,SIP信令直接就放在TCP的包中。
2.HTTP承载方式:连接服务器(目前是221.130.45.203)的80端口,采用POST方式,将信令包在POST请示中,这时在客户端的“网络设置”中显示的是“HTTP直接连接”

因为是TCP和HTTP承载,所以其包格式是非常清楚的,那么注意力就可以直接放到SIP协议或SIP信令上,详细的内容稍后再写。

总的来说,飞信协议是比较简单的,不对,准确地说法是比较规范和清晰,但协议本身是复杂的,另外:
1. 飞信的协议是明文,这一点如同其兄弟MSN,是不如QQ和RTX的,因此,通过飞信的交谈过程是可轻易截获的,通过很简单的工具,就可以截到同一网段上所有人的交谈,估计会有人写Fetion Chat Sniffer的,就跟MSN一样,假如有一天Fetion有那么流行......要不我写一个?:)

2.协议效率比较低,我加了近200人,一次登录过程要传递的数据量居然超过了230K,我靠。

3.状态有问题,presence处理得不太好好象,我在线别人却看到我离线,真是奇怪,而且一会儿发一个presence一会儿发一个,讨厌啊。

以下分析均基于飞信的这一版本:Fetion 2006 beta 版本 2.1.0.0。

作协议分析时,一抓包,就发现飞信工作时连的是221.130.45.203这个服务器。那这个IP地址从哪来的呢?会变吗?飞信的客户端程序中并没有配置服务器地址这一说。固定一个IP?不会吧,一面向全国的系统,不可能用一个IP地址。用一个固定域名解析出来的多IP地址中的一个吗?抓出它访问DNS的包一看,它就只在开始时解析过一次域名:nav.fetion.com.cn,这个域名的IP是221.130.45.201——听说开发飞信的人就是微软开发MSN的人,所以啥都跟MSN一样,你看那飞信的主界面元素,你能找一个位置和功能跟MSN不一样的吗?连解析域名这点都跟MSN一样,没意思啊,印象中MSN也是一开始就解析一个地址,好象是Messenger.msn.com?如果想在局域网内封锁MSN,就把这个域名给指向127.0.0.1,MSN就傻了。

既然只解析过nav.fetion.com.cn,那么221.130.45.203这个工作服务器(SIP的Proxy Server)地址,就应该是nav.fetion.com.cn返回来的了。确实是,但只是第一次登录时返回,并保存在了本地。后面再登录时,如果版本不更新,是不会再返回这些系统配置信息的。所以,除第一次外,再抓包是看不到这些配置信息的。


本地配置文件并没放在Fetion的程序目录中,而是放到了%USERPROFILE%ApplicationFetion目录下。这个目录下有configuration.dat和飞信的用户目录,每个飞信用户目录下还有configuration.dat、contacts.dat、userinfo.dat这三个配置文件,看名字就知道是与用户相关的系统配置文件、好友列表文件、用户的个人信息文件。

这些文件全是XML格式的,所以可以用Notepad打开,不过,你打开后就会发现,这些文件的内容全被加密了,变态啊,这些文件有什么好加密的呢。

我们如何获得这里头的信息呢?

方法有两个:

一、我们让Fetion不要加密这些文件的内容,方法是:修改FetionFx.EXE文件。用ildasm,将FeionFX.EXE反汇编出来,将其中的Imps.Client.Pc.PersistentManager.EncodeMode1和Imps.Client.Pc.PersistentManager.DecodeMode1这两个函数改掉,将这两个函数体改成以下内容:
.maxstack 1
IL_0000: ldarg.0
IL_0001: ret
即,立即将参数返回。然后再用ilasm工具重新汇编生成FetionFX.EXE文件,覆盖掉以前那个,然后,再运行飞信,所有配置文件就不会再加密了。

二、构造一个请求,给nav.fetion.com.cn,让它返回。请求的内容很简单,抓一下包就会知道,取系统配置的请求过程是:
xxx.xxx.xxx.xxx:xxxx >>>>>>>> 221.130.45.201:80
POST /nav/getsystemconfig.aspx HTTP/1.1
User-Agent: IIC2.0/PC 2.1.0.0
Host: nav.fetion.com.cn
Content-Length: 233
Connection: Keep-Alive


--------------------------------------
xxx.xxx.xxx.xxx:xxxx <<<<<<<< 221.130.45.201:80
HTTP/1.1 100 Continue


--------------------------------------
xxx.xxx.xxx.xxx:xxxx >>>>>>>> 221.130.45.201:80
<config><user mobile-no="139xxxxxxxx" /><client type="PC" version="2.1.0.0" platform="W5.1" /><servers version="12" /><service-no version="1" /><parameters version="4" /><hints version="4" /><http-applications version="5" /></config>

将以上内容中的从servers version开始的version全置为"0",服务器就会返回配置信息。注意,配置信息全是UTF-8编码的。用nc就可构造一个http请求发过去,服务器立马就返回了。


推荐用方法一,因为这样可以看和修改所有配置信息,而方法二仅有系统配置信息。


与我们关注的服务器地址相关的信息在飞信用户目录下的configuration.dat中,一看就明白是啥:
....
<sipc-proxy>221.130.45.203:8080</sipc-proxy> 这就是我们关心的TCP直接连接时的服务器地址
<http-tunnel>HTTP://221.130.45.203/ht/sd.aspx</http-tunnel> HTTP直接连接时的入口地址
<get-pic-code>HTTP://221.130.45.201/nav/GetPicCode.aspx</get-pic-code> 注册时,取验证代码图片的URL
<get-system-status>HTTP://221.130.45.201/nav/GetSystemStatus.aspx</get-system-status> 取系统状态啦
....


这个配置信息放到飞信用户目录下是有原因的,就象SIP协议支持的,登录的服务器是可以分用户群的,不同的用户可以登录不同的Proxy Server,每个飞信用户(手机)可以分别登录到本省的Proxy Server,就如同现在的手机和电话网络一样。


其实这些配置内容没什么啊,为什么要加密呢?而且随便构造一个http请求,就可以获得这些内容的。 最变态的是通过飞信的交谈内容不加密不变换,却把无关紧要配置文件加密了。

另外,用户的密码就保存在Application DataFetion目录下的Configuration.dat中,当然这个密码进行了变换,遗憾的是,在程序中是还原出了用户密码的,因此,用户密码别人是可以轻易获得的。幸好丢了可以手机找回。但这仍然是个非常不安全的因素。

J2me版飞信的通信协议,与PC版的协议是完全不同的。
两个版本的协议,都是以HTTP为基础。不同的是,PC版的飞信 ,在HTTP上采用了SIP协议。
而J2me版的飞信,在HTTP上传输的,则是一个自定义的数据格式。


J2me版飞信(以下简称飞信)的通信协议,基于HTTP协议

 

 

可以看到,每个包都分为Header和Payload两部分。
header是固定长度4个字节,其中,前三个字节(Length)表示整个数据包的程度,包括Header本身的长度,第4个字节(Code) 表示请求的命令吗。表示长度的三个字节是按大端(big-endian)的格式(也就是网络字节序)来表示一个整数的。具体说就是,字节0表示长度的最高 8位,字节1表示长度的中间8位,字节2表示长度的低8位。字节3表示请求码。

这个长度可以表示的很大,当然,暂时还用不上这么大。

Header后的有效数据(Payload)是变长的。该部分长度可以为0。一些简单的命令比如退出登录,只需要设置Code为对应的代码,Payload部分是不需要数据的。

服务器返回的数据格式和客户端发出的具有相同的格式。

=== 特殊的包 ===
在服务器响应中,有一个特殊的包,Code为 -1。 Code 为-1的包,实际上是有多个包组成的。需要把这些包全部分离出来,逐个处理它们。


** 我不清楚是不是可以用Code为-1的包同时发送多个包到服务器,不过在飞信的代码里,没有看到这样的应用,只有从服务器收到的响应中有code为 -1的包
 

=== 登录导航服务器 ===


在飞信客户端与服务器通信的过程中,登录导航服务器是第一步 。目的是获得真正的服务Url。可能是因为移动在以后会改动服务的URL,或者按照就近服务的原则,动态的返回离使用飞信的手机最近的服务器上的服务URL。

得到的这个服务URL,就是后来的 登录,聊天,注销的目的地址。

从飞信的代码中可以看到缺省的导航服务器url是
http://nav.m161.com.cn/getadapteruri.aspx

该导航服务器url,在MANIFEST.MF中serverIP 也有定义,如果MANIFEST.MF没有定义serverIP,就使用该默认的url。

要获取服务URL,需要往导航服务器URL POST一个字节,这个字节可以是任意数据。
如请求成功后,会返回一个xml文档,如下

 <?xml version="1.0" encoding="utf-8" ?>

<Root xmlns="http://tempuri.org/DateExchange.xsd">

    <Response>

        <Error>0</Error>

        <Memo/>

    </Response>

    <Uri>

     http://liveja.amigo.bjmcc.net/transfer.vurl

    </Uri>

</Root>

从Uri节点得到的就是飞信协议使用的服务URL。这以后的通信,就与导航服务器无关了。


本篇文章来源于 中国协议分析网|www.cnpaf.net 原文链接:http://www.cnpaf.net/Class/OtherAnalysis/200810/23084.html

分享到:
评论

相关推荐

    移动飞信协议分析与接口调用资料整理

    移动飞信,作为中国移动推出的一款即时通讯软件,允许用户通过互联网免费向中国移动手机用户发送短信。飞信协议分析与接口调用是理解其工作原理和技术实现的关键,这对于开发者来说具有重要价值,特别是对于想要利用...

    飞信协议分析

    标题“飞信协议分析”指出了文档的核心内容是关于飞信通信协议的深入解析。飞信是中国移动推出的一种即时通讯服务,允许用户通过短信、互联网等方式进行沟通。协议分析是指对飞信软件在实现通信时所使用的技术细节和...

    中国移动飞信的C#源代码

    中国移动飞信是一款基于移动通信网络的即时通讯软件,它允许用户通过手机或电脑进行免费的文字、语音甚至视频聊天。此项目涉及的是中国移动飞信的C#源代码,这对于开发者来说是一份宝贵的参考资料,可以帮助理解飞信...

    中国移动飞信开发包Delphi2007版本.rar

    中国移动飞信是一款融合了短信、语音等多种通信方式的即时通讯软件,主要面向中国移动的用户。在本压缩包“中国移动飞信开发包Delphi2007版本.rar”中,包含了针对Delphi 2007开发环境的飞信API接口和示例代码,帮助...

    移动飞信完美版C#源代码.zip

    移动飞信是一款由中国移动开发的即时通讯软件,它允许用户通过手机或电脑进行免费的短信、语音和视频通信。在本压缩包“移动飞信完美版C#源代码.zip”中,包含的是该软件的C#语言实现源代码,这对于开发者来说具有极...

    移动飞信C#源码(完全版)

    移动飞信是一款由中国移动开发的即时通讯软件,它允许用户通过手机或电脑进行免费的文本、语音甚至视频通信。此“移动飞信C#源码(完全版)”提供了一个全面的开发环境,对于理解C#编程语言在构建类似即时通讯应用中的...

    网上有人实现的飞信的协议

    标题中的“飞信的协议”指的是中国移动推出的即时通讯软件飞信的通信协议。飞信允许用户通过短信、网络等方式进行免费或低费的文本、语音、图片等多种信息交流。在这个场景下,"网上有人实现的飞信的协议" 暗示了有...

    C#移动飞信的源代码

    移动飞信,作为中国移动推出的一款即时通讯软件,以其免费发送短信、语音消息等功能,在早期受到了广大用户的喜爱。本篇文章将深入探讨使用C#编程语言实现移动飞信的源代码,帮助开发者了解其背后的技术原理,并从中...

    中国移动4G+手机产品白皮最终版

    通过深入分析这些内容,我们可以清晰地了解到中国移动对于4G+手机产品的发展规划和技术要求,这对于产业链上的合作伙伴来说是非常重要的指导性文件。同时,对于消费者而言,这份白皮书也提供了选购4G+手机时的重要...

    移动飞信完美版(C#源代码)

    移动飞信是一款由中国移动开发的即时通讯软件,它允许用户通过互联网或移动网络发送免费短信、语音消息,甚至进行电话通话。在这个“移动飞信完美版(C#源代码)”的压缩包中,我们很显然拥有该软件客户端的C#编程语言...

    迷你飞信 迷你飞信 迷你飞信

    这款应用的核心是基于飞信技术,飞信是中国移动推出的一种即时通讯工具,允许用户通过互联网或者手机进行免费的文本消息交流。在描述中提到,迷你飞信实现了基本的收发短信和加好友的功能,这意味着它具备了基础的...

    移动飞信完美版C#源代码

    移动飞信是一款由中国移动开发的即时通讯软件,它允许用户通过手机或电脑进行免费的短信、语音和视频通信。在本资源中,我们拥有的是移动飞信的C#源代码,这对于开发者来说具有极高的学习和研究价值。C#是一种广泛...

    飞信(包含源代码)飞信(包含源代码)

    飞信是中国移动推出的一款即时通讯软件,它曾经在2000年代中期风靡一时,允许用户通过手机或互联网免费发送短信、语音消息、图片等。飞信的源代码是这款软件开发的基础,包含了实现其功能的所有编程语言脚本、数据库...

    飞信API 网页接口

    飞信API网页接口是中国移动推出的一种通信服务,它允许开发者通过特定的接口,在自己的网站或应用中集成飞信的功能,从而实现与用户手机短信的交互。飞信作为一个曾经流行的即时通讯工具,它提供了丰富的功能,如...

Global site tag (gtag.js) - Google Analytics