目录
- 声明
- 前言
- 第一节 获取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 re
url = "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值,所以猜测应该在函数里面。