Web QQ协议分析

本文信息 站在前人的肩膀上
本文信息 不定期更新

前言

对Web QQ协议的一些看法

  1. 整个鉴权模块Cookie、Session、Token全都用上了
  2. 加密函数压缩混淆后放在JS还是会被找出来,不过只要偶尔换换也很折腾人
  3. 整个登录流程分了5步,偶尔加一步、减一步或者改一步同样折腾人
  4. 返回数据只提供了返回码而没有描述,因为什么失败了自己猜去吧
  5. 大部分请求都同时检查了Cookie、Referer、User-Agent和Origin(只有Post请求有)
  6. 对一些不合理的情况进行了判断,比如登录后却没有发起接收消息的
  7. 请求 对访问频率进行了控制,太频繁的请求也会被拒绝

版本

2015年12月版本的Web QQ协议

Api 数据来源

基本上都是通过Chrome控制台对Smart QQ进行抓包得到的

公共约定:

  1. 保证请求头中包含正常的User-Agent、Referer、Cookie等信息,如果是Post请求需要额外加上Origin
  2. 在大部分情况下(除了获取二维码和确认二维码状态),返回内容均为JSON,其中retcode为请求结果(0为成功),response为返回数据
  3. 不过还有个特例是发送消息的接口,成功时返回的字段是errCode,失败时才是retcode
  4. 请求失败后,返回的错误码如果是1000000或1000001,几乎可以认为是缺少了第一条中的某个数据
  5. 如果请求参数中有t,当前版本不会检验它的值,所以我统一设为0.1,但是实际上它的值一般情况下均为当前时间的unix timestamp
  6. 如果返回的返回的错误码为1000003,很有可能是你的请求频率过于频繁

登录

获取cookie,用户登录逻辑的模拟。

目标参数

  • ptwebqq:保存在Cookie中的鉴权信息
  • vfwebqq:类似于Token的鉴权信息
  • psessionid:类似于SessionId的鉴权信息
  • clientid:设备id,为固定值53999199
  • uin: 登录用户id(其实就是当前登录的QQ号)

登陆流程

  1. 获取二维码
  2. 确认二维码已被扫描
  3. 获取鉴权参数ptwebqq
  4. 获取鉴权参数vfwebqq
  5. 获取鉴权参数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 分析相关推荐

  1. web qq协议分析

    WebQQ网页登陆HTTP接口探究 1.研究说明 Tencent在tqq.tencent.com的8000有一个使用HTTP的QQ接口,通过这个接口,可以进行一些基本的操作,如:登陆.登出.改变登陆状 ...

  2. Web性能API——帮你分析Web前端性能

    开发一个现代化的互联网网站是一项复杂的任务,需要各种职能的密切合作以应对用户日新月异的需求.其中,网页的性能直接决定了用户的体验,而随着新型客户端浏览设备的出现与网站功能的日益复杂化,对于性能的专注也 ...

  3. 【协议分析】Web QQ登陆验证分析

    今天开始想写个验证QQ密码的工具,以前写过一个QQ验证器的程序,就拿了那个代码试了一下居然不能同.就到QQ登陆页面去抓包. xmit.jpg (110.62 KB, 下载次数: 111) 下载附件   ...

  4. Web Audio API实现简单变声效果

    前言 想在网页中实现实时音频变声效果该如何实现呢,之前遇到这种处理音视频的需求,可能会想到需要借助C代码实现.但是现在随着浏览器性能的提升.web API的丰富,通过浏览器原生的API也可以操作音频数 ...

  5. Web动画API教程:可爱的运动路径(Motion Path)

    这是介绍浏览器中web动画API的系列教程的第五篇.如果你有什么问题/想法,或者发现我理解错了规范的内容,或是希望我在接下来的文章中对某部分内容进行探讨的话,请在Twitter给我留言吧~@dancw ...

  6. 【jQuery】smartMenu右键自定义上下文菜单插件(似web QQ)

    DEMO: http://sources.ikeepstudying.com/menu-mail-qq/ 一.这是什么样的一个插件 我们都知道,默认状态下,我们右键web页面,会出现一个上下文菜单,例 ...

  7. 10个好用的Web日志安全分析工具

    首先,我们应该清楚,日志文件不但可以帮助我们溯源,找到入侵者攻击路径,而且在平常的运维中,日志也可以反应出很多的安全攻击行为. 一款简单好用的Web日志分析工具,可以大大提升效率,目前业内日志分析工具 ...

  8. 【Web】1326- 深入浅出 Web Audio API

    前言 2011被提出,同年草案被Google Chrome和Mozilla Firefox实现 在此之前Web音频较为原始,无法应付较为复杂的应用场景,例如Web游戏或互动应用 旨在提供全套Web音频 ...

  9. HTML 利用 Web Audio API 进行音频可视化

    利用Web Audio API 进行音乐可视化 1.什么是 Web Audio API: 官方:Web Audio API 提供了在Web上控制音频的一个非常有效通用的系统,允许开发者来自选音频源,对 ...

最新文章

  1. 通过Python在Windows或Linux上快速搭建HTTP服务器
  2. AWS之EC2搭建WordPress博客
  3. sap和OA之间数值传递2(工程创建)
  4. 初学微信小程序 TodoList
  5. 【杂谈】图像识别书看完了感觉不过瘾?这些拓展资料值得你关注一下
  6. explode() 字符串转换数组
  7. Centos7 LAMP服务源码搭建
  8. 20172304 2017-2018-2 《程序设计与数据结构》第六周学习总结
  9. GitHub推出云端IDE,可在浏览器里使用VS Code了
  10. linux 如何解压.exe,linux下解压火狐浏览器压缩包 ./filefox 运行可执行程序报错问题...
  11. c调用python keras模型_tensorflow中调用keras训练模型作为一个计算过程
  12. php pathseparator,在PHP拥有与命名空间和通过set_include_path()的一个问题
  13. 通过内网穿透 将本地端口 使其外网可以进行访问 使用花生壳内网穿透 网站访问
  14. (转)Moblin V2活动映像安装详解
  15. C#多线程学习笔记(三)
  16. 开发者必装的软件工具总结
  17. Java图形用户界面实验
  18. 运维简历怎么写项目描述_应届生没有工作经验该怎么写简历?
  19. led灯闪烁代码_如何设置LED灯并使其通过代码闪烁
  20. 武汉公布304个可售楼盘名单,保证供应稳定市场预期(蚌埠华瑞房地产评估)

热门文章

  1. Dreamweaver2021安装教程与创建第一个网页
  2. MQTT——EMQX学习笔记01——EMQX安装使用
  3. K8s系列之:搭建高可用K8s v1.23.5集群详细步骤,3个master节点,3个Node节点
  4. 麦克风声源定位原理_使用麦克风阵列对声源定位的方法
  5. SQL Server2012 序列号 注册码
  6. 使用openssl制作证书和进行CMS格式数字签名
  7. 随笔-springBoot配置全局跨域
  8. 神仙道战斗游戏逻辑设计
  9. 租车App第一次迭代报告
  10. hydrus1d使用说明_Hydrus-1D中文说明.doc