直播websocket签名signature字段生成逻辑,一步一步带你研究学习

现在每个直播的链接都要签名字段才可以校验成功,所以需要开始debug逻辑,研究一下这个加密的签名字段哪里来的,先找到这个发送请求的js代码在哪里:

找到发送websocket的地方了,看了一下_getSocketParams这就是获取请求参数的方法啊,进入看一下里面的逻辑是啥:

是不是已经看到了signature这个字段,就是这个参数,还需要研究一下他的生成逻辑:

我在这里做了一些注释,方便研究后续逻辑,我们这里看到了,l就是签名signature参数,所以搞出来l就可以了,但是l又依赖s和n,n是websocket_key很明显,那就继续研究s,但是s又依赖于t + a + r + o + ee.VERSION这五个,其中t + r + ee.VERSION = "1.0.14-beta.0"是明显的, 那就需要研究a + o是啥了,a是啥呢?看样子是固定的:

o是啥呢?

看一下q的逻辑就知道o是啥了:

对q的逻辑了做了一些注释:

看一下真实环境里面返回的q都包含哪些数据:

返回的o里面包含的还是挺多的:

{
    "device_platform": "web",
    "cookie_enabled": true,
    "screen_width": 1512,
    "screen_height": 982,
    "browser_language": "zh-CN",
    "browser_platform": "MacIntel",
    "browser_name": "Mozilla",
    "browser_version": "5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
    "browser_online": true,
    "tz_name": "Asia/Shanghai",
    "cursor": "r-1_d-1_u-1_h-7382783779368457243_t-1718938366645",
    "internal_ext": "internal_src:dim|wss_push_room_id:7382756219691223858|wss_push_did:7347516590731134502|first_req_ms:1718938366551|fetch_time:1718938366645|seq:1|wss_info:0-1718938366645-0-0|wrds_v:7382784052924778358",
    "host": "https://live.douyin.com",
    "aid": "6383",
    "live_id": 1,
    "did_rule": 3,
    "endpoint": "live_pc",
    "support_wrds": 1,
    "user_unique_id": "7347516590731134502",
    "im_path": "/webcast/im/fetch/",
    "identity": "audience",
    "need_persist_msg_count": "15",
    "insert_task_id": "",
    "live_reason": "",
    "room_id": "7382756219691223858",
    "heartbeatDuration": "0"
}

然后我们再开一个直播间,对比一下两个直播间生成的这个对象有啥差别:

可以看出来不一样的地方有四个字段,比较重要的有room_id和internal_ext这两个,因为这里面都包含有room_id,这个room_id还是很重要的存在,所以我们可以想办法把这两个字段里面的room_id给替换掉是不是就可以呢?嗯,我们暂时就先使用这种方案来搞出来o吧

有了o,那我们开始下一步搞s吧,看一下返回s的函数内部实现:

还是挺复杂的啊,还是搞我们的对比大法吧,看一下两个直播间的s参数有啥不同:

我去,好像还是这几个参数不一样啊,那不是好办了,直接替换room_id,然后就可以得到新的s了啊,说干就干,试试再说。

重点来了,有了s + n,就可以看一下l的生成逻辑了,l的生成逻辑主要在B这个闭包函数里面,找到这个函数:

就可以看到代码位置在哪里了:

是的,把这里面的逻辑搞清楚不是就可以搞到signature这个签名了嘛,好了,好好研究去吧,同学们,下课

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

String(C++)

文章目录 前言文档介绍经典题目讲解HJ1 字符串最后一个单词的长度 模拟实现框架构造函数析构函数迭代器c_str()赋值size()capacity()reserveempty()[ ]访问front/backpush_backappendoperatorinsert一个字符insert一个字符串eraseswapfind一个字符find一个字符串substr()clear(…

超级会员卡积分收银系统源码 带完整的安装代码包以及搭建部署教程

系统概述 超级会员卡积分收银系统源码是一款专为商业运营打造的综合性软件解决方案。它集成了会员卡管理、积分管理、收银管理等多种功能,旨在为企业提供高效、便捷、准确的运营管理工具。 该系统源码采用先进的技术架构,具有良好的稳定性和扩展性&…

Python火焰锋动力学和浅水表面波浪偏微分方程

🎯要点 🎯流图可视化正弦余弦矢量场 | 🎯解空间变化边界条件二维拉普拉斯方程 | 🎯解圆柱坐标系标量场 | 🎯解一维泊松方程 | 🎯解二维扩散方程 | 🎯解火焰锋的动力学偏微分方程 | &#x1f3a…

自动备份SQL Server数据库,试试这4种方法!

各种规模的企业都使用 SQL 数据库来存储数据。因此,备份 SQL Server 数据库对于确保数据安全并在发生灾难时可恢复至关重要。对于 SQL 数据库备份,有多种可行的方法,对于特定组织来说,方法将取决于其具体需求。 SQL Server 备份的…

Vue69-路由基本使用

一、需求 二、开发步骤 2-1、路由的安装 vue-router3才能在vue2中使用!现在默认是vue-router4版本,要在vue3中使用!所以,安装的时候要指定版本。 2-2、在main.js中引入和使用路由 2-3、创建router文件夹 一般在vue中用了vue-ro…

vb.net c#一键编绎引用DLL如何做?编绎成独立EXE

.net c#一键编绎引用如何做? 3个工程有依懒关系 ClassLibrary1,ClassLibrary2,MainProject (主工程) ClassLibrary2依赖ClassLibrary1,MainProject依赖前2个 如何实现一键按顺序编绎,自动添加前…

【中学教资科目二】03中学教学

03中学教学 第一节 教学的任务1.1 教学的任务 第二节 教学过程2.1 教学过程的本质2.2 教学过程的基本规律 第三节 教学原则3.1 因材施教原则 第四节 教学方法4.1 我国中学常用的教学方法4.2 国外常用的教学方法 第五节 教学组织形式、教学工作基本环节和教学评价5.1 现代其他教…

SpringSecurity实战入门——认证

项目代码 gson/spring-security-demo 简介 Spring Security 是 Spring 家族中的一个安全管理框架。相比与另外一个安全框架Shiro,它提供了更丰富的功能,社区资源也比Shiro丰富。 一般来说中大型的项目都是使用SpringSecurity来做安全框架。小项目有Shiro的比较多,因为相比…

容器之对齐构件

代码&#xff1a; #include <gtk-2.0/gtk/gtk.h> #include <glib-2.0/glib.h> #include <gtk-2.0/gdk/gdkkeysyms.h> #include <stdio.h>int main(int argc, char *argv[]) {gtk_init(&argc, &argv);GtkWidget *window;window gtk_window_ne…

同城跑腿小程序的崛起与用户体验革新

随着移动互联网的飞速发展&#xff0c;人们的生活方式正在发生深刻的变化。在这个快节奏的时代&#xff0c;时间成为了最宝贵的资源。在这样的背景下&#xff0c;同城跑腿小程序应运而生&#xff0c;以其高效、便捷的服务特性&#xff0c;迅速赢得了广大用户的青睐。本文将探讨…

java基于ssm+jsp KTV点歌系统

1管理员功能模块 管理员登录&#xff0c;通过填写注册时输入的用户名、密码进行登录&#xff0c;如图1所示。 图1管理员登录界面图 管理员登录进入KTV点歌系统可以查看个人中心、用户管理、歌曲库管理、歌曲类型管理、点歌信息管理等信息。 修改密码&#xff0c;在修改密码页…

ES6(ECMAScript 6.0) 新特性

1 ES6 基本介绍 &#xff08;1&#xff09;ECMAScript 6.0(简称 ES6)是 JavaScript 语言的下一代标准&#xff0c; 2015 年 6 月发布。 &#xff08;2&#xff09;ES6 设计目标&#xff1a;达到 JavaScript 语言可以用来编写复杂的大型程序&#xff0c;成为企业级开发语言 &…

00 - matlab m_map地学绘图工具安装及简单使用教程

00 - matlab m_map地学绘图工具安装及简单使用教程 0. 引言1. m_map工具的获取及配置过程2. 绘图示例3. 结语 0. 引言 m_map是MATLAB中的一个绘图工具包&#xff0c;用于绘制地图和地理数据。它提供了一系列函数&#xff0c;可以用来绘制地理投影、添加地理特征、绘制等值线图等…

Springboot开发Webservice服务端和客户端

环境说明 Java JDK 1.8、Spring boot 2.1.6、Apache CXF 3.1.6 POM依赖 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.1.6</version&…

可变分区管理 分区分配算法

First Fit Algorithm Best Fit Algorithm FFA&#xff1a;按照分区编号找到第一个能装下进程的起始地址填入第二个表 此时 原表中将起始地址进程大小 分区大小-进程大小 如此继续 BFA&#xff1a;按分区大小排序 从小到大 找到第一个能装下的 剩余步骤和FFA一样 装满了可以直…

【图书推荐】《Linux C与C++一线开发实践(第2版)》

本书重点 主要讲解开发环境搭建、C/C语言基础、文件编程、多进程、Web编程、多线程、库、TCP/IP协议、套接字、并发聊天服务器项目实战。适合选择Linux系统开发方向的开发人员&#xff0c;打下Linux开发的牢固基础。 Linux开发方向比较固定&#xff0c;知识和技能更新没有Web…

【八股系列】为什么组件中的 data 必须是一个函数,然后 return 一个对象,而 new Vue 实例里,data 可以直接是一个对象?

&#x1f389; 博客主页&#xff1a;【剑九 六千里-CSDN博客】 &#x1f3a8; 上一篇文章&#xff1a;【点击一个按钮&#xff0c;浏览器会做些什么事情【呈现效果时流程】&#xff1f;(js)】 &#x1f3a0; 系列专栏&#xff1a;【面试题-八股系列】 &#x1f496; 感谢大家点…

【ARMv8/v9 GIC 系列 4.3 -- GIC 中断控制系统寄存器 ICC_SRE_ELn 使用介绍】

文章目录 GIC 中断控制系统寄存器 ICC_SRE_ELn寄存器位域介绍Interrupt BypassBypass IRQBypass FIQBypass 配置GIC 中断控制系统寄存器 ICC_SRE_ELn ICC_SRE_EL3是中断控制器系统寄存器(Interrupt Controller System Register),用于控制在异常级别3(EL3)下,对GIC CPU接口…

CCAA质量管理【学习笔记】​​ 备考知识点笔记(三)质量管理方法与常见工具

第二部分 质量管理领域专业知识 《质量管理体系基础考试大纲》中规定的考试内容&#xff1a; 3.2 质量管理领域专业知识 a) 了解质量管理方法与工具相关知识&#xff0c;包括&#xff1a; 质量管理方法与工具的内涵与作用、发展历程与应用现状、分类与选择常用的应用软件…

SpringCloud 基于Nacos和Eureka 实现双注册双订阅

一、使用场景/原因 过渡期迁移: 当系统从一个服务注册中心迁移到另一个时&#xff0c;例如从 Eureka 迁移到 Nacos&#xff0c;可以在过渡期内同时使用两个注册中心&#xff0c;确保服务平稳迁移&#xff0c;逐步过渡&#xff0c;避免一次性切换带来的风险。 兼容性考虑: 不同的…