关于新浪微博模拟登陆的一些小研究.


       前段时间有空,分析了一下新浪微博登陆验证,结合几篇文章摸了一些门道,但是最近比较忙,没时间继续深究,就写一下分析的过程和结果,,供新手朋友参考.大神请无视我.

  

      关于新浪SSO单点登录的技术实现之类的,请自行脑补,以我的水平也无法深入浅出的讲明白.我只说过程和结果.

 

        首先我们打开Fiddler并监视浏览器进程 .浏览器打开微博登陆页面 http://weibo.com/   这时候就能看到捕获了很多数据

  

     


     注意看   /sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=&rsakt=mod&client=ssologin.js(v1.4.5)&_=1363856505579 HTTP/1.1 这条数据    这里是向服务器发送预登陆信息.


     这个预登陆信息是什么时候发送的呢?是在这个对话框

    失去焦点的时候发送的. 

  

       假设我们的登录用户名是test 那么我们在fiddler中用表格方式查看 就发现这条数据是向预登陆服务器发送了如下的信息

关于新浪微博模拟登陆的一些小研究._第1张图片



其中要注意的就是su值,它是由用户名 test经过base64加密后得到的值。


发送预登陆信息后,服务器会返回类似于这样的信息

sinaSSOController.preloginCallBack({"retcode":0,"servertime":1360031246,"pcid":"gz-6a6b1dda0c43601d5b952698b281a274b755","nonce":"5921EV","pubkey":"EB2A38568661887FA180BDDB5CABD5F21C7BFD59C090CB2D245A87AC253062882729293E5506350508E7F9AA3BB77F4333231490F915F6D63C55FE2F08A49B353F444AD3993CACC02DB784ABBB8E42A9B1BBFFFB38BE18D78E87A0E41B9B8F73A928EE0CCEE1F6739884B9777E4FE9E88A1BBE495927AC4A799B3181D6442443","rsakv":"1330428213","showpin":0,"exectime":7})


这里 servertime是服务器返回来的时间

nonce我不知道是什么东西,但是接下来要用到。

pubkey是作为密码RSA加密的公钥


那么我们接着在用户名和密码处输入正确的值,然后点击登录新浪微博的按钮。fiddler会监控到浏览器发送了类似于这样的值

POST /sso/login.php?client=ssologin.js(v1.4.5) HTTP/1.1       浏览器以post方式发送以下数据

entry=weibo&gateway=1&from=&savestate=0&useticket=1&pagerefer=&vsnf=1&su=aXQyMDA3emh1bGlu&service=miniblog&servertime=1363857433&nonce=6HO1P5&pwencode=rsa2&rsakv=1330428213&sp=b26ef2b88b003b1ff962c287ede158c209e64b19dd9b5e2ae52fb21cb6fa703f7c961ac006ea8dec5add4a2a937adca7b7888cfeaf57ee0c578d6e25fb55fff828ce5d5af55ca739e49796441ee41fbea65da7d90e7c7e64f4af3cea9dfe9ecb10c007358d32577634ffb20cf158a60f07a697da5a08125a8b4b3db358a63947&encoding=UTF-8&prelt=1581&url=http%3A%2F%2Fweibo.com%2Fajaxlogin.php%3Fframelogin%3D1%26callback%3Dparent.sinaSSOController.feedBackUrlCallBack&returntype=META


这里面有很多属性的值是不变的可以直接套用,比如useticket  gateway等,有些是需要改变的。

su是base64加密后的用户名

servertime是预登陆时候返回来的服务器时间

nonce是预登陆返回来的数值

其他的都没什么好说的 ,只是这个sp的值要说一下,这个sp就是加密后的登录密码。

密码的加密是在本地通过一个js完成的,这个js的名字一直 ssologin.js的内容,我去除了无关的js脚本,只留下了密码加密函数,加密的函数需要用到的参数就有服务器时间,nonce,预登陆返回的公钥。

大概是这样

关于新浪微博模拟登陆的一些小研究._第2张图片



写了一个测试的html来查看计算得到的密码值。和发送的实际密码比。

关于新浪微博模拟登陆的一些小研究._第3张图片



这里就基本上都能得到要向登录服务器发送的值了。但是我现在存在一个问题,就是新浪登录时候js的RSA加密函数,如何在C#的Winform中调用js函数,

一开始用了网上流传webBrowser方式,失败,DotNetScriptEngine,失败,微软自带的一个js解释dll,失败。人生太悲催了。无奈之下用谷歌v8引擎,。最后也是编译时候各种烦恼。最后放弃。人品太差。。


/****************/

Witch_Soya 2013年3月21日17:41:34

/***************/




   

你可能感兴趣的:(关于新浪微博模拟登陆的一些小研究.)