Web QQ API 分析
来源:互联网 发布:八爪鱼采集app数据 编辑:程序博客网 时间:2024/05/07 03:59
Web QQ协议分析
本文信息 站在前人的肩膀上 。
本文信息 不定期更新
前言
对Web QQ协议的一些看法
- 整个鉴权模块Cookie、Session、Token全都用上了
- 加密函数压缩混淆后放在JS还是会被找出来,不过只要偶尔换换也很折腾人
- 整个登录流程分了5步,偶尔加一步、减一步或者改一步同样折腾人
- 返回数据只提供了返回码而没有描述,因为什么失败了自己猜去吧
- 大部分请求都同时检查了Cookie、Referer、User-Agent和Origin(只有Post请求有)
- 对一些不合理的情况进行了判断,比如登录后却没有发起接收消息的
- 请求 对访问频率进行了控制,太频繁的请求也会被拒绝
版本
2015年12月版本的Web QQ协议
Api 数据来源
基本上都是通过Chrome控制台对Smart QQ进行抓包得到的
公共约定:
- 保证请求头中包含正常的User-Agent、Referer、Cookie等信息,如果是Post请求需要额外加上Origin
- 在大部分情况下(除了获取二维码和确认二维码状态),返回内容均为JSON,其中retcode为请求结果(0为成功),response为返回数据
- 不过还有个特例是发送消息的接口,成功时返回的字段是errCode,失败时才是retcode
- 请求失败后,返回的错误码如果是1000000或1000001,几乎可以认为是缺少了第一条中的某个数据
- 如果请求参数中有t,当前版本不会检验它的值,所以我统一设为0.1,但是实际上它的值一般情况下均为当前时间的unix timestamp
- 如果返回的返回的错误码为1000003,很有可能是你的请求频率过于频繁
登录
获取cookie,用户登录逻辑的模拟。
目标参数
ptwebqq
:保存在Cookie中的鉴权信息vfwebqq
:类似于Token的鉴权信息psessionid
:类似于SessionId的鉴权信息clientid
:设备id,为固定值53999199uin
: 登录用户id(其实就是当前登录的QQ号)
登陆流程
- 获取二维码
- 确认二维码已被扫描
- 获取鉴权参数ptwebqq
- 获取鉴权参数vfwebqq
- 获取鉴权参数uin和psessionid
流程 1 获取二维码
method: Get
url: https://ssl.ptlogin2.qq.com/ptqrshow?appid=501004106&e=0&l=M&s=5&d=72&v=4&t=0.1
return: 二维码图片 (PNG
)
流程 2 获取二维码扫描状态
method: Get
url: https://ssl.ptlogin2.qq.com/ptqrlogin?webqq_type=10&remember_uin=1&login2qq=1&aid=501004106 &u1=http%3A%2F%2Fw.qq.com%2Fproxy.html%3Flogin2qq%3D1%26webqq_type%3D10 &ptredirect=0&ptlang=2052&daid=164&from_ui=1&pttype=1&dumy=&fp=loginerroralert &action=0-0-157510&mibao_css=m_webqq&t=1&g=1&js_type=0&js_ver=10143&login_sig=&pt_randsalt=0
referer: https://ui.ptlogin2.qq.com/cgi-bin/login?daid=164&target=self&style=16&mibao_css=m_webqq&appid=501004106&enable_qlogin=0&no_verifyimg=1 &s_url=http%3A%2F%2Fw.qq.com%2Fproxy.html&f_url=loginerroralert &strong_login=1&login_state=10&t=20131024001
return:
- 扫描前 & 未失效
ptuiCB('66','0','','0','二维码未失效。(3203423232)','');
- 扫描前 & 已失效
ptuiCB('65','0','','0','二维码已失效。(4012918406)', '');
-扫描后 & 认证前ptuiCB('66','0','','0','二维码认证中。(3203423232)','');
-认证后ptuiCB('66','0','','0','http://ptlogin4.web2.qq.com/check_sig?xxxxxx','');
- 扫描前 & 已失效
这个请求可以直接轮训请求,直到认证成功后,将返回的地址保存下来用作下次请求。
流程 3 获取 ptwebqq
method: Get
url: 流程 2 返回的 url
referer: http://s.web2.qq.com/proxy.html?v=20130916001&callback=1&id=1
成功后
- HTTP 状态码 302
- 存储 cookie ptwebqq
流程 4 获取 vfwebqq
method: Get
url: http://s.web2.qq.com/api/getvfwebqq?ptwebqq=#{ptwebqq}&clientid=53999199&psessionid=&t=0.1
referer: http://s.web2.qq.com/proxy.html?v=20130916001&callback=1&id=1
url中需要填入上一步获取到的ptwebqq,请求成功后会返回一个JSON,将result.vfwebqq保存下来。
流程 5 获取 psessionid
& uin
method: Get
url: http://d1.web2.qq.com/channel/login2
referer: http://d1.web2.qq.com/proxy.html?v=20151105001&callback=1&id=2
表单数据只有一个,Key为
r
Value (JSON)
{ "ptwebqq": "#{ptwebqq}", "clientid": 53999199, "psessionid": "", "status": "online",}
> 动态参数 `ptwebqq`> 储存 `result.uin` & `result.psessionid`> 返回值 `result.vfwebqq` 无用> 成功后有效期约2天,Web QQ 允许多页面同时在线但会出现接口冲突
资料获取 todo
消息收发 todo
其他 todo
来源
- http://www.scienjus.com/webqq-analysis-1
- http://www.scienjus.com/webqq-analysis-2
- http://www.scienjus.com/webqq-analysis-3
- http://www.scienjus.com/webqq-analysis-4
- http://www.scienjus.com/webqq-analysis-5
- Web QQ API 分析
- QQ web api
- web qq协议分析
- WEB API机制分析
- 【协议分析】Web QQ登陆验证分析
- Web QQ协议分析(一)前言
- Web QQ协议分析(二)登陆
- QQ API
- Asp.net web Api源码分析-Filter
- Asp.net web Api源码分析-HttpParameterBinding
- Asp.net web Api源码分析-HttpResponseMessage
- Asp.net web Api源码分析-ParameterBindingAttribute
- Web API应用架构设计分析
- web qq
- WEB QQ
- 腾讯QQ微博API
- QQ API(1)
- qq音乐 api
- 屏幕适配与布局适配
- JS中函数声明与函数表达式
- [02]tensorflow基本用法
- JAVA UUID 生成
- 马士兵servlet&jsp视频教程——第二部分jsp笔记及源代码、servlet和jsp的通信
- Web QQ API 分析
- 优雅编程之这样写函数,你就“正常”了!
- 319. Bulb Switcher
- 【Java】继承和多态
- Unity3D中射线的相关使用
- 表格
- JPages插件实现分页功能。
- STL序列式容器之heap(注heap并不归属于stl组件)
- 黑盒测试与白盒测试的区别