您的位置:首页 > 其它

利用飞信制作免费短信提醒

2009-08-01 06:42 375 查看
最近在网上看到很牛人发布的分析的飞信协议的确很不错,只是让人不快的是只提供一些做好的接口或成品exe,用户难免会为自己飞信密码担心是否安全。在接下来的时间决定写一个小程序以实现飞信在登陆到发送短信过程中的各个环节。

根据前面各位牛人的经验步骤我这里就省略不说了,对于抓包工具是采用的自制的NetworkLook程序,将包并存到记事本进行分析。

第一步:向SSIPortal登录

请求地址:https://nav.fetion.com.cn/ssiportal/SSIAppSignIn.aspx?mobileno=134XXXXXXXX&pwd=XXXX

目的:通过手机号及密码获取自己的飞信号,同时获取请求中cookie中的SSIC值,这个值将去在后面的web请求中用到。

第二步:与服务器221.176.31.1第一次通信

当然并不一定是这个地址。这个地址可以通过 以POST(我是用的Post)Nav.fetion.com.cn/nav/getsystemconfig.aspx获取系统的详细服务器地址。

发此地址发送:

F: 641142419
I: 1
Q: 1 R
L: 249

<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>

此时服务器会返回一个带有nonce值的回复串。

第三步:与服务器221.176.31.1第二次通信(登陆)

本次通信将用到第一次通信的nonce值与飞信号,飞信密码,以及飞信的Hash密码,计算机一个response

计算方式(引用nathan2007)为:

计算response和cnonce需要用到sid(飞信号)、password、domain(fetion.com.cn)、nonce。飞信计算cnonce是用了4个随机数组成一个16进制的字符串然后求这个字符串的MD5,responce的计算方法是:
1.求"sid:domain:passwd"这个utf8字符串的MD5值,得出key
2.求"key:nonce:cnonce"这个utf8字符串的MD5字符串,得出H1
3.求“REGISTER:sid"这个utf8字符串的MD5字符串,得出H2
4.求"H1:nonce:H2"这个utf8字符串的MD5字符串,即为response.

R fetion.com.cn SIP-C/2.0
F: 641142419
I: 1
Q: 2 R
A: Digest response="xxxxxxxxxxxxxxx",cnonce="xxxxxxxxxxxxxxxx" ----------(cnonce为四个随机数加密码得来)
L: 249

<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>

请求后,便可以登陆了。

此处先布一个测试。

http://www.tech138.cn/sms/default.aspx

计算Hash密码:

public class HashPasswod
{
public static string DoHashPassword(byte[] password)
{
byte[] bytes = BitConverter.GetBytes(Environment.TickCount);
return DoHashPassword(password, bytes);
}
public static string DoHashPassword(string pwd)
{
char[] chars = pwd.ToCharArray();
return DoHashPassword(Encoding.UTF8.GetBytes(chars));
}

public static string DoHashPassword(byte[] password, byte[] b0)
{
using (SHA1 sha = SHA1.Create())
{
byte[] src = sha.ComputeHash(password);
for (int i = 0; i < password.Length; i++)
{
password[i] = 0;
}
byte[] dst = new byte[b0.Length + src.Length];
Buffer.BlockCopy(b0, 0, dst, 0, b0.Length);
Buffer.BlockCopy(src, 0, dst, b0.Length, src.Length);
byte[] buffer3 = sha.ComputeHash(dst);
byte[] buffer4 = new byte[b0.Length + buffer3.Length];
Buffer.BlockCopy(b0, 0, buffer4, 0, b0.Length);
Buffer.BlockCopy(buffer3, 0, buffer4, b0.Length, buffer3.Length);
return ComputeAuthResponse.BinaryToHex(buffer4);
}
}
}

其它代码有点乱,明天整理一下在发布。Demo源码也将一起发布.

今天将昨天的发送短信代码整里了下,暂时先放出源码,源码也是东拼西凑得来.在这里就先感谢各位前辈了,不过对需要做些如:网站后台提醒,邮件提醒,或什么日程序提醒之类的还是没问题。现在只能对自己发送内容。如果想要向飞信好友发送短信(不是飞信好友不能发),就请各位自行在登陆成功之后在发送相应请求好友列表(分信协议详情这个就不在列出,网上一搜好多的,或者用抓包工具一抓就出来了。)

晕了,这个怎么上传文件的,谁给我说一下。。

到这个地址下载吧。

http://www.tech138.cn/SMS/SMS.rar

调用方式:

SMSHelper.SendSMS Send = new SMSHelper.SendSMS(“手机号”,"密码","内容支持中文");
Send.SendMessage();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: