作为 Tentcent QQ 的用户怎么能少得了去研究呢?人始于好奇心,只有去发现了解才能懂得更多。至此,给大家分享自己抓的 QQ 协议的相关内容,供大家学习。
近期…也不能算是近期吧,一次偶然的 QQ 第三方登录想分析下登录成功后的 Cookie,可能当时也回忆起 QQ 很多服务都是通过 skey
来鉴权的。所以应该能通过模拟扫描登录来操作签到之类的,不过经过大致的分析,各个地方登录得到 skey
可以操作的东西也是不一样的,比如是在腾讯业务
登录的,那么 Qzone 就无法操作,反过来也是一样的。
实现的过程是这样的:
流程: 扫描二维码 > 确认登录 > 发起请求 模拟流程: ptqrshow[请求二维码并记录Cookie] > xlogin[页面Cookie] > ptqrlogin[获取二维码状态] >? 登录成功 > check_sig[二次登录] ↓ ↓ ↓ qrsig qrsig, pt_login_sig skey
那么,一起来开始一场紧张刺激的模拟之旅吧!
首先,你需要懂得一门编程语言,其次就是得拥有一台电脑,如果你觉得不困难的话移动设备也是可行的。
First, 获取二维码。在这里我们仅需要使用 GET 请求即可。
请求地址:
https://ssl.ptlogin2.qq.com/ptqrshow?appid=715030901&e=2&l=M&s=3&d=72&v=4&t=0.{时间戳}&daid=73&pt_3rd_aid=0
先做个简单的介绍,这个是 ptqrshow
上面所提到的”请求二维码”的 API,715030901呢,是腾讯登录业务的 产品识别码 ,腾讯下的任何一款需要登录的产品都会有,包过第三方,都会分发一个这样的 APPID ,看到后面 t= 参数后的 {时间戳} 了吧,把它替换成 当前时段的时间戳 即可。
当然了,这小巧的身体里可不只是返回二维码那么简单,还藏着十分重要的大宝贝 (指 qrsig
,对于此处,我们还需要获取这个页面所包含Cookie里的 qrsig
,对于我的猜测是二维码的ID,当然这是十分重要的,请保存下来,后面需要使用。
大致的Cookie长这样:
qrsig=YO556objSAWbQMetukRbWUek9Q05T1*uCnVxqMTLPlLzxxarYsFQmm15bQFdCPcP;
Second, 获取页面Cookie。同样的,我们仅需要 GET 。
请求地址:
https://xui.ptlogin2.qq.com/cgi-bin/xlogin?appid=715030901&daid=73&hide_close_icon=1&pt_no_auth=1&s_url=https%3A%2F%2Fqun.qq.com%2Fmember.html%23
此处是上述提到的 xlogin
,当然,这里请求结果返回的是HTML,不用管它,保存这个页面的Cookie就好,记得是全部。
之后全程需要,并将上面获取到的 qrsig
插入进去。
好的,目前我们已经得到了 qrsig
, pt_login_sig
。非常好,我们已经进行到一半了!
Third, 以心跳包的方式获取二维码状态,当然了,请使用 GET。
此处十分关键,请仔细阅读,如有任何疑问请在本文下方评论。
No.1 拼接 API 地址。
https://ssl.ptlogin2.qq.com/ptqrlogin?u1=https%3A%2F%2Fqun.qq.com%2Fmember.html%23&ptqrtoken={ptqrtoken}&ptredirect=1&h=1&t=1&g=1&from_ui=1&ptlang=2052&action=0-0-{时间戳}&js_ver=90305&js_type=1&login_sig={pt_login_sig}&pt_uistyle=40&aid=715030901&daid=73&has_onekey=1&
在看这段文字之前,想必你已经仔细阅读过该 Url 了吧。是的,这是第三部的 ptqrlogin
获取二维码状态。
可以发现,链接里有几个参数是需要填写的。分别是 {ptqrtoken} , {pt_login_sig} , {时间戳},前者 ptqrtoken 既是第一步获取到的 qrsig,对的,读取出来替换就好。而中间呢 pt_login_sig 既是第二步里,所请求的页面Cookie里包含的,依旧。读取出来替换就好。至于末尾的 {时间戳} 呢,不用我多说了吧,当然时段的时间戳。
然后我们需要设置Cookie,即是前两部获取到的 Cookie合集 ,对的,设置就好,否则会 400。
No.2 现在尝试请求吧!正常的返回结果是:
ptuiCB('66','0','','0','二维码未失效。(2096893216)', '')
如果你的结果不是这样的数据格式,而且还无法排错的话,请评论。注意,心跳包推荐是 1次/s
那么,尝试扫码,并确认登录看看返回的结果吧!
No.3 通过读取我们可以获取到 ptuiCB 里的一个参数,意义:
66 => 正在等待二维码扫描
68 => 正在等待确认
0 => 登录成功
对了!别忘了保存Cookie,并插入到之前的Cookie里面,全局都需要哦。
Fourth, 该获取我们想要的 skey
了。
同样的,请使用 GET 。 现在,我们需要从上述操作中返回的 ptuiCB 里读取一个Url,这个就是二次登录啦。 请求地址就是上面的那个 Url ,大概长这样:
https://ptlogin2.qzone.qq.com/check_sig?pttype=1&uin=10001000&service=ptqrlogin&nodirect=0&ptsigx=0fe7ffb7e332xcascfqwfqw158ff6c40828d042d51f8e57e2636472d6eed984adqf12dcascf54979bc3688725b4fb7a55e610&s_url=https%3A%2F%2Fqzs.qzone.qq.com%2Fqzone%2Fv5%2Floginsucc.html%3Fpara%3Dizone&f_url=&ptlang=2052&ptredirect=100&aid=549000912&daid=5&j_later=0&low_login_hour=0®master=0&pt_login_type=3&pt_aid=0&pt_aaid=16&pt_light=0&pt_3rd_aid=0
当然,请设置上面所有操作的 Cookie合集 ,否则依旧会返回 400 错误。
请求之后不用管里面的返回有什么内容,请直接获取Cookie,我们需要的 skey 就在里面!
skey=@A0IboiylZ;
好了,我们现在已经完全模拟成功了,恭喜~
那么,有了 skey 我们可以干什么坏事呢?当然了,来操作QQ哒!
关于调戏群签到:
API [POST]:
https://qun.qq.com/cgi-bin/qiandao/sign/publish
Cookie: 之前模拟的所有Cookie合集
参数:
bkn, gallery_info, template_id, pic_id, gc, client, lgt, lat, poi, text
评论(0)