Fetion2008 分析 Part2:登陆
概述:
近日无事的时候,学着用抓包工具分析了 飞信2008 奥运版 (版本:3.3.0370),准备写个控制台的小程序.之前我反编译过FetionFx.exe.(版本:3.2.540.0)做过一个插件一类的东东. 看了overred 是抓包分析后写了一个客户端的,也学着做了一个.(这里多谢overred).打算把分析过程发上来.和大家一起动手做一个.这里不会发源代码,顶多发些代码片断,还是自己做出来的有成就感嘛,才有意思.再者代码写的太丑.
author:http://solo.cnblogs.com
登陆:
按照nathan的分析吧,
httpanalyzer抓包截图
第一次运行Fetion时候会出现第一行请求,请求返回一些配置信息.第二行.GET 请求的https://221.130.45.201以及后面sip服务器地址即存在于此返回中
一.向SSIPortal登录
- domains
这个https请求,domain参数是两个sip服务器,估计是同时向这两个服务器登陆,登陆成功后,domain有两个,sip的uri是 yourfetionnum@fetion.com.cn,没有试验,如果用
yourfetionnum@m161.com.cn 应当也可以.
- digest
这个在fetion2006里没有.是哈希加密后的密码,configuration.dat里EncryptPassword节点值,每次可以不一样
这个加密方法,参看Imps.Client.Core.User,.幸好可以用Reflector看到这个,看不到这个,一切都歇菜.
Fetion的密码,我有点晕,搞了半天才看懂他在搞什么.set用另个随机加密 decode一下,get时又解密一下,不累么?
这个http请求头.如下:
GET /ssiportal/SSIAppSignIn.aspx?mobileno=1363xxxxx&domains=fetion.com.cn%3bm161.com.cn&digest=E2B62300E05CBB9EC911A78596511AADAD7837969Cd1BE64 HTTP/1.1
User-Agent: IIC2.0/PC 3.3.0370
Host: 221.130.45.201
Connection: Keep-Alive
返回:
HTTP/1.1 200 OK
Date: Mon, 22 Dec 2008 01:12:08 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Set-Cookie: ssic=DAgHAABvpLASGdrsz5DW6+8py5iuutrWFjpJiWFoKsjOUYJ5iiv60WkZ+BLbfBYGpHUJlvpFfZTAgxHsru4ldjlf+8XbtsTNyccelMJrt4rEGEXbMA==; path=/
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Length: 577
<?xml version="1.0" encoding="utf-8" ?><results status-code="200"><user uri="sip:11111111@fetion.com.cn;p=2256" mobile-no="22222222" user-status="101"><credentials><credential domain="fetion.com.cn" c="CrAEAAAAdGL71g6lwlgA0E4Lf9hfjcEgYxHBscMT01JaFaOspJAm4Fz1jQTC9l+smFUlD1+ls2alx8hltIan5OTvvJXHXItPlZpaDcPJsCeEs0d+bA==" /><credential domain="m161.com.cn" c="ALAEAAAhktqKG9cNVJnX9o28aStnkhm3m5HPQeUaLmNjhN1twteV2FmJ+3QnQ3AgmrSbPfJK//4LZS9uN6sN8K0B4iyYBhQQfZfnpT5enF/3YDXDRW7EQW2IrZ35KZ0r44xx9VJ7s+pmSkLNJySDB+3KASLyIkL8JxJc9nmIjDr+pkNvpQ==" /></credentials></user></results>
返回sip url以及那个cookie ssic值,后面用tcp注册里会用到.
二.向Proxy Server注册
1.第一步:获取nonce,以及加密方法类型
192.168.79.171:1709 >>>>>>>> 221.176.31.4:8080 09:16:30
R fetion.com.cn SIP-C/2.0
F: 1111111111(fetion号码)
I: 1
Q: 1 R
L: 281
<args><device type="PC" version="0" client-version="3.3.0370" /><caps value="simple-im;im-session;temp-group;personal-group" /><events value="contact;permission;system-message;personal-group" /><user-info attributes="all" /><presence><basic value="400" desc="" /></presence></args>
-----------------------------------------------------
192.168.79.171:1709 <<<<<<<< 221.176.31.4:8080 09:16:30
SIP-C/2.0 401 Unauthorized
I: 1
Q: 1 R
W: Digest algorithm="MD5-sess;SHA1-sess",nonce="2923020F52BAC51331923A6A6C54F9CF"
2.第二步,也是最后一步了.
R fetion.com.cn SIP-C/2.0
F:11111111
I: 1
Q: 2 R
A: Digest algorithm="SHA1-sess",response="0A59B914BA72A35A7979235D3F083908",cnonce="1F74056B44E7D64E2B2546A762175A28",salt="E2B62300",ssic="CrAEAAAAdGL71g6lwlgA0E4Lf9hfjcEgYxHBscMT01JaFaOspJAm4Fz1jQTC9l+smFUlD1+ls2alx8hltIan5OTvvJXHXItPlZpaDcPJsCeEs0d+bA=="
response是ComputeAuthResponse.类的ComputeResponse方法算出,这个salt随机数是EncryptPassword 再substring(0,8).2006里也没有这个参数
服务器返回200 即大功告成!HOHO!