直接入题
通过firebug等工具,可以很直观的分析出来,webqq3的登录过程如下:(假设qq号为888888)
1、
GET:http:
//
ptlogin2.qq.com/check?appid=1003903&uin=888888
通过分析,其中appid大部分是1003903,可以固定为这个。
服务器返回如下格式:
ptui_checkVC(
'
0
'
,
'
!ZLE
'
);
//
不需要图片验证码,红字为验证码,不需要用户输入
ptui_checkVC(
'
1
'
,
*
'
95ab7db15e5ab17f50f25d33598259e83ccc098c4af2f8a4
'
)
//
需要验证码,红色为获取验证码图片的信息
2、
GET:http:
//
captcha.qq.com/getimage?aid=1003903&uin= 888888&vc_type=95ab7db15e5ab17f50f25d33598259e83ccc098c4af2f8a4
这时返回验证码图片
3、第一次登陆握手:
http:
//
ptlogin2.qq.com/login?u=888888&p=密码&verifycode=验证码&remenber_uin=1&aid=1003903&u1=http%3A%2F%2Fweb3.qq.com%2Floginproxy.html&h=1&ptredirect=0&ptlang=2052&from_ui=1&pttype=1&dumy=&fp=loginerroralert
密码是经过多次md5转换后的值,转换函数我放到在最后。验证码如果需要图片的话,就是图片上的字符,否则就是那个!开头的字符串,后面红色的是ajax的跳转信息,必须要。
这次登陆,相当于试探登陆,并非真正的登陆,服务器返回有以下几种格式:
ptuiCB(
'
0
'
,
'
0
'
,
*
'
http://web2.qq.com/loginproxy.html?strong=true
'
,
'
0
'
,
'
登录成功!
'
);
ptuiCB( ' 4 ' , ' 0 ' , '' , ' 0 ' , ' 您输入的验证码有误,请重试。 ' );
ptuiCB( ' 3 ' , ' 0 ' , '' , ' 0 ' , ' 您输入的密码有误,请重试。 ' );
ptuiCB( ' 4 ' , ' 0 ' , '' , ' 0 ' , ' 您输入的验证码有误,请重试。 ' );
ptuiCB( ' 3 ' , ' 0 ' , '' , ' 0 ' , ' 您输入的密码有误,请重试。 ' );
4、真正的登陆,这次登陆是独占是登陆,也就是说,另一地方正在使用的同一账号,会被挤下线。
POST:http:
//
d.web2.qq.com/channel/login2 //这就是web3.0的登陆地址
post数据:
{ " status " : "" online "" , " ptwebqq " : "" , " passwd_sig " : "" , " clientid " : "" }
{ " status " : "" online "" , " ptwebqq " : "" , " passwd_sig " : "" , " clientid " : "" }
//登录信息 online也就是我在线上,共有六种信息后面两个东西是cookie里的东西,在上面的登陆步骤中,会得到的
这次登陆,返回的cookies中,有两个东西必须保存起来,算是通信密钥吧,从qq上线到离线的整个周期,都需要:
vfwebqq 和 psessionid
到现在,登陆完毕。
在以后的整个过程中,会发现,所有的通信内容都是都是提交JSON与获取JSON数据,很方便处理。
下面贴上md5换算的js函数:
/*
调用方式:
md5(md5_3("qq号码")+"验证码")
*/
var chrsz = 8 ;
var mode = 32 ;
var hexcase = 1 ;
function preprocess(A){
var B = "" ;
B += A.verifycode.value;
B = B.toUpperCase();
A.p.value = md5(md5_3(A.p.value) + B);
return true ;
}
function md5_3(B){
var A = new Array;
A = core_md5(str2binl(B),B.length * chrsz);
A = core_md5(A, 16 * chrsz);
A = core_md5(A, 16 * chrsz);
return binl2hex(A);
}
function md5(A){
return hex_md5(A);
}
function hex_md5(A){
return binl2hex(core_md5(str2binl(A),A.length * chrsz));
}
function str_hmac_md5(A,B){
return binl2str(core_hmac_md5(A,B));
}
function core_md5(K,F){
K[F >> 5 ] |= 128 << ((F) % 32 );
K[(((F + 64 ) >>> 9 ) << 4 ) + 14 ] = F;
var J = 1732584193 ;
var I =- 271733879 ;
var H =- 1732584194 ;
var G = 271733878 ;
for ( var C = 0 ;C < K.length;C += 16 ){
var E = J;
var D = I;
var B = H;
var A = G;
J = md5_ff(J,I,H,G,K[C + 0 ], 7 , - 680876936 );
G = md5_ff(G,J,I,H,K[C + 1 ], 12 , - 389564586 );
H = md5_ff(H,G,J,I,K[C + 2 ], 17 , 606105819 );
I = md5_ff(I,H,G,J,K[C + 3 ], 22 , - 1044525330 );
J = md5_ff(J,I,H,G,K[C + 4 ], 7 , - 176418897 );
G = md5_ff(G,J,I,H,K[C + 5 ], 12 , 1200080426 );
H = md5_ff(H,G,J,I,K[C + 6 ], 17 , - 1473231341 );
I = md5_ff(I,H,G,J,K[C + 7 ], 22 , - 45705983 );
J = md5_ff(J,I,H,G,K[C + 8 ], 7 , 1770035416 );
G = md5_ff(G,J,I,H,K[C + 9 ], 12 , - 1958414417 );
H = md5_ff(H,G,J,I,K[C + 10 ], 17 , - 42063 );
I = md5_ff(I,H,G,J,K[C + 11 ], 22 , - 1990404162 );
J = md5_ff(J,I,H,G,K[C + 12 ], 7 , 1804603682 );
G = md5_ff(G,J,I,H,K[C + 13 ], 12 , - 40341101 );
H = md5_ff(H,G,J,I,K[C + 14 ], 17 , - 1502002290 );
I = md5_ff(I,H,G,J,K[C + 15 ], 22 , 1236535329 );
J = md5_gg(J,I,H,G,K[C + 1 ], 5 , - 165796510 );
G = md5_gg(G,J,I,H,K[C + 6 ], 9 , - 1069501632 );
H = md5_gg(H,G,J,I,K[C + 11 ], 14 , 643717713 );
I = md5_gg(I,H,G,J,K[C + 0 ], 20 , - 373897302 );
J = md5_gg(J,I,H,G,K[C + 5 ], 5 , - 701558691 );
G = md5_gg(G,J,I,H,K[C + 10 ], 9 , 38016083 );
H = md5_gg(H,G,J,I,K[C + 15 ], 14 , - 660478335 );
I = md5_gg(I,H,G,J,K[C + 4 ], 20 , - 405537848 );
J = md5_gg(J,I,H,G,K[C + 9 ], 5 , 568446438 );
G = md5_gg(G,J,I,H,K[C + 14 ], 9 , - 1019803690 );
H = md5_gg(H,G,J,I,K[C + 3 ], 14 , - 187363961 );
I = md5_gg(I,H,G,J,K[C + 8 ], 20 , 1163531501 );
J = md5_gg(J,I,H,G,K[C + 13 ], 5 , - 1444681467 );
G = md5_gg(G,J,I,H,K[C + 2 ], 9 , - 51403784 );
H = md5_gg(H,G,J,I,K[C + 7 ], 14 , 1735328473 );
I = md5_gg(I,H,G,J,K[C + 12 ], 20 , - 1926607734 );
J = md5_hh(J,I,H,G,K[C + 5 ], 4 , - 378558 );
G = md5_hh(G,J,I,H,K[C + 8 ], 11 , - 2022574463 );
H = md5_hh(H,G,J,I,K[C + 11 ], 16 , 1839030562 );
I = md5_hh(I,H,G,J,K[C + 14 ], 23 , - 35309556 );
J = md5_hh(J,I,H,G,K[C + 1 ], 4 , - 1530992060 );
G = md5_hh(G,J,I,H,K[C + 4 ], 11 , 1272893353 );
H = md5_hh(H,G,J,I,K[C + 7 ], 16 , - 155497632 );
I = md5_hh(I,H,G,J,K[C + 10 ], 23 , - 1094730640 );
J = md5_hh(J,I,H,G,K[C + 13 ], 4 , 681279174 );
G = md5_hh(G,J,I,H,K[C + 0 ], 11 , - 358537222 );
H = md5_hh(H,G,J,I,K[C + 3 ], 16 , - 722521979 );
I = md5_hh(I,H,G,J,K[C + 6 ], 23 , 76029189 );
J = md5_hh(J,I,H,G,K[C + 9 ], 4 , - 640364487 );
G = md5_hh(G,J,I,H,K[C + 12 ], 11 , - 421815835 );
H = md5_hh(H,G,J,I,K[C + 15 ], 16 , 530742520 );
I = md5_hh(I,H,G,J,K[C + 2 ], 23 , - 995338651 );
J = md5_ii(J,I,H,G,K[C + 0 ], 6 , - 198630844 );
G = md5_ii(G,J,I,H,K[C + 7 ], 10 , 1126891415 );
H = md5_ii(H,G,J,I,K[C + 14 ], 15 , - 1416354905 );
I = md5_ii(I,H,G,J,K[C + 5 ], 21 , - 57434055 );
J = md5_ii(J,I,H,G,K[C + 12 ], 6 , 1700485571 );
G = md5_ii(G,J,I,H,K[C + 3 ], 10 , - 1894986606 );
H = md5_ii(H,G,J,I,K[C + 10 ], 15 , - 1051523 );
I = md5_ii(I,H,G,J,K[C + 1 ], 21 , - 2054922799 );
J = md5_ii(J,I,H,G,K[C + 8 ], 6 , 1873313359 );
G = md5_ii(G,J,I,H,K[C + 15 ], 10 , - 30611744 );
H = md5_ii(H,G,J,I,K[C + 6 ], 15 , - 1560198380 );
I = md5_ii(I,H,G,J,K[C + 13 ], 21 , 1309151649 );
J = md5_ii(J,I,H,G,K[C + 4 ], 6 , - 145523070 );
G = md5_ii(G,J,I,H,K[C + 11 ], 10 , - 1120210379 );
H = md5_ii(H,G,J,I,K[C + 2 ], 15 , 718787259 );
I = md5_ii(I,H,G,J,K[C + 9 ], 21 , - 343485551 );
J = safe_add(J,E);
I = safe_add(I,D);
H = safe_add(H,B);
G = safe_add(G,A);
}
if (mode == 16 ){
return Array(I,H);
} else {
return Array(J,I,H,G);
}
}
function md5_cmn(F,C,B,A,E,D){
return safe_add(bit_rol(safe_add(safe_add(C,F),safe_add(A,D)),E),B);
}
function md5_ff(C,B,G,F,A,E,D){
return md5_cmn((B & G) | (( ~ B) & F),C,B,A,E,D);
}
function md5_gg(C,B,G,F,A,E,D){
return md5_cmn((B & F) | (G & ( ~ F)),C,B,A,E,D);
}
function md5_hh(C,B,G,F,A,E,D){
return md5_cmn(B ^ G ^ F,C,B,A,E,D);
}
function md5_ii(C,B,G,F,A,E,D){
return md5_cmn(G ^ (B | ( ~ F)),C,B,A,E,D);
}
function core_hmac_md5(C,F){
var E = str2binl(C);
if (E.length > 16 ){
E = core_md5(E,C.length * chrsz);
}
var A = Array( 16 ),D = Array( 16 );
for ( var B = 0 ;B < 16 ;B ++ ){
A[B] = E[B] ^ 909522486 ;
D[B] = E[B] ^ 1549556828 ;
}
var G = core_md5(A.concat(str2binl(F)), 512 + F.length * chrsz);
return core_md5(D.concat(G), 512 + 128 );
}
function safe_add(A,D){
var C = (A & 65535 ) + (D & 65535 );
var B = (A >> 16 ) + (D >> 16 ) + (C >> 16 );
return (B << 16 ) | (C & 65535 );
}
function bit_rol(A,B){
return (A << B) | (A >>> ( 32 - B));
}
function str2binl(D){
var C = Array();
var A = ( 1 << chrsz) - 1 ;
for ( var B = 0 ;B < D.length * chrsz;B += chrsz){
C[B >> 5 ] |= (D.charCodeAt(B / chrsz)&A)<<(B%32);
}
return C;
}
function binl2str(C){
var D = "" ;
var A = ( 1 << chrsz) - 1 ;
for ( var B = 0 ;B < C.length * 32 ;B += chrsz){
D += String.fromCharCode((C[B >> 5 ] >>> (B % 32 )) & A);
}
return D;
}
function binl2hex(C){
var B = hexcase ? " 0123456789ABCDEF " : " 0123456789abcdef " ;
var D = "" ;
for ( var A = 0 ;A < C.length * 4 ;A ++ ){
D += B.charAt((C[A >> 2 ] >> ((A % 4 ) * 8 + 4 )) & 15 ) + B.charAt((C[A >> 2 ] >> ((A % 4 ) * 8 )) & 15 );
}
return D;
}
调用方式:
md5(md5_3("qq号码")+"验证码")
*/
var chrsz = 8 ;
var mode = 32 ;
var hexcase = 1 ;
function preprocess(A){
var B = "" ;
B += A.verifycode.value;
B = B.toUpperCase();
A.p.value = md5(md5_3(A.p.value) + B);
return true ;
}
function md5_3(B){
var A = new Array;
A = core_md5(str2binl(B),B.length * chrsz);
A = core_md5(A, 16 * chrsz);
A = core_md5(A, 16 * chrsz);
return binl2hex(A);
}
function md5(A){
return hex_md5(A);
}
function hex_md5(A){
return binl2hex(core_md5(str2binl(A),A.length * chrsz));
}
function str_hmac_md5(A,B){
return binl2str(core_hmac_md5(A,B));
}
function core_md5(K,F){
K[F >> 5 ] |= 128 << ((F) % 32 );
K[(((F + 64 ) >>> 9 ) << 4 ) + 14 ] = F;
var J = 1732584193 ;
var I =- 271733879 ;
var H =- 1732584194 ;
var G = 271733878 ;
for ( var C = 0 ;C < K.length;C += 16 ){
var E = J;
var D = I;
var B = H;
var A = G;
J = md5_ff(J,I,H,G,K[C + 0 ], 7 , - 680876936 );
G = md5_ff(G,J,I,H,K[C + 1 ], 12 , - 389564586 );
H = md5_ff(H,G,J,I,K[C + 2 ], 17 , 606105819 );
I = md5_ff(I,H,G,J,K[C + 3 ], 22 , - 1044525330 );
J = md5_ff(J,I,H,G,K[C + 4 ], 7 , - 176418897 );
G = md5_ff(G,J,I,H,K[C + 5 ], 12 , 1200080426 );
H = md5_ff(H,G,J,I,K[C + 6 ], 17 , - 1473231341 );
I = md5_ff(I,H,G,J,K[C + 7 ], 22 , - 45705983 );
J = md5_ff(J,I,H,G,K[C + 8 ], 7 , 1770035416 );
G = md5_ff(G,J,I,H,K[C + 9 ], 12 , - 1958414417 );
H = md5_ff(H,G,J,I,K[C + 10 ], 17 , - 42063 );
I = md5_ff(I,H,G,J,K[C + 11 ], 22 , - 1990404162 );
J = md5_ff(J,I,H,G,K[C + 12 ], 7 , 1804603682 );
G = md5_ff(G,J,I,H,K[C + 13 ], 12 , - 40341101 );
H = md5_ff(H,G,J,I,K[C + 14 ], 17 , - 1502002290 );
I = md5_ff(I,H,G,J,K[C + 15 ], 22 , 1236535329 );
J = md5_gg(J,I,H,G,K[C + 1 ], 5 , - 165796510 );
G = md5_gg(G,J,I,H,K[C + 6 ], 9 , - 1069501632 );
H = md5_gg(H,G,J,I,K[C + 11 ], 14 , 643717713 );
I = md5_gg(I,H,G,J,K[C + 0 ], 20 , - 373897302 );
J = md5_gg(J,I,H,G,K[C + 5 ], 5 , - 701558691 );
G = md5_gg(G,J,I,H,K[C + 10 ], 9 , 38016083 );
H = md5_gg(H,G,J,I,K[C + 15 ], 14 , - 660478335 );
I = md5_gg(I,H,G,J,K[C + 4 ], 20 , - 405537848 );
J = md5_gg(J,I,H,G,K[C + 9 ], 5 , 568446438 );
G = md5_gg(G,J,I,H,K[C + 14 ], 9 , - 1019803690 );
H = md5_gg(H,G,J,I,K[C + 3 ], 14 , - 187363961 );
I = md5_gg(I,H,G,J,K[C + 8 ], 20 , 1163531501 );
J = md5_gg(J,I,H,G,K[C + 13 ], 5 , - 1444681467 );
G = md5_gg(G,J,I,H,K[C + 2 ], 9 , - 51403784 );
H = md5_gg(H,G,J,I,K[C + 7 ], 14 , 1735328473 );
I = md5_gg(I,H,G,J,K[C + 12 ], 20 , - 1926607734 );
J = md5_hh(J,I,H,G,K[C + 5 ], 4 , - 378558 );
G = md5_hh(G,J,I,H,K[C + 8 ], 11 , - 2022574463 );
H = md5_hh(H,G,J,I,K[C + 11 ], 16 , 1839030562 );
I = md5_hh(I,H,G,J,K[C + 14 ], 23 , - 35309556 );
J = md5_hh(J,I,H,G,K[C + 1 ], 4 , - 1530992060 );
G = md5_hh(G,J,I,H,K[C + 4 ], 11 , 1272893353 );
H = md5_hh(H,G,J,I,K[C + 7 ], 16 , - 155497632 );
I = md5_hh(I,H,G,J,K[C + 10 ], 23 , - 1094730640 );
J = md5_hh(J,I,H,G,K[C + 13 ], 4 , 681279174 );
G = md5_hh(G,J,I,H,K[C + 0 ], 11 , - 358537222 );
H = md5_hh(H,G,J,I,K[C + 3 ], 16 , - 722521979 );
I = md5_hh(I,H,G,J,K[C + 6 ], 23 , 76029189 );
J = md5_hh(J,I,H,G,K[C + 9 ], 4 , - 640364487 );
G = md5_hh(G,J,I,H,K[C + 12 ], 11 , - 421815835 );
H = md5_hh(H,G,J,I,K[C + 15 ], 16 , 530742520 );
I = md5_hh(I,H,G,J,K[C + 2 ], 23 , - 995338651 );
J = md5_ii(J,I,H,G,K[C + 0 ], 6 , - 198630844 );
G = md5_ii(G,J,I,H,K[C + 7 ], 10 , 1126891415 );
H = md5_ii(H,G,J,I,K[C + 14 ], 15 , - 1416354905 );
I = md5_ii(I,H,G,J,K[C + 5 ], 21 , - 57434055 );
J = md5_ii(J,I,H,G,K[C + 12 ], 6 , 1700485571 );
G = md5_ii(G,J,I,H,K[C + 3 ], 10 , - 1894986606 );
H = md5_ii(H,G,J,I,K[C + 10 ], 15 , - 1051523 );
I = md5_ii(I,H,G,J,K[C + 1 ], 21 , - 2054922799 );
J = md5_ii(J,I,H,G,K[C + 8 ], 6 , 1873313359 );
G = md5_ii(G,J,I,H,K[C + 15 ], 10 , - 30611744 );
H = md5_ii(H,G,J,I,K[C + 6 ], 15 , - 1560198380 );
I = md5_ii(I,H,G,J,K[C + 13 ], 21 , 1309151649 );
J = md5_ii(J,I,H,G,K[C + 4 ], 6 , - 145523070 );
G = md5_ii(G,J,I,H,K[C + 11 ], 10 , - 1120210379 );
H = md5_ii(H,G,J,I,K[C + 2 ], 15 , 718787259 );
I = md5_ii(I,H,G,J,K[C + 9 ], 21 , - 343485551 );
J = safe_add(J,E);
I = safe_add(I,D);
H = safe_add(H,B);
G = safe_add(G,A);
}
if (mode == 16 ){
return Array(I,H);
} else {
return Array(J,I,H,G);
}
}
function md5_cmn(F,C,B,A,E,D){
return safe_add(bit_rol(safe_add(safe_add(C,F),safe_add(A,D)),E),B);
}
function md5_ff(C,B,G,F,A,E,D){
return md5_cmn((B & G) | (( ~ B) & F),C,B,A,E,D);
}
function md5_gg(C,B,G,F,A,E,D){
return md5_cmn((B & F) | (G & ( ~ F)),C,B,A,E,D);
}
function md5_hh(C,B,G,F,A,E,D){
return md5_cmn(B ^ G ^ F,C,B,A,E,D);
}
function md5_ii(C,B,G,F,A,E,D){
return md5_cmn(G ^ (B | ( ~ F)),C,B,A,E,D);
}
function core_hmac_md5(C,F){
var E = str2binl(C);
if (E.length > 16 ){
E = core_md5(E,C.length * chrsz);
}
var A = Array( 16 ),D = Array( 16 );
for ( var B = 0 ;B < 16 ;B ++ ){
A[B] = E[B] ^ 909522486 ;
D[B] = E[B] ^ 1549556828 ;
}
var G = core_md5(A.concat(str2binl(F)), 512 + F.length * chrsz);
return core_md5(D.concat(G), 512 + 128 );
}
function safe_add(A,D){
var C = (A & 65535 ) + (D & 65535 );
var B = (A >> 16 ) + (D >> 16 ) + (C >> 16 );
return (B << 16 ) | (C & 65535 );
}
function bit_rol(A,B){
return (A << B) | (A >>> ( 32 - B));
}
function str2binl(D){
var C = Array();
var A = ( 1 << chrsz) - 1 ;
for ( var B = 0 ;B < D.length * chrsz;B += chrsz){
C[B >> 5 ] |= (D.charCodeAt(B / chrsz)&A)<<(B%32);
}
return C;
}
function binl2str(C){
var D = "" ;
var A = ( 1 << chrsz) - 1 ;
for ( var B = 0 ;B < C.length * 32 ;B += chrsz){
D += String.fromCharCode((C[B >> 5 ] >>> (B % 32 )) & A);
}
return D;
}
function binl2hex(C){
var B = hexcase ? " 0123456789ABCDEF " : " 0123456789abcdef " ;
var D = "" ;
for ( var A = 0 ;A < C.length * 4 ;A ++ ){
D += B.charAt((C[A >> 2 ] >> ((A % 4 ) * 8 + 4 )) & 15 ) + B.charAt((C[A >> 2 ] >> ((A % 4 ) * 8 )) & 15 );
}
return D;
}
就这些吧。。。。。敬礼~