登陸過程
分析方法
- 使用HTTP抓包工具獲取微博登陸過程的HTTP包數據;
- 分析主要的登錄頁面的 請求頭,響應頭,post參數信息;
- 分析登錄過程中利用的加載的js信息;
抓包可能有很多圖片信息,直接過濾。
重點關注帶有login先關字段的URL
重點關注如下區域的信息
這裏我就直接上登錄分析結果。
第一步
GET訪問 :https://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=&rsakt=mod&client=ssologin.js(v1.4.18)&_=1479274345685
其中su
指代用戶名【經過BASE64編碼後】
抓包數據:
訪問成功
訪問結果:
sinaSSOController.preloginCallBack({"retcode":0,"servertime":1479274346,"pcid":"ja-3e2faa2906000fb601eb32268497ee26f018","nonce":"LQNTRW","pubkey":"EB2A38568661887FA180BDDB5CABD5F21C7BFD59C090CB2D245A87AC253062882729293E5506350508E7F9AA3BB77F4333231490F915F6D63C55FE2F08A49B353F444AD3993CACC02DB784ABBB8E42A9B1BBFFFB38BE18D78E87A0E41B9B8F73A928EE0CCEE1F6739884B9777E4FE9E88A1BBE495927AC4A799B3181D6442443","rsakv":"1330428213","uid":"6041902159","exectime":8})
格式化後:
重點信息 Name Type Value
否 retcode object 0
是 servertime object 1479274346
pcid object "ja-3e2faa2906000fb601eb32268497ee26f018"
是 nonce object "LQNTRW"
是 pubkey object "EB2A38568661887FA180BDDB5CABD5F21C7BFD59C090CB2D245A87AC253062882729293E5506350508E7F9AA3BB77F4333231490F915F6D63C55FE2F08A49B353F444AD3993CACC02DB784ABBB8E42A9B1BBFFFB38BE18D78E87A0E41B9B8F73A928EE0CCEE1F6739884B9777E4FE9E88A1BBE495927AC4A799B3181D6442443"
否 rsakv object "1330428213"
否 uid object "6041902159"
否 exectime object 8
是 pinCode
訪問失敗
請求失敗則獲取不到重要的登錄信息,想辦法解決。
第二步
POST訪問: http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.18)
抓包數據:
需要準備POST的參數:
是否固定 參數名 參數值
是 entry weibo
是 gateway 1
是 from
是 savestate 7
是 useticket 1
是 pagerefer
是 vsnf 1
否 su MTcxODQ1MDM0Njg=
是 service miniblog
否 servertime 1479274381
否 nonce QC24GW
是 pwencode rsa2
否 rsakv 1330428213
否 sp 168c045a164d28bbf5c516721448b9d560ad0acece2fd61c08712742da0764a1ca7150bf0094c8e380eef42f493ba783e1d610c6564a3445783b14cdf957ec620f07ba083c5d5560b366203930cb187cd207d99e39e8a5c3c2b8baf3f731dbbe9b985798b5214b9b3a2abaf0c636a53b7e5878124055bfdfbc3910b43395d7b3
是 sr 1024*820
是 encoding UTF-8
是 prelt 190
是 url http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack
是 returntype META
可選參數:
是 door 驗證碼的值[只有需要驗證碼的時候需要]
注意:返回的參數是否固定,可以通過多次登錄微博,查看參數是否變化。
POST參數來源:
參數 來源
su 用戶名base64編碼
servertime 前次訪問獲得
nonce 前次訪問獲得
rsakv 前次訪問獲得
sp 密碼經過rsa加密所得
訪問成功
成功返回:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK" />
<title>新浪通行證</title>
<script charset="utf-8" src="http://i.sso.sina.com.cn/js/ssologin.js"></script>
</head>
<body>
正在登錄 ...
<script>
try{sinaSSOController.setCrossDomainUrlList({"retcode":0,"arrURL":["http:\/\/passport.97973.com\/sso\/crossdomain?action=login&savestate=1510810372","http:\/\/passport.weibo.cn\/sso\/crossdomain?action=login&savestate=1"]});}
catch(e){
var msg = e.message;
var img = new Image();
var type = 1;
img.src = 'http://login.sina.com.cn/sso/debuglog?msg=' + msg +'&type=' + type;
}try{sinaSSOController.crossDomainAction('login',function(){location.replace('http://passport.weibo.com/wbsso/login?ssosavestate=1510810372&url=http%3A%2F%2Fweibo.com%2Fajaxlogin.php%3Fframelogin%3D1%26callback%3Dparent.sinaSSOController.feedBackUrlCallBack%26sudaref%3Dweibo.com&ticket=ST-NjAyMzIwMzgxMg==-1479274372-ja-FDEC9B35BBE7FD284B9E4FBB1D53F68A&retcode=0');});}
catch(e){
var msg = e.message;
var img = new Image();
var type = 2;
img.src = 'http://login.sina.com.cn/sso/debuglog?msg=' + msg +'&type=' + type;
}
</script>
</body>
</html>
重要信息:
跨域請求: http://passport.weibo.com/wbsso/login?ssosavestate=1510810372&url=http%3A%2F%2Fweibo.com%2Fajaxlogin.php%3Fframelogin%3D1%26callback%3Dparent.sinaSSOController.feedBackUrlCallBack%26sudaref%3Dweibo.com&ticket=ST-NjAyMzIwMzgxMg==-1479274372-ja-FDEC9B35BBE7FD284B9E4FBB1D53F68A&retcode=0
訪問失敗
自行處理。
第三步
請求跨域URL http://passport.weibo.com/wbsso/login?ssosavestate=1510810372&url=http%3A%2F%2Fweibo.com%2Fajaxlogin.php%3Fframelogin%3D1%26callback%3Dparent.sinaSSOController.feedBackUrlCallBack%26sudaref%3Dweibo.com&ticket=ST-NjAyMzIwMzgxMg==-1479274372-ja-FDEC9B35BBE7FD284B9E4FBB1D53F68A&retcode=0
訪問該url,會重定向到:http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack&sudaref=weibo.com
成功請求
最終返回:
<html><head><script language='javascript'>parent.sinaSSOController.feedBackUrlCallBack({"result":true,"userinfo":{"uniqueid":"6023203812","userid":null,"displayname":null,"userdomain":"?wvr=5&lf=reg"}});</script></head><body></body></html>
重要信息:
- result: 返回登陸是否成功信息
- userinfo:返回用戶信息
- userdomain:返回用戶的主頁【反問用戶主頁一般會有重定向】
請求失敗
關於用戶主頁
使用HttpClient,設置自動重定向,不需要關心本段。
請求個人主頁:
登陸成功後,訪問http://weibo.com/?wvr=5&lf=reg
返回重定向:
- 一種情況:
/username/home?wvr=5&lf=reg
- 還有一種情況:
/u/6023203812/home?wvr=5&lf=reg
情況一
訪問重定向地址:http://weibo.com/username/home?wvr=5&lf=reg
繼續重定向:http://weibo.com/nguide/interest
繼續重定向:http://weibo.com/nguide/interests
最後重定向到:http://weibo.com/hgfdodo/home
此時訪問成功。
情況二
不需要再次重定向,訪問 http://weibo.com/u/6023203812/home?wvr=5&lf=reg
其中6023203812
和?wvr=5&lf=reg
都是userinfo信息中獲取的。