目錄
- 聲明
- 前言
- 第一節 獲取room_id和ttwid值
- 第二節 signture值逆向
- python 實現signature
- 第三節 Websocket實現長鏈接請求
- protubuf反序列化
- pushFrame反序列化
- Response解壓和反序列化
- 消息體Message解析
- 應答ack
- 參考博客
聲明
本文章中所有內容僅供學習交流使用,不用于其他任何目的,嚴禁用于商業用途和非法用途,否則由此產生的一切后果均與作者無關!
本文章未經許可禁止轉載,禁止任何修改后二次傳播,擅自使用本文講解的技術而導致的任何意外,作者均不負責,若有侵權,請在評論區聯系作者立即刪除!
前言
本文章主要講解網頁版直播間的數據逆向,從獲取room_id和ttwid、signature 值逆向、websocket長鏈接、ack 應答四個方面進行講解。
第一節 獲取room_id和ttwid值
使用chrome瀏覽器打開直播間,在網頁端右擊鼠標點檢查:
出現如下窗口,我且將該界面分為五個部分。
做逆向主要看人家怎么做的,我們就跟著做就好了。看到這你已經入局了。。。。。
抓包數據,定位到數據請求,是一個 websocket 連接,點擊WS,刷新界面。
在payload中會有兩個數據很重要:room_id和signature,每一個直播間的這兩個值都會變化。
搜索room_id,查找在哪里有用到。
這是一個80017709309的一個文檔請求。
鼠標點擊右鍵,選擇“在網絡面板中打開”,需要將curl的代碼轉成python所用的代碼。
復制好之后去該網址(https://curlconverter.com/)轉換。生成python語言。只需要如下字段。 ttwid 作為后面發起 websocket 的 cookie作為響應。
import requests
import reurl = "https://live.douyin.com/80017709309"
cookies = {'__ac_nonce': '067f76f260003620e7eb',
}
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36',
}
response = requests.get(url, cookies=cookies, headers=headers)
ttwid = response.cookies.get_dict()["ttwid"]
print(ttwid)
#將room_id找出來
re = re.findall(r'\\"roomId\\":\\"(\d+)\\',response.text)[0]
print(re)
Edge瀏覽器:
chrome瀏覽器:
很奇怪的是我在chrome瀏覽器中的響應cookie和edge瀏覽器中響應的cookie不一致。
但是不影響程序的運行。
參考:
B站視頻:
https://www.bilibili.com/video/BV1G2cJeTEc3?
安裝與設置環境變量的過程在此網站。
第二節 signture值逆向
首先定位websocket的入口位置,按照數字步驟點擊,即可進入websocket入口位置。
點擊4后跳轉到下圖,打斷點,進入getSocketParams()函數,主要是獲取參數。
進入getSocketParams()函數后,找signature值。s和i 里面都沒有signature值,所以猜測應該在函數里面。