关于webQQ3.0

直接入题

 

通过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 ' , ' 您输入的密码有误,请重试。 ' );

 

 

4、真正的登陆,这次登陆是独占是登陆,也就是说,另一地方正在使用的同一账号,会被挤下线。

 

POST:http: // d.web2.qq.com/channel/login2 //这就是web3.0的登陆地址

 

post数据:
{
" 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;
}

 

 

 

就这些吧。。。。。敬礼~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值