java程序模拟QQ空间登录 - 并模拟刷说说的赞

Java程序模拟QQ空间登录 - 并模拟刷说说的赞


注意:腾讯修改了加密算法,已失效(2015-01-31)

背景:在2013-10-25的一天,有个friend在QQ问我:"post登陆QQ空间抓取不到post的数据"。于是故事就开始了,他做过模拟百度登录,我想应该没问题啊,都是一样的程序嘛。于是简单的看了下,好像QQ登录的密码P是加密过的。并且最近也需要这样一个程序,于是在第三天开始进入了研究状态。


解决问题:
       a.Java模拟QQ空间登录,获取Cookie
       b. Java的QQ空间请求的G_TK算法skey算法
       c.QQ空间登录的MD5算法
       d.QQ刷说说赞

资源地址:
          Java程序下载地址: http://download.csdn.net/detail/liyangchiyue/6493095
           QQ空间的MD5加密算法: http://blog.sina.com.cn/s/blog_533587770101iz5j.html
           QQ空间的G_TK算法: http://blog.sina.com.cn/s/blog_533587770101iz5r.html


技术啰嗦:(可略过)
      1.根据现在的行业趋势,登录的前几次(IP地域与经常登录的地域一致的情况下)是不需要输入验证码,如果错误超过N次,就需要输入验证码。
      2.页面的数据使用js加密,这个是必然的,虽然明知道js是开源的,但是对于大部分刚接触http技术的人员来说这个加密过程还是可以抵御很大一部分的人。
      3.QQ空间每2天,Cookie会清空一次。意思是说,一次登录的Cookie2天后就无效了。这似乎是服务器的设定。
      4.MD5加密并不是泛指所有的MD5都是使用的相同的算法。至少有些MD5在处理特殊符号上会出现加密的不同。具体需要看源码的偏好了。本次的QQ页面jsMD5加密与PHP中的MD5加密对于特殊字符的加密结果就不相同。所谓的特殊字符(如,汉字,大于127的ASCILL码)


技术交流:QQ448163451
          www.liyang1.com
          www.lyoxh.com


声明    感谢广大的互联网,提供良好的学习平台,所以自己也想做点事回馈社会。虽然月薪才2000。。。本程序提供交流学习,切勿用于非法途径,否则后果自负。



流程说明:
      1.进入登录页面,获取Cookie
      2.在该页面截取       1.aid(腾讯请求标识ID)      2.login_sig(请求标识)
      3.获取登录验证信息   1.verifycode(验证码-没有时也会有隐藏的验证码,需要截取)   2.16进制QQ号                            3.3次MD5的加密密码
      4.登录,获取登录Cookie
核心Cookie(有了它们3就是登录状态了):
uin=o02194521022;      //QQ号
skey=@4gvecpkLM;       //后续操作时需要使用到该字符串计算出请求的验证
ptcz=9a52548533a1f072c5536016e918f5f175c701b5fb1b1ad15808c644d019a013;
    


详细步骤分解:


★1.进入登录页面,获取Cookie,可以关掉QQ进行浏览器测试,该登录页面是通用的登录界面。
▼发送Get请求▼
http://ui.ptlogin2.qq.com/cgi-bin/login?hide_title_bar=1&low_login=0&qlogin_auto_login=1&no_verifyimg=1&link_target=blank&appid=549000912&style=12&target=self&s_url=http://qzs.qq.com/qzone/v5/loginsucc.html?para=izone&pt_qr_app=�ֻ�QQ�ռ�&pt_qr_link=http://z.qzone.com/download.html&self_regurl=http://qzs.qq.com/qzone/v6/reg/index.html&pt_qr_help_link=http://z.qzone.com/download.html


Java程序模拟QQ空间登录 <wbr>- <wbr>并模拟刷说说的赞(图文)
==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ====


★2.在该页面截取      1.aid(ID)      2.login_sig(请求标识)
   2.1 查看源码→搜索→(aid)
   如:<<SPAN>input  type=" hiddenname=" aidvalue=" 549000912" />


Java程序模拟QQ空间登录 <wbr>- <wbr>并模拟刷说说的赞(图文)

   2.2 查看源码→搜索→(login_sig)
   如:login_sig:"ZbANrk8UbOeabs05pRQ7hcREBZLkt1qnPKnHlzLayKrujepCROgub6OF9*VkgWoL"


Java程序模拟QQ空间登录 <wbr>- <wbr>并模拟刷说说的赞(图文)
==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ====


★3.获取登录验证信息  1.verifycode(验证码-没有时也会有隐藏的验证码,需要截取)   2.16进制QQ号                           3.3次MD5的加密密码(这一步是最难而且最麻烦的)
--------------------------------------------------------------------------------------------------
3.1 当用户输入完帐号后,会发送验证请求。
   
uin       = 你的QQ号
appid     = aid       //第二步 截获的
login_sig = login_sig //第二步 获的
↓↓↓↓↓↓使用参数↓↓↓↓↓↓
发送Get请求▼
http://check.ptlogin2.qq.com/check?regmaster=&uin=949102845&appid=549000912&js_ver=10051&js_type=1&login_sig=UcU**IJ7*Tb1oqFs9-NzQ7p187P4QhmPafwtJz5JE4zMXU1mnab0L5Z6uhEeSR4d&u1=http://qzs.qq.com/qzone/v5/loginsucc.html?para=izone&r=0.6652378559988166


--------------------------------------------------------------------------------------------------
3.2.请求后会收到数据

A.如果是需要输入验证码:
ptui_checkVC('1','08e0c8dd8bd978bdcaf574bf6de2d00cf260451ea4a53148','\x00\x00\x00\x00\x00\x03\x49\xa7');

uin       = QQ号
appid     = aid       //刚才截获的
↓↓↓↓↓↓使用参数↓↓↓↓↓↓
▼获取验证码图片▼:http://captcha.qq.com/getimage?uin=949102845&aid=549000912&0.6652378559988166

-----------------------------------------------------

B.如果不需要输入验证码:
ptui_checkVC('0','!OFV','\x00\x00\x00\x00\x38\x92\x28\xfd');


获取的数据说明:
   第一个参数标识状态
   第二个参数是验证码
   第三个参数是你当前输入的QQ的16进制形式

--------------------------------------------------------------------------------------------------

3.3 如果需要验证码(本程序例子, 请查看{项目路径}/verifyTemp/verify.jpg,然后在控制台输入验证 ,回车)






==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ====
4 登录参数准备
-------------------------------------------------
4.1 加密密码(本程序例子中直接调用函数即可,注意因为hexchar2bin函数加密后是特殊字符,所以其他的Md5加密结果可能会不一样,请使用本程序的MD5函数方法)

    $hexqq     = 验证时的第三个参数
    $password  = 你的QQ密码
    $verify    = 如果要输入验证码,就会使用输入的验证码,否则使用第二个参数的默认验证码。如(!QZY)
    ↓↓↓↓↓↓使用参数↓↓↓↓↓↓
    调用函数获取加密码 $p =  Security.GetPassword($hexqq,$password,$verify);
    简而言之是就是3次MD5加密
       String P = hexchar2bin(md5(password));
       String U = md5(P + hexchar2bin(qq.replace("\\x", "").toUpperCase()));
       V = md5(U + verifycode.toUpperCase());

-------------------------------------------------
4.2 准备登录参数

u       = QQ号
p       = 加密后的密码
verifycode = 验证码(即使不需要输入验证码,也需要验证码,也就是上面验证时的第二个参数)
appid      = aid       //刚才截获的
login_sig  = login_sig //刚才截获的

-------------------------------------------------
4.3 发送登录请求,拿到登录Cookie,注意,它的确是使用的Get请求。
▼发送GET请求
http://ptlogin2.qq.com/login?u=949102845&p=3E8CDBE584C125C4A0E31CB3A273FA20&verifycode=zkyy&aid=549000912&u1=http://qzs.qq.com/qzone/v5/loginsucc.html?para=izone&h=1&ptredirect=0&ptlang=2052&from_ui=1&dumy=&low_login_enable=0&regmaster=&fp=loginerroralert&action=23-61-1383187338922&mibao_css=&t=1&g=1&js_ver=10051&js_type=1&login_sig=nO84d8jFFX2BsoUJjCz2Or3qHRlCB6DsLq5r*eLHFZ3yfd5lqugnE9H4d6xkEMWI&pt_rsa=0

登录后必要Cookie
Cookie:
uin=o02194521022;      //QQ号
skey=@4gvecpkLM;       //后续操作时需要使用到该字符串计算出请求的验证
ptcz=9a52548533a1f072c5536016e918f5f175c701b5fb1b1ad15808c644d019a013;



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




5 对一条说说刷赞

------------------------------------------------
 5.1 找到一条说说的标识ID,查看源码→在赞字的附近→。
如:$curkey = 7b6eb61a5cd674523b910000

Java程序模拟QQ空间登录 <wbr>- <wbr>并模拟刷说说的赞(图文)

------------------------------------------------
5.2G_TK加密,参数准备。发这个请求还有个加密的地方需要注意。
skey = skey    //在登录后的Cookie中可以找到,加密时包括"@"
     ↓↓↓↓↓↓使用参数↓↓↓↓↓↓
     调用函数 $g_tk=  Security.GetG_TK(skey );
     如 $g_tk = 229428597

---------------------------------------------------------
  5.3 发送请求,赞。
▼发送POST请求
g_tk = $g_tk  //加密后的数字
↓↓↓↓↓↓使用参数↓↓↓↓↓↓
http://w.qzone.qq.com/cgi-bin/likes/internal_dolike_app?g_tk=g_tk;


{0} = $curkey
{1} = 你的QQ号
↓↓↓↓↓↓使用参数↓↓↓↓↓↓
发送POST数据data = 
"fid={0}&opuin={1}&abstime=1383191804&active=0&appid=311&curkey=http://user.qzone.qq.com/448163451/mood/{0}&qzreferrer=http://user.qzone.qq.com/{1}&typeid=0&unikey=http://user.qzone.qq.com/448163451/mood/{0}";




©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页