(转载自basic coder)
飞信2010出了有一段时间了,但到现在也只是beta版,所以就没 怎么关注它,今天下载了一个分析了一下它的协议,才发现飞信迟迟不推出新版本是因为它的协议有了比较大的变动,似乎想要把我们这些山寨货赶尽杀绝,也就是 传说中的V4版本的协议,很多信令后面都加上了V4标志,这也意味着想要适应2010,协议部分就必须重写。
飞信的登录协议比以前的版本有了显著的变化,最明显的变化在于它对登录信息的加密处理上,旧版本的飞信登录信息的加密让人看起来有点小儿科,把几个 字段这样加起来做散列,然后再那样加起来做散列,来来回回折腾最后得出一个response传回服务器验证。
2010的登录信息处理采用了非对称加密RSA算法。先贴几个抓出来的协议包吧:
1.SSI登录
SSI登录仍然采用了https登录,登录服务器应该没变,还是uid.fetion.com.cn。登录参数变了,加上必须的参数uri如下:
https://uid.fetion.com.cn/ssiportal/SSIAppSignInV4.aspx?mobileno=1348888888&&domains=fetion.com.cn%3bm161.com.cn%3bwww.ikuwa.cn&&v4digest-type=2&v4digest=password
注意:这里的密码也不再是v3里面的明文密码了,呵呵。
其中demains里面有三个域名,第一个应该是必须的,后两个不知道是哪家第三方的公司的域名,估计可以去掉,v4digest-type是密码 类型,有如下定义:
1
2
3
4
5
6
|
public enum PasswordTypeEnum
{
V3,
V4Temp,
V4
}
|
v4digest就是密码了,然后还有一些可选参数像algorithm之类的我也就没细看它的功能。
2.sipC注册
R fetion.com.cn SIP-C/4.0
F: 916098834
I: 1
Q: 1 R
CN: 1CF1A05B2DD0281755997ADC70F82B16
CL: type=”pc” ,version=”3.6.1900″
这是sipC注册信息,CN就是旧版本里的cnouce , CL就是客户端信息了。服务器收到后回复信令:
SIP-C/4.0 401 Unauthoried
F: 916098834
I: 1
Q: 1 R
W: Digest algorithm=”SHA1-sess-
v4″,nonce=”389CE97D594B290366DCD4CC2DA5368D”,key=”D84CA40D849FEF3B45F02BBA6900D2A1B3010001″,signature=”62F5BA9D9146D477CDECAE1FD47098D0CABBFD31D683B5223B5D52″
为了节约篇幅key和signature的内容我都删去了一部分,key就是共享密钥,这个用来对验证信息做非对称加密用的,signature是 签名,用来对密钥信息做验证的。
3.sipC验证
R fetion.com.cn SIP-C/4.0
F: 916098834
I: 1
Q: 2 R
A: Digest
response=”5041619340F10D101149E45A8E2343294E8D5F4F5086C24703EE00CAA4DF8F9D2951E9F285C458F556
7454F5C35084A8CB7C5E3AA8D31D1FC3B9DD7CF395631E5EDE73E2E683D54C9E521443D31792E18B81CA26542BF5
79F662459CD5F6E4C0EC29767B6C5F775C10AF19B544B6957AC98FF6A420C7486BE68837A576036118″,algorith
m=”SHA1-sess-v4″
AK: ak-value
L: 426
消息体里面的xml信息就不贴出来了。最关键的部分是通信sipC注册返回的信息来计算这个response,计算response共需要用到4个 参数,publickey,nouce,password,aeskey.
publickey刚才注册返回的key值。
nouce 注册返回的nouce值。
password用户密码。
aeskey 用户通过 Rijndael算法生成的AES串。
response的计算规则是:
1.str = nouce + password + aeskey
2.对str进行RSA非对称加密,RSA算法具体细节我不懂,不过查看了一个微软MSDN了也大体知道是怎么工作的,它在计算的时候需要 Exponent(e,公钥指数),Modulus(n , 模),D (d , 私钥指数),不过我看飞信在传递RSA参数的时候只是指定了e和n,e是截取了公钥的前256的字符,n是截取了公钥的256个以后的字符。
3.通过2计算出来的参数对str进行加密,得到的就是response值。
将验证信令发送到服务器之后服务器会返回用户的详细信息,这与之前的版本之比也是一大改进,省去了再额外构造信令去GetPersonalInfo
另外,新版本的协议在获取用户信息上改动也很大,sipC验证完成后用户个人信息和联系人列表就会随返回消息一同发过来,旧版本会先发送 GetContactList信息获取用户列表,然后再构造一个庞大的Subscription去订阅这些用户的消息,新版本将这些完全简化了,发送如下 一条信令就可以订阅所有用户的信息,用户信息就会被一条一条地推送过来。
SUB fetion.com.cn SIP-C/4.0
F: 916098834
I: 8
Q: 1 SUB
N: PresenceV4
L: 95
<args>
<subscription self="v4default;mail-count" buddy="v4default" version="320595567" />
</args>
格式如下:
BN 916098834 SIP-C/4.0
N: PresenceV4
I: 1
L: 190
Q: 5 BN
<events>
<event type="PresenceChanged">
<contacts>
<c id="601820518"><pr di="" b="0" d="" dt="" dc="0"/></c>
<c id="464997176"><pr di="" b="0" d="" dt="" dc="0"/></c>
</contacts>
</event>
</events>
将字段名称也简化了,这样有助于在数据传输时候节省字节数,效率会更高一些。
OK,重要的变化差不多也就这些了,真要动手去写的话也够我忙活一阵子的了,现在没那么多时间了,要老老实实专心做项目了,2010到现在也只是个 beta版,我先静观其变吧,免得做无用功。
无语了,早上感觉电脑有些不对劲 ,下了一个360检测了一下~结果……还是看图吧……

此工具已经更新,详情请点击
Kaisir说过等自己人人网访问量到达10000的时候就不在玩人人了,眼看现在马上就到1W了,又不想放弃校内写的那些日志,所以写了一款小工具模拟登陆人人网把自己的日志都备份了,期间也查看过很多朋友的日志备份工具,大部分都是python写的,我对这玩意实在不感冒,出了错也不知该如何调试,所以拿C#写了一款,功能很简单,就是在D盘的test文件夹下将你的日志全备份出来,很遗憾,还不支持图片的本地保存,此外应该生成xml的,现在也只是简单的把标题啊时间啊分类啊内容啊通过正则表达式取出来了,以后有时间有机会的话慢慢改进吧……做这个小玩意可是使自己熟练正则表达式的应用了,吼吼~~~
点此下载 人人网日志导出工具
源代码详见:源代码下载
很多网站都设计了在某些日子使网页变灰,今天查了下,特将实现方法公布如下:
方法1:只需要在页面head之间插入:
<style>
html { filter:progid:DXImageTranorm.Microsoft.BasicImage(grayscale=1); }
</style>
方 法2:在css文档种加入以下代码
html { filter:progid:DXImageTranorm.Microsoft.BasicImage(grayscale=1); }
不过目前看来这种方法对FireFox不起作用~~囧...如果大家有对火狐起作用的方法欢迎留言交流~~
示例效果只要用IE访问Kaisir的部落格就应该可以看到咯~~

PS:
看Kaisir某段时间的浏览器统计情况饼图,使用IE的用户还是不少的,占了所有用户的73.07%
看来我得加强下部落格针对IE的CSS显示效果了...目前针对IE还是有不少问题的……囧....
2010-4-21日16:44 更新可以使Firefox等内核浏览器变灰的方法,方法来源于solrex.org
“
但是很遗憾这 种方法并不能支持 Firefox 和 Chrome。这篇博客介绍一种支持各种浏览器的网站变灰方法,试验其支持 Firefox、Chrome 和 IE,据说可以支持 Opera(未测试),方法比较简单,就直接介绍步骤了。
1. 到这里下载 grayscale.js 文件到你网站的根目录(或者也可以不下载,直接引入该 js,未测试)。
2. 在网站的 footer 或者 header 等全局的文件中插入以下代码(注意,$() 和 .load handler需要 jquery.js 的支持,不使用 jquery 的同学可以自行搜索解决标签查找和 window onload 事件处理问题,例如这 里和这里):
<script type="text/javascript" src="/grayscale.js"></script>
<script type="text/javascript">
$(window).load(function () {
grayscale( $('body') );
});
</script>
(请将以上代码中出现的全角及中文字符替换为英文)
该方法的缺点 是:
1. 页面加载完后才对整个页面进行变灰操作;
2. 在非 IE 浏览器中不支持来自其它域名的网站图片的变灰;
3. 造成非 IE 浏览器在加载完页面后进行大量 js 计算,该计算负担可以通过仅变灰 img, a 等标签而不是 body 来优化。
”
Kaisir于2010年8月15日 在FireFox测试下测试成功~~


遇到这种情况怎么办?很简单,删除默认的Word模板就好了~~
步骤1:找到C:Documents and Settings你的用户名Application DataMicrosoftTemplates文件夹。(可能需要在文件夹属性里设置显示所有文件或文件夹,或者你可以直接把这个路径粘贴到运行里。)
步骤2:删除Normal.dot
在三角猫 DeltaCat的部落格看到一篇关于循环分组示例的文章,特转载于此:
今天,有个网友咨询一个正则表达式的使用,问题描述如下:
"@Beijing|北京|101@Shanghai|上海|102@Tianjin|天 津|103@Chongqing|重庆|104@Haerbin|哈尔滨|105@Dalian|大连|106"
分解成 “Beijing 北京 101“,"Shanghai 上海 102” 的单独项。
这个正则的使用,是循环分组的一个典型应用。
C#的写法:
string str = @"@Beijing|北京|101@Shanghai|上海|102@Tianjin|天津|103@Chongqing|重庆|104@Haerbin|哈尔滨|105@Dalian|大连|106";
Regex reg = new Regex(@"@([^|]*)|([^|]*)|([^@]*)");
foreach (Match m in reg.Matches(str))
{
Console.WriteLine("{0} {1} {2}", m.Groups[1].Value, m.Groups[2].Value, m.Groups[3].Value);
}

1、首先启动sql server 代理
2、展开“管理”-“维护计划”--新建一个维护计划
3、在左侧的窗体中拖过来一个“执行 T-SQL语句”任务
4、双击这个任务,输入以下Codes:

哈哈 看到这个你有想到什么~~
哈哈。。。偶然从Swappy的部落格看到这个创意~~
不过说来也巧,Kaisir,Swappy,Google恰好都是6个英文字母~~
好玩吧。。。哈哈。。。Kaisir也山寨了一把。。。
好久没写类似心情故事的东西了
天天各种各样的事情攒在手边 连静静思考问题的时间都少的可怜
真的不知道这样是好还是不好
每天大都跟通电的只认识二进制的白痴机器打交道
我真怕忽然有一天我也会变成只认0&1的笨蛋
充实的有些可怕,
不是不能让自己空闲下来
只是不敢
怕有些深埋于心底的记忆又被自己挖了出来
还在搞P2V,昨天30多G的数据不知道拷贝到几点,反正我睡了~~嘿嘿...今天早上30多G的Tar又解了不知道多长时间~~反正我忙完手头的事情,他就解压缩完成了~~吼吼~~
配置不算很顺利,很多Linux必须的包都没有安装,以前玩Ubuntu,现在搞RHEL还真的有些不习惯~没有了apt-get,连tasksel的用法也变得不一样~~甚至连ipkg都没有~~哎哎 只好查了一下资料,找到了apt-get的安装方法~~~毕竟我大部分时间都不在机房的,那里噪音&辐射都很可观~~所以shell还是王道啊~~哈哈~~apt-get这种小工具可以极大的提高我的效率~~嘻嘻~~特将安装方法记录于下:
>>wget http://dag.wieers.com/packages/apt/apt-0.5.15lorg3.1-4.el4.rf.i386.rpm
>>rpm -ivh apt-0.5.15lorg3.1-4.el4.rf.i386.rpm
>>wget http://dag.wieers.com/packages/rpmforge-release/rpmforge-release-0.3.4-1.el4.rf.i386.rpm
>>rpm -Uvh rpmforge-release-0.3.4-1.el4.rf.i386.rpm
Enjoy~~