admin管理员组

文章数量:1534214

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/detail/liyangchiyue/6493095            QQ空间的MD5加密算法: http://blog.sina/s/blog_533587770101iz5j.html            QQ空间的G_TK算法: http://blog.sina/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           www.lyoxh

声明    感谢广大的互联网,提供良好的学习平台,所以自己也想做点事回馈社会。虽然月薪才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/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/qzone/v5/loginsucc.html?para=izone&pt_qr_app=�ֻ�QQ�ռ�&pt_qr_link=http://z.qzone/download.html&self_regurl=http://qzs.qq/qzone/v6/reg/index.html&pt_qr_help_link=http://z.qzone/download.html


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


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



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


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


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


------------------------------------------------
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/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/448163451/mood/{0}&qzreferrer=http://user.qzone.qq/{1}&typeid=0&unikey=http://user.qzone.qq/448163451/mood/{0}";



本文标签: 程序空间Javaqq