2020-03-30  32,810 views 23

解密m3u8合并加密的TS切片文件

温馨提示:本文共计2221个字,预计阅读时间需要8分钟。

解密加密的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的参数

此时打开 M3U8 文件再看看,看来采用的就是 AES-128 加密,index.key 是加密文件。(更多 tag 含义点击这里了解

至此,几乎就明白了视频的加密状况,剩余的 3 个 json 数据主要用于 online 使用,下载后无实际意义,比如 meta.json.txt,打开如下,主要用于 APP 调用后展现封面图和一些其他数据。

json文件解析

解密

了解了这么多,是时候展现一句话的解决方案了。

没错,用 ffmpeg 一句话搞定,那 ffmpeg 又是什么?唉,解密一个东西强迫学习一堆东西。

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。- 来自百度百科

官网可转向到已编译好的 windows 版本网站,我这里下载 422,64-bit,static

下载ffmpeg

然后设置下系统环境变量,如果用我写的批处理完成,可不用手动去设置环境变量,代码如下,文末放个完整含 ffmpeg 的转换包。

运行批处理,输入对应目录和对应文件名,如图,搞定,更多 ffmpeg 指令可参考官方文献。

转换加密的TS文件

最后,打开 crack.mp4,嗯,因为眼神太过迷离,手动滑稽 ?

成功截图


现在很多视频网站都采用 TS 格式为首选,主要是因为它很容易使用内容分发网络 CDN 来传输媒体流,反过来,很多程序员也利用类似特点,在各大网站上上传大约 1M 的 TS 视频流,然后再通过 M3U8 完成流媒体播放,妥妥的免费视频床(图片叫图床,所以视频是视频床么),比如这位搞事情的博友

嗯…… 台湾 SWAG 真的很不错!?

本文参考信息:

视频内容加密封装技术研究

-End-

相关文件下载地址
独享的桎梏束缚着人类的进步,唯共享才能推动创新和思考。

23 条评论  访客:15 条  作者:8 条

  1. 小陆花 LV1

    m3u8可以让视频更加的流畅,几乎盗视频都在用m3u8,爱优腾这三家通过某些软件解析出来的源地址也有好多的m3u8。

    • Sam.Z GM

      @小陆花 ?我以为是哪个美女留言呢,结果是你改了ID,哈哈哈,平时不加密的用IDM下载方便得很,上次你分享那个爬电影的网站框架,就非常方便。

  2. Lvtu LV2

    娃学校每年晚会直播后的视频就是m3u8格式的,弄下来试过好多方法转换,最后都失败了! :???:

    • Sam.Z GM

      @Lvtu m3u8只是清单文件,关键右键打开看看里面的内容定义,给我地址,我试试看能不能帮你爬下来。

  3. 一介大叔 LV2

    水果家增加了不少格式

  4. Mr.Chou LV4

    以前在网上下过这类型的文件,下载下来找了很多教材都没法合并观看,看来还是得懂一些原理才折腾的过来。
    图床被当做视频床用也是腻害。

    • Sam.Z GM

      @Mr.Chou 哈哈,如果没加密,合并很简单的,用ffmpeg就能搞定,下次不妨试试 :mrgreen:

  5. Melody

    很多网站在线播放都是切片,学习了

  6. 大致 LV2

    就是说,资源提供方把密钥(index.key)跟内容一起放出来,给了你可乘之机,是这个意思不?
    SWAG确实不错,能听懂还不容易踩雷。

    • Sam.Z GM

      @大致 key文件肯定要标记出来,不然APP自己也播放不了,反正有key就能转换成功MP4,所以最后的关键问题,大致兄平时在哪里看SWAG呢 ?

      • 大致 LV2

        @Sam.Z 我懂的不多,只知道中文社区最后的良心。

  7. 秦大叔 LV2

    在各大网站上上传大约 1M 的 TS 视频流,然后再通过 M3U8 完成流媒体播放,妥妥的免费视频床,这个是怎么玩的?你给的那个搞事情的博友的链接打不开

    • Sam.Z GM

      @秦大叔 搞事情博友的网站能打开呀,其实就是利用了这种分段式流媒体的特征,你搜索下,网上还有其他类似的教程。

  8. 小石 LV3

    最近在loc上也看到了把阿里图床当视频床用的 :mrgreen:

  9. 野生的喵喵 LV2

    :mrgreen: 厉害~~~~ :wink:

  10. 心灵博客 LV2

    不懂加密的意义在哪里?耗cpu玩?

    • Sam.Z GM

      @心灵博客 如果是通过web访问下载的加密TS片段,就无法打开,得去探测web上加密文件的位置才行,算是一种保护吧

  11. 火山飘雪

    请问我运行后报错:Error when loading first segment ‘c7d3982d0df4c86272e3cadca514f565_3_0.ts’
    c7d3982d0df4c86272e3cadca514f565_3.m3u8: Invalid data found when processing input
    这是什么情况

    • Sam.Z GM

      @火山飘雪 m3u8和实际的内容应该有问题,报错是说读取第一段ts的时候就错误了,数据无效。

  12. lix

    ios iphone 查不到ts 文件在哪里。着急

  13. 小傻子

    为啥合并完成之后是NULL ?

    • Sam.Z GM

      @小傻子 是不是哪里操作不对,可以说下细节

评论已关闭!