日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Web QQ API 分析

發布時間:2023/12/8 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Web QQ API 分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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,為固定值53999199
    • uin: 登錄用戶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 分析的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。