全面分析新浪博客的登录过程

前言

为什么要拿新浪开刀呢?它是我在做模拟登录过程中非常难啃的骨头,相信各位也碰到了这样问题。所以今天就跟各位一起分析一下这个硬骨头。

以前的很多关于新浪登录的大半都是python语言的,这儿,我来个C#的。不知道各位是否给面儿啊。

进入分析过程

1、首先使用http协议的分析工具,查看浏览器跟服务器之间的交互是怎么样的?这里推荐用httpwatch,fiddler2等工具。然后就使用浏览器登陆吧,经过查看,这个登录过程基本有4、5次请求,这样频繁的请求,用于在登陆过程上,可算是用心良苦啊。其中黄色的就是请求的关键点。

image

2、这里我们键盘ctrl+F,寻找交互过程中输入的用户名,密码等参数,就不难发现

http://login.sina.com.cn/sso/prelogin.php?entry=boke&callback=sinaSSOController.preloginCallBack&su=bm9uZ2NodWFuZzA1NTIwMSU0MHNpbmEuY24%3D&rsakt=mod&client=ssologin.js(v1.4.11)&_=1377775419738

这条请求,点击Raw之后,发现了他post出去的各种参数。

image

具体的可以切换到webforms标签。看看这家伙到点在用什么加密方式。哦,天啊,su,sp,第一眼,我就知道下面的2个不是好东西(经过加密处理)。想法办法解密吧。

image

解密su,sp参数,实现POST成功提交

1、解密su,这个参数是经过Base64加密的,如果不知道是什么加密的出来的,还是非常难猜的,这里就提供了一下解密方法。

image

Encoding.Default.GetString(Convert.FromBase64String("bm9uZ2NodWFuZzA1NTIwMSU0MHNpbmEuY24="))

运行上述代码,就会获取到您的邮箱地址,格式如:"nongchuang055201%40sina.cn"

其中的@,被替换为了%40所以您用@传入,得到的总不是它的真正的值。

2、注意看这个过程,如果遇到返回4049,那么说明需要输入验证码。

image

4049,2070分别是需要验证码,验证码输入错误的意思。

3、解密sp,这个参数的解密是相当的有难度啊,查了不少文档,大致都是老版本的,貌似在几月份新浪更新了一次sp参数的加密过程,你看他这么用心良苦,我们也要以牙还牙哦。数一数这个sp的位数。

image

答案是256位的。此处消耗我1分钟。眼睛要瞎掉了。

各种查资料,基本无答案,没办法了,无解了。只有自己写了。此处消耗5个小时,根据之前同志们的劳动成果,我这里就公开一个webservice吧。免费提供给大家这个sp参数的获取方法。

image

要想获取这个sp,就引用我的webservice吧。但是,还要传入几个参数,pwd-您的密码,还有后面的三个参数,让我们慢慢道来。

获取关键性的3个参数

1、仔细看看我们之前分析获得到的这个图片,第一个黄色关键请求。

image

2、鼠标点击到它上面,然后看看response里面的是什么东东。有你需要的哦。

image

3、这些参数都收集全了,那么就可以组合提交服务器了。至于正则的写法,根据大家的心情,我是这样写的。

image

4、这里需要注意一点,这处的请求,用到了我们之前说到的su参数。

string username = you login name;
byte[] b = System.Text.Encoding.Default.GetBytes(username);
string su = Convert.ToBase64String(b);

总结一下

1、get http://login.sina.com.cn/sso/prelogin.php?entry=boke&callback=sinaSSOController.preloginCallBack&su=bm9uZ2NodWFuZzA1NTIwMSU0MHNpbmEuY24%3D&rsakt=mod&client=ssologin.js(v1.4.11)&_=1377775419738

su是加密过的,需要处理一下。
2、post http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.11)

替换其中的postdata的各种参数即可。

image

返回retcode :0,就代表成功了。

image

原文地址:https://www.cnblogs.com/renzhe/p/3290129.html