温馨提示:本文共计2221个字,预计阅读时间需要8分钟。
事情的开始只是某? 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 含义点击这里了解)
12345678910111213141516
#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 的转换包。
1234567891011121314151617181920
@ECHO OFFSET 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-
相关文件下载地址
城通网盘下载
©下载资源版权归作者所有;本站所有资源均来源于网络,仅供学习使用,请支持正版!