网页抓取解密(未加密的M3U8视频流可以使用ffmpeg工具将视频保存到本地)
优采云 发布时间: 2022-03-30 05:16网页抓取解密(未加密的M3U8视频流可以使用ffmpeg工具将视频保存到本地)
0. 网络视频播放器的演变
随着浏览器的逐渐迭代,在网页上播放视频的解决方案也在不断发展。从早期的 MediaPlayer 到 Flash,再到 video 标签,我们可以更轻松地在网页中播放视频。
1. HLS 协议
在浏览器中,HLS协议的video标签没有保存功能(源地址)。因此,无法直接在浏览器中下载媒体文件,但仅此还不够。用户可以轻松获取云存储上的视频地址,下载到本地播放。因此,HLS提供了一套视频流加密方案,让存储在云存储中的视频流也被加密,由浏览器负责解密和播放。
作为HLS协议的载体,M3U8也是我们后续分析的主要对象。网上有很多关于M3U8文件格式的详细介绍。m3u8文件格式的详细解释可以参考文档。
下面列出了一个示例未加密的门户
未加密的 M3U8 视频流
可以使用ffmpeg工具将视频保存到本地
ffmpeg -protocol_whitelist crypto,file,tcp,http,https,tls -i "https://node.imgio.in/demo/birds.m3u8" -c copy -copyts "birds.ts"
带有加密密钥的示例门户
加密的 M3U8 视频流
因为示例中的解密KEY没有经过认证,所以我们也可以将视频保存到本地
ffmpeg -protocol_whitelist crypto,file,tcp,http,https,tls -i "https://cdn.theoplayer.com/video/big_buck_bunny_encrypted/stream-800/index.m3u8" -c copy -copyts "index.ts"
2. 加密策略
浏览器在解析M3U8协议文件时,如果发现文件中指定了加密策略,则使用当前网络环境访问该地址,获取对应的解密KEY。从云存储读取ts流后,用KEY和IV解密,在网页上播放。由于视频流一般部署在 OSS 或 CDN 中,方便用户下载,此类服务器通常不执行鉴权策略,因此将视频的保护转化为解密 KEY 的保护。
2.1 参考检测
这是一个粗略的解决方案。如果请求源不是来自可信域名,则直接返回错误。我们直接用ffmpeg工具操作M3U8的时候,没有引用URI来访问解密KEY,所以不能直接下载。
2.2 用户认证
很多在线学校通常使用这种方案进行加密,可以根据权限管理决定哪些用户可以获得解密KEY。建议使用更方便的解决方案。使用fiddler抓包,然后使用python脚本解析对应的saz,将m3u8中的URI替换成对应的KEY,然后使用ffmpeg将媒体文件保存到本地。
2.3 自定义 KeyLoader
可以使用该组件支持自定义KeyLoader,通过URI向服务器请求一串字符串,通过自定义KeyLoader解密后得到真正的解密KEY。这就需要我们对KeyLoader源码进行分析。百度云提供的加密视频解决方案就是采用这种策略来实践地址的。AES-ecb用于解密密钥,解密密钥的密钥写在js代码中。
2.4 自定义播放列表加载器
该组件除了自定义KeyLoader外,还支持指定PlaylistLoader,让M3U8文件也动态解密,增强了安全实践地址。通过动态调试可以得到明文M3U8和对应的解密KEY。由于网站的解密算法比较复杂,作者没有尝试提取算法,有兴趣的大神可以分析一下。
3. 下载百度的加密视频
这里使用Chrome浏览器进行演示,网页地址显示在2.3
3.1 捕获关键信息
打开开发人员工具并导航到网络选项卡
点击播放token加密视频
触发了m3u8文件的拉取
拉取视频流的解密KEY
通过关键字在js文件中查找KeyLoader
可以看到这里使用了AES-ecb解密,并且在js文件中也暴露了key
打断点,重新加载视频,就可以看到解密KEY了
3.2 构建可以轻松下载视频的M3U8
如何让ffmpeg工具轻松拿到这个key?我们构建一个服务端接口:接收一个base64编码的参数,解码成二进制流返回给客户端。(这可能是一个更复杂的解决方案,但幸运的是它仍然很常见)
构造 URI 来解密 KEY:
Base64 编码复制的解密 KEY
替换 M3U8 文件中的 URI 部分
3.3 使用ffmpeg下载媒体文件
ffmpeg -protocol_whitelist crypto,file,tcp,http,https,tls -i "baidu.m3u8" -c copy -copyts "baidu.ts"
下载的视频可以正常播放
4. 摘要
在线教育成为了互联网的风口,HLS协议也很适合这个行业。最后,呼吁大家尊重版权,从正规渠道购买视频资源。创作并不容易。
仅供技术交流,请勿用于非法用途。