Java程序模拟QQ空间登录 - 并模拟刷说说的赞
注意:腾讯修改了加密算法,已失效(2015-01-31)
背景:在2013-10-25的一天,有个friend在QQ问我:"post登陆QQ空间抓取不到post的数据"。于是故事就开始了,他做过模拟百度登录,我想应该没问题啊,都是一样的程序嘛。于是简单的看了下,好像QQ登录的密码P是加密过的。并且最近也需要这样一个程序,于是在第三天开始进入了研究状态。
解决问题:
资源地址:
技术啰嗦:(可略过)
技术交流:QQ448163451
声明 :感谢广大的互联网,提供良好的学习平台,所以自己也想做点事回馈社会。虽然月薪才2000。。。本程序提供交流学习,切勿用于非法途径,否则后果自负。
流程说明:
核心Cookie(有了它们3就是登录状态了):
uin=o02194521022; //QQ号
skey=@4gvecpkLM; //后续操作时需要使用到该字符串计算出请求的验证
ptcz=9a52548533a1f072c5536016 e918f5f175c701b5fb1b1ad1 5808c644d019a013;
详细步骤分解:
★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
★2.在该页面截取 1.aid(ID) 2.login_sig(请求标识)
==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ==== ====
★3.获取登录验证信息
--------------------------------------------------------------------------------------------------
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-NzQ7p187P4QhmPafwtJz5JE4 zMXU1mnab0L5Z6uhEeSR4d&u1=http://qzs.qq.com/qzone/v5/loginsucc.html?para=izone&r=0.6652378559988166
--------------------------------------------------------------------------------------------------
3.2.请求后会收到数据
A.如果是需要输入验证码:
ptui_checkVC('1','08e0c8dd8bd978bdcaf574bf 6de2d00cf260451ea4a53148 ','\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');
获取的数据说明:
--------------------------------------------------------------------------------------------------
3.3 如果需要验证码(本程序例子,
请查看{项目路径}/verifyTemp/verify.jpg,然后在控制台输入验证
,回车)
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
4 登录参数准备
-------------------------------------------------
4.1 加密密码(本程序例子中直接调用函数即可,注意因为hexchar2bin函数加密后是特殊字符,所以其他的Md5加密结果可能会不一样,请使用本程序的MD5函数方法)
-------------------------------------------------
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=3E8CDBE584C125C4A0E31CB3 A273FA20&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®master=&fp=loginerroralert&action=23-61-1383187338922&mibao_css=&t=1&g=1&js_ver=10051&js_type=1&login_sig=nO84d8jFFX2BsoUJjCz2Or3q HRlCB6DsLq5r*eLHFZ3yfd5lqugnE9H4d6xkE MWI&pt_rsa=0
登录后必要Cookie
Cookie:
uin=o02194521022; //QQ号
skey=@4gvecpkLM; //后续操作时需要使用到该字符串计算出请求的验证
ptcz=9a52548533a1f072c5536016 e918f5f175c701b5fb1b1ad1 5808c644d019a013;
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
====
5 对一条说说刷赞
------------------------------------------------
如:$curkey = 7b6eb61a5cd674523b910000
5.2G_TK加密,参数准备。发这个请求还有个加密的地方需要注意。
skey = skey //在登录后的Cookie中可以找到,加密时包括"@"
---------------------------------------------------------
▼发送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}";