当前位置: 首页 > news >正文

抖音的逆向工程获取弹幕(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值,所以猜测应该在函数里面。

相关文章:

  • 【QT网络】构建简单Udp回显服务器
  • Flutter Dart 循环语句 for while do..while break、continue
  • CGAL 网格内部生成随机点
  • 图论---朴素Prim(稠密图)
  • Linux内核netlink机制 - 连接器(Netlink Connector)
  • 解决cannot find attribute `serde` in this scope记录
  • 远程访问服务器的Jupyter Notebook
  • 生成随机验证码-解析与优化
  • 代码随想录算法训练营第一天:数组part1
  • 第六章 QT基础:6、QT的Qt 时钟编程
  • 协作开发攻略:Git全面使用指南 — 第三部分 特殊应用场景
  • JW01三合一传感器详解(STM32)
  • 深度剖析操作系统核心(第一节):从X86/ARM/MIPS处理器架构到虚拟内存、分段分页、Linux内存管理,再揭秘进程线程限制与优化秘籍,助你成为OS高手!
  • Ubuntu 一站式部署 RabbitMQ 4 并“彻底”迁移数据目录的终极实践
  • 【回眸】Aurix TC397 IST 以太网 UDP 相关开发
  • 观成科技:摩诃草组织Spyder下载器流量特征分析
  • SpringCloud——负载均衡
  • Mediamtx与FFmpeg远程与本地推拉流使用
  • 信息系统项目管理工程师备考计算类真题讲解七
  • 【晶振】晶振的工作原理及其与单片机关系
  • 潘功胜在美谈关税:吁全球经济勿滑向“高摩擦、低信任”轨道
  • 2024年度全国十大考古新发现公布,武王墩一号墓等入选
  • 山西国道塌方致55岁货车司机死亡,女儿:货车的车贷还要还
  • 首开股份:去年亏损约81.4亿元,是公司发展史上极其困难的一年
  • A股三大股指集体高开,黄金股大幅回调
  • 七大外贸省市,靠什么撑起一季度的出口?