逆向案例二十五——m3u8中有AES加密怎么处理

网址链接:aHR0cHM6Ly93d3cuY2Jwb3J0YWwub3JnL2N1cGZveHBsYXkvODUyNzctMS0xLw==

打开一个视频,打开开发者工具,刷新,搜索m3u8,找到这个含有所有ts连接的包

预览一下:

 

这与平常的m3u8有所不同,如果有下面的代码,说明ts返回的数据有加密

#EXT-X-KEY:METHOD=AES-128,URI="enc.key",IV=0x00000000000000000000000000000000 

这是一个 HLS(HTTP Live Streaming)中的媒体加密标签,用于指定媒体流的加密方法和密钥信息。

在这个标签中:

  • METHOD=AES-128:指定加密方法为 AES-128,表示使用 AES 算法进行加密。
  • URI="enc.key":指定密钥文件的 URI,即密钥文件的路径或链接地址。在这个例子中,密钥文件的路径为 "enc.key"。
  • IV=0x00000000000000000000000000000000:指定初始化向量(Initialization Vector,IV)。IV 是在加密过程中用于增加安全性的参数。在这个例子中,IV 的值为全 0。

总体上,这个标签指定了使用 AES-128 加密方法,密钥文件的路径为 "enc.key",初始化向量为全 0。

而且加密是AES,告诉了密钥的链接,和向量。

对于这种的处理方法

1.访问密钥的链接,获取二进制密钥,可以直接搜索找到密钥链接

 

 

import requests
# 密钥链接
key_url = 'https://hd.ijycnd.com/play/zbqqp2Rb/enc.key'
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
key = requests.get(url=key_url,headers=headers).content

 

2.制作解码器,传入密钥,加密方式,和IV

key = requests.get(url=key_url,headers=headers).content
from Crypto.Cipher import AES
# 将 IV 和密钥转换为字节串
IV = bytes.fromhex('00000000000000000000000000000000')  # IV 字节串
ci = AES.new(key,AES.MODE_CBC,IV=IV)

 

一般填充方式都为CBC 

3.访问m3u8链接,提取出所有ts的链接。

import requests
import re
m3u8_url = 'https://hd.ijycnd.com/play/zbqqp2Rb/index.m3u8'
response = requests.get(url=m3u8_url,headers=headers).text
ts_list = re.sub('#E.*','',response).split()
for ts in ts_list:print(ts)

4.开始保存

number = 0
for ts in ts_list:number += 1print(f'正在保存第{number}个ts文件')ts_content = requests.get(url=ts,headers=headers).contentcontent = ci.decrypt(ts_content)with open('视频.mp4',mode='ab') as f:f.write(content)

 

5.完整代码

import requests
from Crypto.Cipher import AES
import re
# 密钥链接
key_url = 'https://hd.ijycnd.com/play/zbqqp2Rb/enc.key'
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}key = requests.get(url=key_url,headers=headers).content# 将 IV 和密钥转换为字节串
IV = bytes.fromhex('00000000000000000000000000000000')  # IV 字节串
ci = AES.new(key,AES.MODE_CBC,IV=IV)
m3u8_url = 'https://hd.ijycnd.com/play/zbqqp2Rb/index.m3u8'
response = requests.get(url=m3u8_url,headers=headers).text
ts_list = re.sub('#E.*','',response).split()
number = 0
for ts in ts_list:number += 1print(f'正在保存第{number}个ts文件')ts_content = requests.get(url=ts,headers=headers).contentcontent = ci.decrypt(ts_content)with open('视频.mp4',mode='ab') as f:f.write(content)

结果展现:

 

 

 

 

 

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

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

相关文章

【SQL】数据库SQL语句

1、主键 主键值唯一,不可修改,不能为空,删除不能重用 2、数据类型(常用) char int float date timestamp 3、select select * from data; select xx,xxx from data;//取部分行 select * from data limit 100; //限…

Bezier曲线的绘制 matlab

式中: 称为基函数。 。 因为n表示次数,点数为n1,显然i表示第i个控制点。 显然在Matlab中可以同矩阵的形式来计算C(u)。 关键代码为: clc clear % 假设控制点P取值为: P [4,7;13,12;19,4;25,12;30,3]; % 因此&a…

大厂MVP技术JAVA架构师培养

课程介绍 这是一个很强悍的架构师涨薪计划课程,课程由专家级MVP讲师进行教学,分为是一个章节进行分解式面试及讲解,不仅仅是面试,更像是一个专业的架构师研讨会课程。课程内容从数据结构与算法、Spring Framwork、JVM原理、 JUC并…

opencv基础图行展示

"""试用opencv创建画布并显示矩形框(适用于目标检测图像可视化) """ # 创建一个黑色的画布,图像格式(BGR) img np.zeros((512, 512, 3), np.uint8)# 画一个矩形:给定左上角和右下角坐标&#xff0…

数据结构:去发现顺序表的魅力所在

✨✨小新课堂开课了,欢迎欢迎~✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:http://t.csdnimg.cn/oHJAK(数据结构与算法) 小新的主页:编程版小新-CSDN博客 …

Docker入门实战教程

文章目录 Docker引擎的安装Docker比vm虚拟机快 Docker常用命令帮助启动类命令镜像命令docker imagesdocker searchdocker pulldocker system dfdocker rmi 容器命令redis前台交互式启动redis后台守护式启动Nginx容器运行ubuntu交互式运行tomcat交互式运行对外暴露访问端口 Dock…

Linux的内存管理子系统

大家好,今天给大家介绍Linux的内存管理子系统,文章末尾附有分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!可进群免费领取。 Linux的内存管理子系统是Linux内核中一个非常重要且复杂的子系统&#…

防火墙操作!

当小编在Linux服务器上部署好程序以后,但是输入URL出现下述情况,原来是防火墙的原因!! 下面是一些防火墙操作! 为保证系统安全,服务器的防火墙不建议关闭!! 但是,我们可…

【网络安全】WebPack源码(前端源码)泄露 + jsmap文件还原

前言 webpack是一个JavaScript应用程序的静态资源打包器。它构建一个依赖关系图,其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个bundle。大部分Vue等项目应用会使用webpack进行打包,使用webpack打包应用程序会在网站js…

20240327-1-评测指标面试题

评测指标面试题 metric主要用来评测机器学习模型的好坏程度,不同的任务应该选择不同的评价指标,分类,回归和排序问题应该选择不同的评价函数. 不同的问题应该不同对待,即使都是分类问题也不应该唯评价函数论,不同问题不同分析. 回归(Regression) 平均绝对误差(MAE) 平均绝对…

CMake 学习笔记2

其他很好的总结 CMake教程系列-01-最小配置示例 - 知乎 CMake 保姆级教程(上) | 爱编程的大丙 10-补充(完结)_哔哩哔哩_bilibili 1、基本关键字 SET命令的补充 (1)SET命令设置执行标准 #增加-stdc11 set(CMAKE_CXX_STANDARD…

Terminal 美化

摘自:Mac 系统终端美化与 ZSH 多设备配置同步共享 个人对 iTerm2 等第三方终端工具不太感冒,一直在用系统内置终端。 相比之下,系统自带的 Terminal 可谓是简陋啊。 安装了 Oh My Zsh,加上一些插件,感觉还行。 再调…

如何防止软件过度封装和抽象?

一、合适的软件架构 构建可读性强、高内聚、低耦合的软件架构是软件工程中的重要原则,这有助于提高代码的维护性、扩展性和复用性。以下是一些实践方法: 1. **模块化设计**:将系统划分为一系列职责单一、功能明确的模块或组件,每…

ELK企业级日志分析系统以及多种部署

目录 ELK简介 ELK简介 ELK平台是一套完整的日志集中处理解决方案,将 ElasticSearch、Logstash 和 Kiabana 三个开源工具配合使用, 完成更强大的用户对日志的查询、排序、统计需求。 ●ElasticSearch:是基于Lucene(一个全文检索引…

windows应急中的快捷键

windows应急中的快捷键 应急的时候,快捷键很重要,记录一下windows主机排查需要用到的快捷键 windows快捷键 appwiz.cpl 是打开安装面板 程序和功能 控制面板程序和功能 搜索程序和功能 控制而板主页 卸载或更改程序 若要卸酸程序,请从列表中将其…

Python工程师面试高频题:return 和 yield之间到底有啥区别?

在编程语言 Python 中,yield 和 return 是两个在函数中用于返回值的关键字,但它们在功能和使用场景上有着本质的区别。理解这两者的区别,对于编写更高效、更灵活的 Python 代码至关重要。 看图说话 首先我们来看下面这张图片,该…

跨平台桌面应用 Electron 入门学习

本文章主要为该视频的学习笔记,如果侵权会速删。 Electron 01 课程介绍_哔哩哔哩_bilibiliElectron 01 课程介绍, 视频播放量 3046、弹幕量 0、点赞数 75、投硬币枚数 43、收藏人数 179、转发人数 2, 视频作者 极客丶张德龙, 作者简介 当你的能力还不足以撑起自己的…

使用UDP实现TCP的功能,会带来什么好处?

比较孤陋寡闻,只知道QUIC TCPQUIC握手延迟TCP需要三次握手TLS握手三次握手TLS握手放在一起,实现0RTT头阻塞问题TCP丢失保文,会影响所有的应用数据包基于UDP封装传输层Stream,Stream内部保序,Stream之间不存在相互影响…

Coursera吴恩达《深度学习》课程总结(全)

这里有Coursera吴恩达《深度学习》课程的完整学习笔记,一共5门课:《神经网络和深度学习》、《改善深层神经网络》、《结构化机器学习项目》、《卷积神经网络》和《序列模型》, 第一门课:神经网络和深度学习基础,介绍一…

每日一题(leetcode238):除自身以外数组的乘积--前缀和

不进阶是创建两个数组&#xff1a; class Solution { public:vector<int> productExceptSelf(vector<int>& nums) {int nnums.size();vector<int> left(n);vector<int> right(n);int mul1;for(int i0;i<n;i){mul*nums[i];left[i]mul;}mul1;for…