2017 最新qq登录算法

 其实16年后几个月算法就已经较大幅度改变了,只是无验证码情况下,我上篇文章15年的老算法仍然可以用,首先说下,我后面提交的某些参数是不必要的,尤其是一些直接写成常量的参数,抓包直接copy过来的,具体没筛选。

http://xui.ptlogin2.qq.com/cgi-bin/xlogin。。。

访问这个地址能从cookies里取得pt_login_sig,后面check时会有一个参数与之对应,这个login_sig早就有了,有无皆可,至少我一直没用到过,

进入正题,先说无需验证码的,老规矩从check开始,

URL_CHECK = 'http://check.ptlogin2.qq.com/check' +\
'?regmaster=' +\
'&pt_tea=2' +\
'&pt_vcode=1' +\
'&uin=%s' % UID +\
'&appid=%s' % APPID +\
'&js_ver=10188' +\
'&js_type=1' +\
'&login_sig=%s' % login_sig +\
'&r=0.14723663520999253' +\
'u1=http://qzs.qq.com/qzone/v5/loginsucc.html?para=izone' +\
'pt_uistyle=40';

采用新算法时pt_tea必须为2,pt_vcode没做过多测试,反正目前我填几都木影响,其他参数木啥好说的。

ptui_checkVC('0','!TPX','\x39\x37\x35\x10\x4a\x1f\x20\x2d','6f5d1367563ef5429b0585cb305087bcbb176cddf9b51dfafe8c3e3bc0f15ffc466996e04ccd6e1f14f2809ad3d5cbda78f697de2876156e','3');

字段一pt_vcode_v1,0代表不需要验证码,1代表需要,字段二就是验证码,字段三是pt_uin,密码加密时需要,第四个字段是pt_verifysession_v1,登录时要用,最后字段是pt_randsalt,用qq号登录时是2,用邮箱是3,手机我没测试。

然后就可以登录了,

URL_LOGIN = 'http://ptlogin2.qq.com/login' +\
'?u=%s' % UID +\
'&verifycode=%s' % VCODE +\
'&pt_vcode_v1=%s' % PT_VCODE_V1 +\
'&pt_verifysession_v1=%s' % PT_VERIFYSESSION_V1 +\
'&p=%s' % P +\
'&pt_randsalt=%s' % PT_RANDSALT+\
'&u1=http%3A%2F%2Fqzs.qq.com%2Fqzone%2Fv5%2Floginsucc.html%3Fpara%3Dizone' +\
'&ptredirect=0' +\
'&h=1' +\
'&t=1' +\
'&g=1' +\
'&from_ui=1' +\
'&ptlang=2052' +\
'&action=3-21-1482653919209' +\
'&js_ver=10188' +\
'&js_type=1' +\
'&login_sig=%s' % LOGIN_SIG +\
'&pt_uistyle=40' +\
'&aid=549000912' +\
'&daid=5';

VCODE就是之前返回的验证码,其他都懂的,login_sig写不写随意。

=============================================================================================

再来说说需要验证码的登录流程,稍微麻烦点:

首先还是check,

ptui_checkVC('1','5JoPkMMc6KxpJ8H0jkMhKHJ9_IJNzqQCOuTJ7oAYNh7l4KruqQswfQ**','\x00\x00\x00\x00\x4f\xa7\xac\x11','','2');

这次需要验证码才能登录,所以pt_vcode_v1变成1,字段二不同了哦,它叫cap_cd,后面获取验证码时要用到,字段三还是pt_uin不变,字段四pt_verifysession_v1这次为空,后面才能得到,pt_randsalt意义相同。

之后我们先要取得vsig参数:

    URL = 'http://captcha.qq.com/cap_union_new_show' +\
          '?aid=%s' % APPID +\
          '&asig=&captype=&protocol=http&clientype=2&disturblevel=&apptype=2&curenv=inner&noBorder=noborder&showtype=embed' +\
          '&uid=%s' % UID +\
          '&cap_cd=%s' % CAP_CD +\
          '&lang=2052';

APPID都知道吧,乱写也行,UID无须解释,CAP_CD就是之前check时返回的,之后会返回一个html,里面会有一串字符,非常显眼,

类似gRSMPwMX2Qhy9U03oFBkR23PLvQ_fGVKhXb80RWDhKHDQJCC2J7JZJh9YHAAkDSDKdDnJJiIon3-ny3JmmTfRqOSBHx62pVx4LlBhH1AIN52Jr9Ev8C57TA**,直接抠出来就行了。

有了cap_cd和vsig就能取回验证码了。

    URL = 'http://captcha.qq.com/cap_union_new_getcapbysig?' +\
          'aid=%s' % APPID +\
          '&asig=&captype=&protocol=http&clientype=2&disturblevel=&apptype=2&curenv=inner&noBorder=noborder&showtype=embed' +\
          '&uid=%s' % UID +\
          '&cap_cd=%s' % CAP_CD +\
          '&lang=2052&rnd=7440&rand=0.8917365573600687' +\
          '&vsig=%s' % VSIG +\
          '&ischartype=1';

一目了然,但返回的图片里的验证码并不是最后登录时提交的验证码,正式登录前还需要一个步骤取得必要的数据,

            URL_VERIFY = 'http://captcha.qq.com/cap_union_new_verify?random=1482310265526';
            postdata = {  'aid': APPID,
                          'asig': '',
                          'captype': '',
                          'protocol': 'http',
                          'clientype': 2,
                          'disturblevel': '',
                          'apptype': 2,
                          'curenv': 'inner',
                          'noBorder': 'noborder',
                          'showtype': 'embed',
                          'uid': UID,
                          'cap_cd': checkinfo['cap_cd'],
                          'lang': 2052,
                          'subcapclass': 0,
                          'collect' : '',
                          'vsig': VSIG,
                          'cdata': 0,
                          'ans': USER_VCODE,
                         };

checkinfo['cap_cd']就是之前我们一直在说的cap_cd, VSIG是刚刚抠出来的那一串,collect的生成很复杂,但在这里并不重要,可以为空,USER_VCODE就是我们刚才得到的图片里的验证码,值得注意的是新的算法在这一步需要post数据,而不是get。

其后服务器将返回如下数据:

enter: {'ticket': 't02D-rmFY2NgRig_BIingh0O8bDJMDyEwbmE8uv7s7ZzBBDaqLf5XAy_J8_HGP3Nb4oB99Z6MJuPVdwGmEthEyXUlZzzPEDFxx37r8X98CbAAC*', 'errorCode': '0', 'randstr': '@57S', 'errMessage': 'OK' }

其中randstr就是后面登陆时提交给服务器的验证码,还记的我们最初check时pt_verifysession_v1为空么,没错,就是这里的ticket.

一切就绪,可以登录了:

        URL_LOGIN = 'http://ptlogin2.qq.com/login' +\
                    '?u=%s' % UID +\
                    '&verifycode=%s' % VCODE +\
                    '&pt_vcode_v1=%s' % PT_VCODE_V1 +\
                    '&pt_verifysession_v1=%s' % PT_VERIFYSESSION_V1 +\
                    '&p=%s' % P +\
                    '&pt_randsalt=%s' % PT_RANDSALT+\
                    '&u1=http%3A%2F%2Fqzs.qq.com%2Fqzone%2Fv5%2Floginsucc.html%3Fpara%3Dizone' +\
                    '&ptredirect=0' +\
                    '&h=1' +\
                    '&t=1' +\
                    '&g=1' +\
                    '&from_ui=1' +\
                    '&ptlang=2052' +\
                    '&action=3-21-1482653919209' +\
                    '&js_ver=10188' +\
                    '&js_type=1' +\
                    '&login_sig=%s' % LOGIN_SIG +\
                    '&pt_uistyle=40' +\
                    '&aid=549000912' +\
                    '&daid=5';

所有参数之前都解释过了,唯独p,p的加密算法也变了,都在c_login_2.js这个文件里,文件很长,乱糟糟,所以继续发扬拿来主义吧,随便改改用本地js引擎拿结果即可。

 

转载于:https://www.cnblogs.com/reaper-spring/p/6290837.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值