逆向案例二十五——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,一经查实,立即删除!

相关文章

基于torch的图像识别训练策略与常用模块

数据预处理部分: 数据增强:torchvision中transforms模块自带功能,比较实用数据预处理:torchvision中transforms也帮我们实现好了,直接调用即可DataLoader模块直接读取batch数据 网络模块设置: 加载预训练…

【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…

vscode debug 配置:launch.json

打开新项目左边的“运行和调试” 点击蓝色字体“创建 launch.json 文件” 选择上方“python” 选择“Python 文件 调试当前正在运行的Python文件” 配置launch.json文件内容: {// 使用 IntelliSense 了解相关属性// 悬停以查看现有属性的描述。// 欲了解更多信息&a…

设计模式-单一职责原则

基本介绍 对类来说的,即一个类应该只负责一项职责。如类A负责两个不同的职责,职责1,职责2.当职责1需求变更而改变A时,可能造成职责2执行错误,所以需要将类A的粒度分解为A1,A2 应用实例 方案1 public cl…

大厂MVP技术JAVA架构师培养

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

JS时间戳转换 时间戳转时间 js转换时间戳为时间类型显示

JS时间戳转换 时间戳转时间 js转换时间戳为时间类型显示 本方法已经抽离出年月日时分秒 更多的时间格式搭配大家可以随意添加!!! convertToEnglishMonthAbbreviation方法把月份转化成英文显示 大家可以看下 并非使用通过自定义枚举的方式实现…

opencv基础图行展示

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

速成英语语法(2)

be动词 表示事物的性质和状态 ..是.. ..有.. I am Tom 我是汤姆 There are seven days in a week 一个星期有七天be动词的种类 am/is/are 我am 它/她/他is 你arebe的疑问句 含be的陈述句变为疑问句 主语和be对换位置 Are you ready? 你准备好了吗?be的否定否定句 b…

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

✨✨小新课堂开课了,欢迎欢迎~✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏: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…

并查集的延伸--克鲁斯卡尔法求最小生成树MST

并查集的延伸--克鲁斯卡尔法求最小生成树MST 力扣 1135 力扣 1584并查集 UnionFind.java 力扣 1135 力扣 1584 package com.caoii;/**program:labu-pratice-study*package:com.caoii*author: Alan*Time: 2024/4/14 9:09*description: 最小生成树相关题目测试*/import org.jun…

Terminal 美化

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

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

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

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

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