登录

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

中国移动飞信协议分析相关推荐

  1. 中国移动飞信WAP登陆分析及脚本

    中国移动飞信WAP网页版 http://f.10086.cn/im5/ 用WAP飞信登录并向好友发送信息,同时用wireshark抓包. 1.过滤POST表单提交数据包(wireshark规则: ht ...

  2. 中国移动飞信免费发短信API接口(第三方 Fetion API)

    [文章作者:张宴 本文版本:v1.1 最后修改:2010.08.03 转载请注明原文链接: http://blog.s135.com/fetion_api/ ] 备注:2010年7月底移动飞信修改协议 ...

  3. 中国移动飞信免费发短信API接口(第三方 Fetion API

    飞信 是由中国移动通信集团公司推出的一款集商务应用和娱乐功能为一体的,基于手机应用以及与Internet深度互通的即时通讯产品,可免费给好友发送短信. 1.下载中国移动飞信PC客户端软件(http:/ ...

  4. QQ协议分析及其还原(一)

    原文网址 QQ协议分析及其还原(一) 2012-02-26 QQ,一个通信工具,号称6亿的用户量,现在每天的活跃账户在1亿以上.在中国,只要是一个经常上网的网民,手中必须得有一个,当然也可以没有,但是 ...

  5. 钉钉小程序可以上传文件_怎样禁止钉钉外发文件?钉钉文件传输协议分析

    钉钉(DingTalk)是中国领先的智能移动办公平台,用于商务沟通和工作协同.越来越多企业采用钉钉来进行办公自动化,但是由此带来的信息安全问题也不能忽视.钉钉软件可以很容易的上传附件.外发和接收文件, ...

  6. 蓝牙协议分析(2)_协议架构

    原文链接:蓝牙协议分析(2)_协议架构 (wowotech.net) 系列索引:蓝牙协议分析(1)_基本概念 目录 1.前言 2.协议层次 2.1 物理层 2.1.1 Physical Channel ...

  7. 计算机网络协议分析全知识点总结兼期末复习重点

    计算机网络协议分析知识点总结 第一章 概述 数据封装与解封装 互联网使用的四种地址 第二章 链路层 信道类型与帧类型* 以太网(Ethernet II帧格式*,MTU) CSMA/CD与CDMA/CA ...

  8. 最新QQ2008贺岁协议分析第三版

    一. QQ2008 Touch包0x91 a) 0x2aa8 客户端 原始数据: 02 11 5b 00 91 2a a8 38 25 f5 91 5d 4c af 65 54 44 6d 76 7b ...

  9. 中国移动飞信的研究 笔记一

    中国移动飞信的研究 笔记一 早就 听说 飞信是微软为移动做的.而且 程序还没有 加混淆 所以 可以反编译. 用 Reflector 就可以看见源代码. 网上一搜 发现到目前为止 已经有不少公司或个人对 ...

最新文章

  1. SAP 会计凭证和物料凭证的关系
  2. 用群体测试开发成功的应用程序
  3. 美元汇率pascal程序
  4. 【NLP】巧借“他山之石”,生成信息量大、可读性强且稳定的摘要
  5. OpenGL noperspective在窗口空间中线性插值的实例
  6. 第十二章:Java_常用类
  7. 怎么从转移特性曲线上看dibl_「科普向」这篇让你快速搞懂IGBT的静态特性
  8. MongoDB安装中断问题 - 踩坑篇
  9. Java虚拟机学习 - 体系结构 内存模型
  10. XDeepFM 模型,字节跳动短视频内容理解和推荐系统
  11. 菜鸟教程html5常用标签,HTML5 Canvas | w3cschool菜鸟教程
  12. 企业常用OSPF组网配置示例
  13. 测试librdkafka
  14. mingw编译CMake后的OpenCV文件时出现:mingw32-make : 无法将“mingw32-make”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。
  15. Java十二平均律判断
  16. 北京最好的商标律师解析商标侵权的处罚规定
  17. w8服务器dns修改,怎么修改DNS Win8修改DNS服务器地址的具体步骤图解
  18. 大家小心了,做寄生虫排名骗子
  19. docker启动容器之后马上又自动关闭
  20. 51job爬虫-xpath

热门文章

  1. 用什么软件去除视频上的水印?
  2. 目标检测评价指标合集
  3. Unity Dotween插件的运动曲线(Ease)介绍Ease选项Ease效果示例以及C#修改动画曲线功能
  4. vulnhub靶场,Tomato
  5. Python代码图像特效算法制作
  6. 深入了解 Vue 响应式原理(数据拦截)
  7. 【IC知识点】电路设计中的去耦问题decouple
  8. 从ihmc将研发全尺寸人形机器人Nadia带来的关于硬件平台和驱动原理的思考
  9. C#内功修炼(算法)——分治法(一)
  10. 类的学习之士兵突击(冯狗)