这些大网站一般登陆的时候都是对数据包进行了一些处理,西祠胡同作为这么大的网站肯定也是这样,今天拿到这个站点分析了下,只分析登陆过程。登陆地址在这里:
http://www.xici.net/user/logon_proc.asp?login_type=logform&cityidlog=0&gotoUrl=
通过抓包发现,登陆需要如下的参数和值:
Password
UserCode 370091F92A48871EAA35C46E5B5C95FF
UserName postapp1
cityid 0
gotoUrl
keyCode 1313547343712
logpath user/logon_proc.asp?login_type=logform&cityidlog=0&gotoUrl=
verifyimg asd
有几个字段需要解释下,userCode是处理后的password,关键就是这个值的处理过程。
1:keyCode的值为keyCode new Date().getTime()
2:验证的请求地址为/service/verifyimg.asp?xNow=[keycode]的值
3:logpath的值为 location.href.substring(location.host.length + 8) 也就是当前请求地址的uri
4:verifyimg就是验证码的值
5:UserCode是处理后的的密码,处理函数为:
Logon.UserCode.value = H2(H2(Logon.Password.value,8) + "-" + document.cookie.substr(document.cookie.indexOf("SessionID") + 10, 16), 8);
其中H2的函数如下:
function C(x,l){function B(n,c){return (n<<c)|(n>>>(32-c));}function S(x,y){var l=(x&0xFFFF)+(y&0xFFFF);var w=(x>>16)+(y>>16)+(l>>16);return (w<<16)|(l&0xFFFF);}function M(q,a,b,x,s,t){return S(B(S(S(a,q),S(x,t)),s),b);}function F(a,b,c,d,x,s,t){return M((b&c)|((~b)&d),a,b,x,s,t);}function G(a,b,c,d,x,s,t){return M((b&d)|(c&(~d)),a,b,x,s,t);}function H(a,b,c,d,x,s,t){return M(b^c^d,a,b,x,s,t);}