抖音的逆向工程获取弹幕(websocket和protobuf解析)

目录

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/78257.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

反射,枚举,lambda表达式

目录 反射枚举的使用Lambda表达式函数式接口语法Lambda表达式语法精简 变量捕获Lambda在集合List中的使用 反射 作用:在Java代码中,让一个对象认识到自己 比如一个类的名字,里面的方法,属性等 让程序运行的过程,某个对…

鸿蒙移动应用开发--渲染控制实验

任务:使用“对象数组”、“ForEach渲染”、“Badge角标组件”、“Grid布局”等相关知识,实现生效抽奖卡案例。如图1所示: 图1 生肖抽奖卡实例图 图1(a)中有6张生肖卡可以抽奖,每抽中一张,会通过弹层显示出来&#xf…

webpack基础使用了解(入口、出口、插件、加载器、优化、别名、打包模式、环境变量、代码分割等)

目录 1、webpack简介2、简单示例3、入口(entry)和输出(output)4、自动生成html文件5、打包css代码6、优化(单独提取css代码)7、优化(压缩过程)8、打包less代码9、打包图片10、搭建开发环境(webpack-dev-server&#xf…

Java快速上手之实验4(接口回调)

1.编写接口程序RunTest.java,通过接口回调实现多态性。解释【代码4】和【代码6】的执行结果为何不同? interface Runable{ void run(); } class Cat implements Runable{ public void run(){ System.out.println("猫急上树.."…

Volcano 实战快速入门 (一)

一、技术背景 随着大型语言模型(LLM)的蓬勃发展,其在 Kubernetes (K8s) 环境下的训练和推理对资源调度与管理提出了前所未有的挑战。这些挑战主要源于 LLM 对计算资源(尤其是 GPU)的巨大需求、分布式任务固有的复杂依…

Qwen2.5简要全流程以及QA

1 输入prompt 得到input id input id: [B,L] # batch size , lenth 2 embeding之后得到 input_embeds: [B,L,D] # demensions 3 进入Transformer层 先通过linear层得到shape不变的 QKV 多头注意力 分割Dimension , kv变成 [B,H,L,head_dim] h是…

爬虫学习——Item封装数据与Item Pipeline处理数据

一、Item封装数据 对于有字段的数据,最好的数据结构维护方法为字典类型(dict),但是由于字典不便于携带元数据和传递给其他组件使用,故可以使用Item类封装爬取到的数据。 这里涉及两个类:Item基类和Field类 两者的使用关系如下&…

【React】状态管理 Context API \ MobX \ Redux

Context APIMobXRedux React有自己状态管理,周边生态也有很多状态管理 Context API 直接从react中引入并调用即可,context包含两个东西: Provider:提供商(翻译),提供数据;属性&…

RK3588上编译opencv 及基于c++实现图像的读入

参考博文: https://blog.csdn.net/qq_47432746/article/details/147203889 一、安装依赖包 sudo apt install build-essential cmake git pkg-config libgtk-3-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libjpe…

MATLAB 训练CNN模型 yolo v4

学生对小车控制提出了更好的要求,能否加入深度学习模型。 考虑到小车用matlab来做,yolo v5及以上版本都需要在pytorch下训练,还是用早期版本来演示。 1 yolov4 调用 参考 trainYOLOv4ObjectDetector (mathworks.com) name "tiny-yo…

Windows下使用 VS Code + g++ 开发 Qt GUI 项目的完整指南

🚀 使用 VS Code g 开发 Qt GUI 项目的完整指南(Windows MSYS2) 本指南帮助你在 Windows 下使用 VS Code g CMake Qt6 快速搭建 Qt GUI 项目,适合熟悉 Visual Studio 的开发者向跨平台 VS Code 工具链迁移。 🛠️…

开源漏洞扫描器:OpenVAS

一、OpenVAS介绍 OpenVAS (Open Vulnerability Assessment System) 是一款功能强大的开源漏洞扫描器。它由 Greenbone Networks 开发和维护,是 Greenbone 安全管理器 (GSM) 产品的基础,同时也有免费的社区版本(Greenbone Community Edition&…

Redis Pipeline 详解

Redis Pipeline 详解 Redis 无 Pipeline 耗时情况 : #mermaid-svg-8RIiJyeBO0uIrWjr {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-8RIiJyeBO0uIrWjr .error-icon{fill:#552222;}#mermaid-svg-8RIiJyeBO0uIrWjr .…

2025.04.24【3D】3D绘图入门指南

Nifty graph A contribution by Matt Asher. 3D animation A 3D animated scatterplot made with R and rgl. 文章目录 Nifty graph3D animation 2025.04.24【3D】| 3D绘图入门指南什么是3D绘图?为什么使用3D绘图?如何在R中进行3D绘图?安装…

[特殊字符] 分布式事务中,@GlobalTransactional 与 @Transactional 到底怎么配合用?

在微服务架构中,随着系统模块的拆分,单体应用中的本地事务已经无法满足跨服务的数据一致性需求。此时,我们就需要引入分布式事务解决方案,比如 Seata。在使用 Seata 的过程中,很多人会遇到一个常见的疑问: …

TDengine 集群高可用方案设计(二)

四、TDengine 集群高可用方案设计 4.1 硬件与网络架构设计 服务器选型:选择配置高、稳定性强的服务器,如戴尔 PowerEdge R740xd、华为 RH2288H V5 等。以戴尔 PowerEdge R740xd 为例,它配备英特尔至强可扩展处理器,具备高性能计…

从对数变换到深度框架:逻辑回归与交叉熵的数学原理及PyTorch实战

目录 前言 一、连乘变连加二、最小化损失函数2.1交叉熵2.2 二分类交叉熵2.3 多分类交叉熵三、逻辑回归与二分类3.1 逻辑回归与二分类算法理论讲解3.1.1 散点输入3.1.2 前向计算3.1.3 Sigmoid函数引入3.1.4 参数初始化3.1.5 损失函数3.1.6 开始迭代3.1.7 梯度下降显示四、基于框…

高企复审奖补!2025年合肥市高新技术企业重新认定奖励补贴政策及申报条件

一、合肥市高新技术企业重新认定奖励补贴政策 (一)高新区高新技术企业重新认定复审补贴奖励 重新认定为国家高新技术企业的给予5万元一次性奖励。 (二)经开区高新技术企业重新认定复审补贴奖励 对重新认定的企业,给…

Spring Boot 中配置线程池时优化 `ThreadPoolTaskExecutor` 的配置总结

在 Spring Boot 中配置线程池时,可以通过以下方式进一步优化 ThreadPoolTaskExecutor 的配置,提升性能、灵活性和可靠性: 优化点 1:合理设置线程池参数 关键参数调整 Bean(name "taskExecutor") public Executor tas…

opencv 图像的旋转

图像的旋转 1 单点旋转2. 图片旋转(cv2.getRotationMatrix2D)3. 插值方法3.1 最近邻插值(cv2.INTER_NEAREST)3.2 双线性插值(cv2.INTER_LINEAR)3.3 像素区域插值(cv2.INTER_AREA)3.4 双三次插值(cv2.INTER_CUBIC&#…