解密m3u8合并加密的TS切片文件
事情的开始只是某? APP 下载后的视频为分段加密 TS 文件,但在 PC 端无法播放。
为了满足自身更好的视觉观感,通过收集学习各方面资料终于完成破解。
其实有了 key,就是一句话的事。
缓存的文件结构分析
如下图,下载后的文件结构非常完全,主要有: index.m3u8,index.key,3 个 json.txt 文件,以及 children 文件夹中的所有切片 TS。
用 PotPlayer 直接打开 m3u8 或者 ts 文件都会报错,从文件列表中可以看出 PotPlayer 是可以正常解读 m3u8 的内容,但为什么无法播放呢?(已指定 key 文件地址)看来还必须得解密转换才行。
了解文件格式的含义
关于 M3U8 的解释
M3U8是Unicode版本的M3U,用UTF-8编码。"M3U"和"M3U8"文件都是苹果公司使用的HTTP Live Streaming格式的基础,这种格式可以在iPhone和Macbook等设备播放。 - 来自维基百科
再看看 HTTP Live Streaming(HLS)的解释
HTTP Live Streaming(缩写是HLS)是由苹果公司提出基于HTTP的流媒体网络传输协议。是苹果公司QuickTime X和iPhone软件系统的一部分。**它的工作原理是把整个流分成一个个小的基于HTTP的文件来下载,每次只下载一些。**当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。在开始一个流媒体会话时,客户端会下载一个包含元数据的extended M3U (m3u8) playlist文件,用于寻找可用的媒体流。 - 来自维基百科
哦,原来 m3u8 相当于内容制定者,让播放器知道去哪里寻找可用流媒体,继续学习 TS 文件格式是什么
MPEG2-TS 传输流(MPEG-2 Transport Stream;又称MPEG-TS、MTS、TS)是一种传输和存储包含视频、音频与通信协议各种数据的标准格式,用于数字电视广播系统,如DVB、ATSC、ISDB[3]:118、IPTV等等。MPEG2-TS定义于MPEG-2第一部分:系统(即ISO/IEC标准13818-1或ITU-T Rec. H.222.0)。MPEG2-TS面向的传输介质是地面和卫星等可靠性较低的传输介质,这一点与面向较可靠介质如DVD等的MPEG PS不同。- 来自维基百科
上面只截取了部分内容,更多可自行搜索,最关键一点,TS 格式的视频流每一个片段都能独立解码,也就是所谓的切片,至于为什么要这样呢,想想实时电视节目吧,你可以任何时刻打开电视机收看(无法快进),原因就是如此,而点播和回放功能就更像是普通 DVD 格式(可快进,暂停)。
那 index.key 文件又是干什么的?这就要再次深入了解关于 HTTP Live Streaming(HTTP Live Streaming)内容加密。
HTTP Live Streaming中内容加密有两种,一种是对TS切片文件直接加密;另一种是对H.264编码文件中类型为1和5的NAL单元进行加密,其它类型的NAL单元不加密。HLS中媒体分块如果是加密的,其加密密钥通过M3U8文件中的#EXT-X-KEY来指定,密钥文件由客户端从服务器请求认证获得。一个播放列表可以有一个以上的#EXT-X-KEY,同一个媒体段也可以有多个不同KEYFORMAT属性值的#EXT-X-KEY。
此时打开 M3U8 文件再看看,看来采用的就是 AES-128 加密,index.key 是加密文件。(更多 tag 含义点击这里了解)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#EXTM3U #EXT-X-KEY:METHOD=AES-128,URI="index.key" #EXT-X-VERSION:3 #EXT-X-TARGETDURATION:10 #EXT-X-MEDIA-SEQUENCE:1 #EXTINF:10, children/bbc-1-v1-a1.ts #EXTINF:4.08, children/bbc-2-v1-a1.ts #EXT-X-DISCONTINUITY #EXTINF:10, children/bbc-3-v1-a1.ts #EXTINF:10, children/bbc-4-v1-a1.ts #EXTINF:10, children/bbc-5-v1-a1.ts |
至此,几乎就明白了视频的加密状况,剩余的 3 个 json 数据主要用于 online 使用,下载后无实际意义,比如 meta.json.txt,打开如下,主要用于 APP 调用后展现封面图和一些其他数据。
解密
了解了这么多,是时候展现一句话的解决方案了。
1 |
ffmpeg -allowed_extensions ALL -i index.m3u8 -c copy crack.mp4 |
没错,用 ffmpeg 一句话搞定,那 ffmpeg 又是什么?唉,解密一个东西强迫学习一堆东西。
FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。- 来自百度百科
从官网可转向到已编译好的 windows 版本网站,我这里下载 422,64-bit,static
然后设置下系统环境变量,如果用我写的批处理完成,可不用手动去设置环境变量,代码如下,文末放个完整含 ffmpeg 的转换包。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
@ECHO OFF SET PATH=%PATH%;%~dp0ffmpeg-4.2.2-win64-static\bin; :INPUTM3U8 SET input= SET /p input=复制M3U8目录: IF "%input%"=="" GOTO INPUTM3U8 CD /D %input% ECHO 切换 %input% 成功 :INPUTNAME SET inputname= SET /p inputname=复制M3U8文件名: IF "%inputname%"=="" GOTO INPUTNAME :CRACK ffmpeg.exe -allowed_extensions ALL -i %inputname% -c copy crack.mp4 ECHO 已完成转换,请在视频目录查看crack.mp4,点击任意键结束 PAUSE >NULL :END |
运行批处理,输入对应目录和对应文件名,如图,搞定,更多 ffmpeg 指令可参考官方文献。
最后,打开 crack.mp4,嗯,因为眼神太过迷离,手动滑稽 ?
现在很多视频网站都采用 TS 格式为首选,主要是因为它很容易使用内容分发网络 CDN 来传输媒体流,反过来,很多程序员也利用类似特点,在各大网站上上传大约 1M 的 TS 视频流,然后再通过 M3U8 完成流媒体播放,妥妥的免费视频床(图片叫图床,所以视频是视频床么),比如这位搞事情的博友。
嗯…… 台湾 SWAG 真的很不错!?
本文参考信息:
-End-
2020年03月30日 15:13 沙发
m3u8可以让视频更加的流畅,几乎盗视频都在用m3u8,爱优腾这三家通过某些软件解析出来的源地址也有好多的m3u8。
2020年03月30日 15:16
@小陆花 ?我以为是哪个美女留言呢,结果是你改了ID,哈哈哈,平时不加密的用IDM下载方便得很,上次你分享那个爬电影的网站框架,就非常方便。
2020年03月30日 18:23 板凳
娃学校每年晚会直播后的视频就是m3u8格式的,弄下来试过好多方法转换,最后都失败了!
2020年03月31日 12:04
@Lvtu m3u8只是清单文件,关键右键打开看看里面的内容定义,给我地址,我试试看能不能帮你爬下来。
2020年03月30日 20:36 地板
水果家增加了不少格式
2020年03月30日 22:46 4楼
以前在网上下过这类型的文件,下载下来找了很多教材都没法合并观看,看来还是得懂一些原理才折腾的过来。
图床被当做视频床用也是腻害。
2020年03月31日 12:06
@Mr.Chou 哈哈,如果没加密,合并很简单的,用ffmpeg就能搞定,下次不妨试试
2020年03月31日 09:14 5楼
很多网站在线播放都是切片,学习了
2020年03月31日 09:22 6楼
就是说,资源提供方把密钥(index.key)跟内容一起放出来,给了你可乘之机,是这个意思不?
SWAG确实不错,能听懂还不容易踩雷。
2020年03月31日 11:50
@大致 key文件肯定要标记出来,不然APP自己也播放不了,反正有key就能转换成功MP4,所以最后的关键问题,大致兄平时在哪里看SWAG呢 ?
2020年03月31日 13:01
@Sam.Z 我懂的不多,只知道中文社区最后的良心。
2020年04月01日 12:03 7楼
在各大网站上上传大约 1M 的 TS 视频流,然后再通过 M3U8 完成流媒体播放,妥妥的免费视频床,这个是怎么玩的?你给的那个搞事情的博友的链接打不开
2020年04月01日 12:06
@秦大叔 搞事情博友的网站能打开呀,其实就是利用了这种分段式流媒体的特征,你搜索下,网上还有其他类似的教程。
2020年04月02日 17:04 8楼
最近在loc上也看到了把阿里图床当视频床用的
2020年05月18日 10:52
@小石 阿里图床已经用不了了
2020年04月03日 09:42 9楼
厉害~~~~
2020年04月13日 10:53 10楼
不懂加密的意义在哪里?耗cpu玩?
2020年04月13日 10:55
@心灵博客 如果是通过web访问下载的加密TS片段,就无法打开,得去探测web上加密文件的位置才行,算是一种保护吧
2020年08月01日 22:12 11楼
请问我运行后报错:Error when loading first segment ‘c7d3982d0df4c86272e3cadca514f565_3_0.ts’
c7d3982d0df4c86272e3cadca514f565_3.m3u8: Invalid data found when processing input
这是什么情况
2020年08月03日 15:13
@火山飘雪 m3u8和实际的内容应该有问题,报错是说读取第一段ts的时候就错误了,数据无效。
2020年11月27日 20:58 12楼
ios iphone 查不到ts 文件在哪里。着急
2021年06月28日 22:42 13楼
为啥合并完成之后是NULL ?
2021年06月28日 23:15
@小傻子 是不是哪里操作不对,可以说下细节