m3u8加密文件原理及下载脚本

Python实战:5分钟搞定AES加密m3u8视频下载(附完整代码) 本文提供了一套极简的Python实战方案,帮助开发者快速下载并解密AES加密的m3u8视频流。通过解析m3u8文件中的EXT-X-KEY标签获取密钥和IV,利用pycryptodome库进行AES-128 CBC模式解密,并整合下载、解密、合并流程,附完整代码实现,5分钟内即可上手。 阅读详情
AI摘要

本文详细介绍了如何解密使用AES-128加密的HLS(m3u8)视频流中的TS文件。步骤包括从m3u8文件中提取加密信息,通过URI获取key,使用OpenSSL进行解密,并提供了一个Python脚本来自动化下载和解密过程。

一、加密ts文件解密

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-ALLOW-CACHE:YES
#EXT-X-TARGETDURATION:13
#EXT-X-KEY:METHOD=AES-128,URI="https://j-island.net/movie/hls_key/s/857401e309d8a032c3bb18f4b09b8db2/?f=jj_20190401_hihijets_004",IV=0xaa3dcf6a7acb92ff4fb08d9b3b3d6f51
#EXTINF:12.078733,
https://j-island.stream2.johnnys-net.jp/j-island/jj_20190401_hihijets_004/jj_20190401_hihijets_00400000.ts
#EXTINF:9.009000,
https://j-island.stream2.johnnys-net.jp/j-island/jj_20190401_hihijets_004/jj_20190401_hihijets_00400001.ts
#EXTINF:9.009000,
https://j-island.stream2.johnnys-net.jp/j-island/jj_20190401_hihijets_004/jj_20190401_hihijets_00400002.ts
#EXTINF:12.012000,
https://j-island.stream2.johnnys-net.jp/j-island/jj_20190401_hihijets_004/jj_20190401_hihijets_00400003.ts
#EXTINF:9.009000,
https://j-island.stream2.johnnys-net.jp/j-island/jj_20190401_hihijets_004/jj_20190401_hihijets_00400004.ts
#EXTINF:2.002000,
https://j-island.stream2.johnnys-net.jp/j-island/jj_20190401_hihijets_004/jj_20190401_hihijets_00400005.ts
#EXT-X-ENDLIST

m3u8视频另一种下载方式 如上图中用ts链接直接下载下来的ts视频文件是加密的(为什么要下加密的?虽然加密但是下载速度快啊)。

#EXT-X-KEY 字段已经写明了加密方式是AES-128,key通过URI获取,IV也有。

#EXT-X-KEY:
METHOD=AES-128,
URI="https://j-island.net/movie/hls_key/s/857401e309d8a032c3bb18f4b09b8db2/?f=jj_20190401_hihijets_004",
IV=0xaa3dcf6a7acb92ff4fb08d9b3b3d6f51

那怎么解密呢?

1.复制URI地址到网页,你将秒速自动下载得到一个16字节文件 2.打开终端,打开该文件查看16进制:

  • 打开二进制key

vi -b /路径/key文件
  • 输入“ :%!xxd”再把二进制文件切换到16进制

00000000: 283d cc2d 3747 e965 0a81 ead3 1e04 fa8a  (=.-7G.e........

获取到key就是 283dcc2d3747e9650a81ead31e04fa8a 3.打开终端,转化

openssl aes-128-cbc -d -in /路径/media_0.ts -out /路径/media_decryptd_0.ts -nosalt -iv $iv -K $strkey

*media_0.ts* : 加密ts文件(无法播放) *media_decryptd_0.ts* : 解密后ts文件(可以直接播放) *$iv* : aa3dcf6a7acb92ff4fb08d9b3b3d6f51(#EXT-X-KEY字段中获取,注意去掉0x) *$strkey* : 283dcc2d3747e9650a81ead31e04fa8a(上一步获得)

例子:

openssl aes-128-cbc -d -in /Users/用户名/Downloads/001.ts -out /Users/用户名/Downloads/001_dec.ts -nosalt -iv aa3dcf6a7acb92ff4fb08d9b3b3d6f51 -K 283dcc2d3747e9650a81ead31e04fa8a

命令执行完秒速转化(也可能我文件特别短,都切成ts了,一般都不长吧…… 4.到对应路径下去,就能看到转化成功到ts视频了

二、案例

1、m3u8文件

通过连接:

https://XXXXXXX/video/20210713/48466f15b9094154a3dc405efd5b54fd/cloudv-transfer/555555552773r8qq5556n265646r92r4_e8f05058b8c14e679738b91d96fa6d60_0_3.m3u8?t=1652097774&k=a062691ead867c707b07b5c6caf87385&vid=9e74e191017a1000dd3e822700000000&r=a8aede38018010004b91ff8f00000000
下载文件内容如下
​
​

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-ALLOW-CACHE:YES
#EXT-X-TARGETDURATION:11
#EXT-X-KEY:METHOD=AES-128,URI="https://api.cloudv.haplat.net/vod/videoManage/getHlsKeyByVideoId?cid=882006&t=1652097774&k=a062691ead867c707b07b5c6caf87385&vid=9e74e191017a1000dd3e822700000000&r=a8aede38018010004b91ff8f00000000",IV=0x993181d25c49657b7b6bfeff30f13d8c
#EXTINF:1.200000,
a08a0c0364dc4000b46560e905564520_0000000.ts
#EXTINF:1.000000,
a08a0c0364dc4000b46560e905564520_0000001.ts
​

2、key值

https://api.cloudv.haplat.net/vod/videoManage/getHlsKeyByVideoId?cid=882006&t=1652097774&k=a062691ead867c707b07b5c6caf87385&vid=9e74e191017a1000dd3e822700000000&r=a8aede38018010004b91ff8f00000000
找到请求的返回值


​将字符串进行16进制编码

 

3 、下载ts文件

通过分析,ts下载网址为

https://xxxxxxx/video/20210713/48466f15b9094154a3dc405efd5b54fd/cloudv-transfer/a08a0c0364dc4000b46560e905564520_0000000.ts
​
构造ts的下载网址为https://xxxxxxx/video/20210713/48466f15b9094154a3dc405efd5b54fd/cloudv-transfer/ + m3u8文件中的数据

4、解码

下载的ts为加密后的,需要进行解码,采用openssl解码

openssl aes-128-cbc -d -in 0.ts -out 0_1.ts -nosalt -iv 993181d25c49657b7b6bfeff30f13d8c -K f370739f5a517a4724c677a73e156126

​5脚本:
#!C:\Python3.7
# -*- coding:utf-8 -*-
# coding=utf-8
import requests
import os
headers = {
    "User - Agent": "Mozilla / 5.0(Windows NT 10.0;WOW64) AppleWebKit / 537.36(KHTML, like Gecko) Chrome / 84.0.4147.105 Safari / 537.36"
    }


def download(baseurl,file_m3u8,path_in):
    url_list=[]
    with open(file_m3u8,"r") as f:
        for r in f.readlines():
            if ".ts" in r :
                url_list.append(r.replace("\n","").strip())
    # print(url_list)

    for r in url_list:
        url = baseurl+r
        filename=os.path.join(path_in,r.split("_")[1])
        # print(url,filename)
        try:
            re = requests.get(url=url,headers=headers)
        except Exception as e:
            print(e)
            pass
        with open(filename,"ab") as f:
            f.write(re.content)
            print("[*]download:"+filename)


def mergeFileToMP4(pathname):
    os.chdir(pathname)
    cmd = "copy /b *.ts new.tmp"
    os.system(cmd)
    os.system('del /Q *.ts')
    os.system('del /Q *.mp4')
    os.rename("new.tmp", "new.mp4")
    os.chdir('..')
    print("merge file is :",str(os.path.join(pathname,"new.mp4")))

def key_test(key):
    print(len(key))
    key_hex=""
    for c in key:
        tem=hex(ord(c))[2:]
        key_hex=key_hex+tem
    print(key_hex)
    return  key_hex

def decode_openssl(key,iv,path_in,path_out):
    for file in os.listdir(path_in):
        file_in=os.path.join(path_in,file)
        file_out = os.path.join(path_out,file)
        # print(file_in,file_out)
        cmd=f"openssl aes-128-cbc -d -in {file_in} -out {file_out} -nosalt -iv {iv} -K {key}"
        print(cmd)
        os.system(cmd)

def clear_ts(path):
    os.chdir(path)
    os.system("del /Q *.ts")

def main(baseurl,key,iv,file_m3u8):
    # print("main")
    basepath = os.path.split(file_m3u8)[0]
    basepath_in = os.path.join(basepath, "in")
    basepath_out = os.path.join(basepath, "out")
    if not os.path.exists(basepath_in):
        os.mkdir(basepath_in)
    if not os.path.exists(basepath_out):
        os.mkdir(basepath_out)

    download(baseurl=baseurl, file_m3u8=file_m3u8,path_in=basepath_in)
    key = key_test(key)
    decode_openssl(key,iv,basepath_in,basepath_out)
    mergeFileToMP4(basepath_out)
    clear_ts(basepath_in)



if __name__ == '__main__':
    # https://xxxxxxx/video/20210713/ea044c31965940559162b816ec8e152a/cloudv-transfer/a08a0bff11c84000b465638605564520_0000001.ts
    baseurl="https://xxxxxxxxx/video/20210713/ea044c31965940559162b816ec8e152a/cloudv-transfer/"
    key="±úx£Ú:êh'ÿs{câ"
    iv="131f71ed838a8019b731be5b7f2a1703"
    file_m3u8="./jixian/3.m3u8"
    file_m3u8 = os.path.join(os.getcwd(),file_m3u8)
    if(os.path.exists(file_m3u8)):
        main(baseurl,key,iv,file_m3u8)
    else:
        print("[-]"+file_m3u8+" not found:\n")
    # download(baseurl)


逆向案例二十五——m3u8中有AES加密怎么处理 网址链接:aHR0cHM6Ly93d3cuY2Jwb3J0YWwub3JnL2N1cGZveHBsYXkvODUyNzctMS0xLw==打开一个视频,打开开发者工具,刷新,搜索m3u8,找到这个含有所有ts连接的包。1.访问密钥的链接,获取二进制密钥,可以直接搜索找到密钥链接。而且加密是AES,告诉了密钥的链接,和向量。3.访问m3u8链接,提取出所有ts的链接。2.制作解码器,传入密钥,加密方式,和IV。一般填充方式都为CBC。 阅读详情

相关推荐

使用 FFmpeg 生成 ts 切片并使用 AES-128 加密

前言 最近有个需求,需要将服务器视频资源进行加密提供给客户端播放,防止用户盗用视频。 常用的加密方式 m3u8切片加密(本文使用) 各种在线播放视频的网站广泛使用的技术,切片同样是使用AES加密算法。 优点:各种浏览器,手机,小程序都能兼容,通用性很好。 缺点:由于是公开的算法,还原也十分简单,有很多影音嗅探工具能直接下载还原,加密效果很弱,防小白可以,聊胜于无。 防翻录:无 文件流加密 采用异或或者AES等文件流加密方式,对文件数据进行处理。播放时动态解密相应的数据到内存再播放。 优点:加密和解密

蜀道难,难于上青天。 1万+

使用openssl m3u8解密 EXT-X-KEY:METHOD=AES-128,URI=xxx

F12 步骤 自动化脚本 #这个预先生成 strkey=30613464393634393866656565386165 #一共有120个小文件 for j in $(seq 0 119) do #echo $j iv=$(printf '%032x' $j) #echo $iv input="./ts/"$j".mp4" output="./output/"$j"_out.mp4" #echo $input #echo $output openssl aes-128-

gdut17的博客 2万+

下载M3U8格式加密视频

如何下载M3U8格式加密视频

欢迎来到三水编程的博客 3046

小X通m3u8视频流AES加密分析

基于小X通对m3u8的ts加解密分析

GalaxySpaceX的博客 1万+

解密M3U8加密视频:从原理到实战下载

本文深入解析了M3U8加密视频的工作原理与下载实战方法。文章首先解释了M3U8作为播放列表及AES-128加密机制的本质,核心在于定位并获取解密所需的“钥匙”。随后详细指导了如何从网络请求或JavaScript代码中寻找密钥,并提供了使用专业下载工具和FFmpeg命令行两种主流下载方案,最后总结了常见问题与避坑指南,帮助读者系统掌握M3U8加密视频的本地化处理技术。

weixin_29323365的博客 3475

使用python下载加密的流媒体m3u8视频文件,获取电影资源

ng)

2401_83817122的博客 1084

Python爬取m3u8格式视频并解密ts文件合并转为mp4格式

一. m3u8是什么格式 m3u8是苹果公司推出的视频播放标准,是m3u的一种,只是编码格式采用的是UTF-8。 m3u8准确来说是一种索引文件,使用m3u8文件实际上是通过它来解析对应的放在服务器上的视频网络地址,从而实现在线播放。使用m3u8格式文件主要因为可以实现多码率视频的适配,视频网站可以根据用户的网络带宽情况,自动为客户端匹配一个合适的码率文件进行播放,从而保证视频的流畅度。 ...

江冷易水寒 1万+

微带T型一分四功分器HFSS仿真与实物制作教程

本文介绍了使用HFSS软件进行微带T型一分四功分器的仿真与使用国产立创EDA软件将HFSS仿真文件转为PCB可加工文件的方法

qq_52127343的博客 2万+

M3U8流媒体处理实战指南:从碎片化视频到完整文件的解决方案

你是否曾遇到想要保存在线视频却面对数百个.ts文件束手无策?当浏览器缓存无法捕获完整视频,当加密保护阻碍内容获取,传统下载工具往往无能为力。本指南专为需要高效保存流媒体内容的开发者和视频爱好者打造,通过三步解决方案,让你轻松掌握M3U8视频的下载与处理技巧,从此告别"看得见却存不下"的烦恼。 ## 问题:流媒体内容为何难以捕捉? 想象一下,你正在观看一部精彩的在线课程,想要保存下来反复学习,却

gitblog_00583的博客 417

端侧部署与优化:让 AI 真正走进现实生活的关键技术

AI 的开发流程分为 “训练” 与 “推理” 两大阶段。在训练阶段,科研人员依托云端海量数据和高性能 GPU 算力,构建出精度优异的 AI 模型 —— 比如能识别 1000 种物体的图像分类模型、能理解人类语言的自然语言处理模型。但这些在云端 “战绩斐然” 的模型,若直接应用到现实场景中,却会面临三大 “落地困境”。从云端到端侧,从模型压缩到硬件适配,端侧部署与优化技术解决了 AI 落地的核心难题,让 AI 不再是实验室里的 “高精尖技术”,而是融入日常生活的 “实用工具”。

m0_63477749的博客 1053

FDTD Solutions-入射波长模式

经常在文献中看到仿真光源使用TM/TE模式,这个确定是十分必要的,决定了仿真结果。 但是也不能局限于选择TM/TE,因为不同领域、不同软件之间的使用习惯和命名可能不同。并且在现代光波导器件中,几乎全部 都是混合模式,或者称之为quasi-TE(准TE模式)和quasi-TM(准TM模式),多数情况下都简称为TE模式和TM模式。要知道 到底是TE模式还是TM模式,需要查看其电场的主分量(即振幅...

HECHUANWANG的博客 1万+

M3U8转MP4不再难:用FFmpeg搞定HLS视频下载与转码

M3U8本质上不是视频文件,而是HLS流媒体协议中的索引清单,它记录着视频分片的路径、顺序和加密信息。很多人在浏览器中拿到M3U8链接后试图直接下载或修改后缀,结果却无法播放,这是因为真正的视频内容被切割成了大量TS分片。解决这一问题的关键是理解协议的运作原理,并借助FFmpeg这一开源命令行工具完成分片拉取、解密、合并与封装转换。FFmpeg不仅能实现无损的流拷贝,还支持重编码来控制画质与体积,更可处理AES-128加密流和直播回放场景。无论是本地视频缓存转MP4,还是批量下载在线课程,掌握这套方法都能大

weixin_29092787的博客 322

HOPE:基于强化学习的混合策略路径规划器,适用于多样化停车场景

本文提出了一种混合策略路径规划器(HOPE),用于解决自动停车中的路径规划问题。HOPE结合了强化学习(RL)和Reeds-Shepp(RS)曲线,通过动作掩码机制引导RL智能体的探索,并利用Transformer融合环境感知信息与掩码。该方法在多样且复杂的停车场景中实现了超过97%的成功率,并通过真实实验验证了其泛化能力。此外,本文还提出了基于空间与障碍物分布的停车场景难度分级标准,进一步提升了训练与评估的效率。实验结果表明,HOPE在规划成功率和跨场景泛化能力上均优于传统的基于规则算法和朴素强化学习方法

weixin_42783201的博客 1466

m3u8下载器原理与实战:HLS分片、FFmpeg与脚本方案

在线视频常以HLS流媒体分发,播放列表m3u8只是索引,真正内容是大量TS或fMP4分片。理解索引解析、分片抓取、AES-128解密与合并原理,才能把网页视频稳定转为本地MP4。m3u8下载器的价值不在按钮,而在并发控制、失败重试、断点续传和音视频时间戳对齐等工程能力;FFmpeg命令行、图形工具和自写脚本分别覆盖轻量、日常与定制场景。对运维、前端和多媒体开发者,HLS排障与批量归档可当手册;普通用户在自有或授权内容范围内也能离线保存培训回放、测试流。围绕m3u8下载器、FFmpeg与TS分片合并的完整链路

weixin_42636895的博客 247

正版63棋牌源代码游戏+728游戏全套带前端源代码解析

这俩天抽时间仔细看了一下这套项目包含完整的前端、后端及后台管理系统。从上传的截图可以看出,前端基于资源目录,后端采用和,后台管理界面提供数据查询与管理功能。本篇文章将从前端结构、后端接口、数据库设计、常见 BUG 及优化方法等方面逐步拆解,并给出相应的代码示例和实践经验。

aa2031171的博客 3583

Pytorch入门实战(2)-使用BP神经网络实现MNIST手写数字识别

上一篇:Pytorch入门实战(1) - 实现线性回归 涉及知识点 Pytorch nn.Module的基本使用 Pytorch nn.Linear的基本用法 PytorchVision Transforms的基本使用 Pytorch中DataLoader的基本用法 Pytorch详解NLLLoss和CrossEntropyLoss 如何确定神经网络的层数和隐藏层神经元数量 本文内容 本文将会使用BP神经网络(就是最普通的神经网络)实现一个MNIST手写数据集的实现。话不多说,直接开始。 首先先导入需要的包

iioSnail的博客 6618

使用多进程教你下载 m3u8 加密或非加密视频

下载 m3u8 加密或非加密视频,让你视频自由

国内某知名游戏公司小菜鸡工程师 2万+

uni-app - 实现全屏自适应且不变形背景大图,设置一张图片占满全屏(根据手机或电脑尺寸自动拉伸背景图像),用于页面是一张平铺的大图做背景的情况,全端兼容

uni-app,vue.js,微信小程序-设置背景图自适应手机屏幕尺寸,页面中的背景图片高度和宽度自适应,UNI-APP里如何设置背景图自适应手机屏幕尺寸,如何实现一个图片铺满整个页面,并且可以根据用户机型进行自动修正,自适应背景大图片官方教程,一个页面如何将图像放到背景上,纯CSS实现,设置背景图片占满全屏,3种CSS实现背景图片全屏铺满自适应的方式,uni-app中如何让图片不带高度的自适应,兼容uni-app全端,支持【纯】微信小程序项目使用,uni-app-实现全屏自适应且不变形背景大图

🏆 前端领域优质创作者 1万+

m3u8加密文件的解密及ts文件的合并

1.既然你能看到我这篇文章,说明你已经看过了其他很多类似的文章了,我也废话不多说了 2.首先你要搞到那个m3u8的文件,打开视频播放一会,然后刷新,再然后点击F12,或者手动进入开发者模式找到.m3u8的文件,然后根据url直接在浏览器中下载就可以,然后打开, #EXTM3U #EXT-X-VERSION:3 #EXT-X-TARGETDURATION:13 #EXT-X-MEDIA-SEQUEN...

小小城的博客 5万+

【AI智能体】Codex 基于Git 实现项目管理实战操作详解

Codex 基于Git 实现项目管理实战操作详解

congge 5459

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

有加密的m3u8视频下载以及解码方法

        突然心血来潮想着,之前爬虫学习也可以爬取一些数据和图片了,那么视频呢?是不是也是找到一个 url 然后直接写入文件保存就可以呢?事实证明没那么容易,四处查资料还是折腾了一天,最后终于可以了。在众多博文中帮助最大的就是如下这篇,非常感谢。 https://blog.youkuaiyun.com/a33445621/article/details/80377424         总的来说,根...

baidu_41902768的博客 40万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Python下载M3U8加密视频示例

大家好,我是小小明。 最近看到几个视频网站的地址依然是m3u8格式,不禁有了使用python进行下载的想法,虽然下载m3u8格式视频的工具很多,但如果我们自行编码就能应对更多的情况。 关于m3u8的基础知识可以参考:Python实时下载B站直播间视频(M3U8视频流) 下面我们将使用Python下载m3u8格式的加密离线视频流。 游览器抓包过滤能够获取该影片的m3u8播放地址: 首先,测试一下该地址: import m3u8 headers = { "User-Agent": "Mozilla/

小小明-代码实体的专栏 3万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

破解某网课的m3u8文件的key加密

1.首先,找到m3u8文件 打开开发者工具,在搜索栏中搜索m3u8,可以看到两个链接 一个链接其中有三个清晰度不同多的m3u8的文件,下面的一个链接就是我们加载的m3u8的文件 这里可以看到,他是使用的AES-128加密,秘钥链接和iv值都给出了。但是事情真的那么简单吗? 2.进入key的链接 发现无法访问这个链接。看来key的链接是加密了。 搜索key,可以看到,key的链接确实是加密了,后面加了个token。我们请求一下这个链接看看 得到了一个32字节的文件,但

qq_59848320的博客 6万+

关于如何下载m3u8加密视频

关于如何下载m3u8加密视频,简单一点说m3u8加密技术就是将原视频分割成n个.ts文件,并用key文件对每一个.ts文件加密,其中m3u8文件里面存储了key文件和所有的.ts文件的地址,所以我们要解密视频需要以上三种文件,最后利用ffmpeg来合并解压

qq_44307844的博客 2万+
上一篇: shodan python
下一篇: Sulley fuzzer learning
devil8123665
博客等级 码龄17年 49粉丝 64原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值