WideVineDRM视频解密
本文的目标只是为了能够简单的了解一下WideVineDRM
1、熟悉流媒体
流媒体(Streaming Media)是一种通过网络实时传输数据的技术,利用户能够在不必先下载完整文件的情况下,边吸收数据边播放音频、视频或其他多媒体内容。换句话说,流媒体技术可以让我们直接观看或收听在线的音视频内容,而不必要等候整个文件完全下载完成。
2、流媒体的特点:
- 实时播放:流媒体数据在用户设备上实时吸收并播放,而不是先下载完整文件后再播放。
- 持续传输:数据以连续流的方式传输,确保播放不停止。
- 不必要完整下载:用户可以在传输的过程中开始播放,而不必等候完整下载。
3、常见的流媒体范例:
- 视频流媒体:如YouTube、Netflix、腾讯视频、爱奇艺等,用户可以实时观看视频内容。
- 音频流媒体:如Spotify、Apple Music、网易云音乐等,用户可以实时收听音乐或广播。
- 直播流媒体:如Twitch、YouTube直播、Bilibili直播等,用户可以观看实时的直播内容。
4、流媒体的工作原理:
流媒体技术通过将音视频内容切分成小的数据包,这些数据包会被分批次、按顺序地传输到客户端。客户端设备吸收到数据后,会将这些数据实时解码并展示给用户。例如,视频流会被切分成多个小的帧,然后逐帧播放。
常见的流媒体协议包罗:
- RTSP(Real-Time Streaming Protocol) :用于控制视频流的启动、暂停、制止等操作。
- HLS(HTTP Live Streaming) :通过HTTP协议实现流媒体播放,广泛应用于视频直播。
- DASH(Dynamic Adaptive Streaming over HTTP) :另一种基于HTTP的流媒体传输协议,能够自适应网络带宽。
流媒体技术的上风在于,它淘汰了用户等候的时间,提升了用户体验,同时支持各种设备和网络环境下的内容分发。
其实说白了就是多缓存一些。上面这些介绍都来自于chatgpt
5、什么是DRM
DRM 主子版权管理是一种技术 策略工具用来保护数字内容的版权和防止未授权的复制、分发或利用。一般用于流媒体
其实m3u8 也是一种DRM这是众所周知的。
好比说。在m3u8信息里面有一种AES加密的,那就是一种特殊的DRM
在源代码中如下:- #EXT-X-KEY:METHOD=AES-128,URI="key.bin"
复制代码 6、初步熟悉WidevineDRM
这里说一下我所知道的WidevineDRM吧。
- Windevine 分为三个品级L1、L2、L3,他们的加密程度不一样。其中L1加密的最恨 L3加密的比较轻了就。 所以我们先了解L3
- 加密设备可以是硬件设备和软件设备,硬件设备无法被破解,除非拿到他的硬件,然后去逆向他的硬件设备。 软件设备相对就轻松一些。
提供几个站点吧。
其实看这些站点有点像大海捞针的感觉,所以还是应该留意一下的,我不太建议如许操作。
7、熟悉一个开源库
WidevineProxy2: https://github.com/DevLARLEY/WidevineProxy2
这个开源库的利用方法如下(官方已经解释的很清楚了 ,但是是英文的,所以我在这里再说一遍吧):
这里只针对谷歌浏览器哈。火狐的话原理是一样的
- 在 release 中下载zip文件
- 打开 url 将刚才的zip文件 拖入进来,即可实现我们的目标。
打开后的界面是如许的
这时候我们就必要继续阅读github文档了。
官方说:- 如果您只有device_client_id_blob和device_private_key,请运行此命令来创建.wvd 文件:
- pywidevine create-device -k device_private_key -c device_client_id_blob -t "ANDROID" -l 3
- 现在,打开扩展,单击Choose File并选择您的 Widevine 设备文件。
复制代码 起首我们应该先了解一下 device_client_id_blob 文件和 device_private_key文件怎么获取。
- device_client_id_blob:通常存储设备的标识符和设置数据,用于身份验证和设备注册。
- device_private_key:存储设备的私钥,用于加密通信、数字签名和身份验证。
AI就是好用。
对于如何获取这两个密钥,其实网上说早期可以浏览器直接抓包获取密钥,但是现在已经不适用了,生不逢时啊。
现在可以从安卓设备上提取,如果没有安卓设备也可以从支持DRM的安卓虚拟机中提取。、
这里有一个开源项目开源看一下 L3-Dumping
必要用到安卓逆向的东西,我不会,但是我已经有密钥文件了。哦哈哈哈
拿到device_client_id_blob 文件和 device_private_key 文件后就可以进行下一步操作了。
我直接执行上面说的即可, 生成一个.wvd 文件
在插件中选择Choose File ,后选择wvd文件即可
这里我利用一个DRM保护的网站进行测试
留意感觉观察两个重点,
一个是ChooseFIle 下面一句,L3加密,
已经下面的一些Keys data 什么什么的都有了
我们直接吧CMD里面的命令复制到cmd中。- 11:22:36.008 INFO : N_m3u8DL-RE (Beta version) 20241203
- 11:22:36.025 INFO : 加载URL: https://vod-playlist.sr.roku.com/1.mpd?origin=https%3A%2F%2Fvod.delivery.roku.com%2Fe174c5f87e80445aa595c04ec8ab2d2e%2Fc672fdbb6a5c40c89adf8b6d7de5ca80%2F9cfdd7260db04117a8259afeb417d2a4%2Findex.mpd%3Faws.manifestfilter%3Daudio_codec%3AAACL%2CAACH%3Baudio_language%3Aen%2Ceng%3Bsubtitle_language%3Aunused&ovpFilter=
- 11:22:37.261 INFO : 内容匹配: Dynamic Adaptive Streaming over HTTP
- 11:22:37.263 INFO : 正在解析媒体信息...
- 11:22:37.341 WARN : 写出meta json
- 11:22:37.372 INFO : 已解析, 共计 6 条媒体流, 基本流 5 条, 可选音频流 1 条, 可选字幕流 0 条
- 11:22:37.374 INFO : Vid *CENC 1920x1080 | 4171 Kbps | 5 | 23.976 | avc1.640028 | 3252 Segments | ~01h48m30s
- 11:22:37.376 INFO : Vid *CENC 1280x720 | 2621 Kbps | 4 | 23.976 | avc1.4D401F | 3252 Segments | ~01h48m30s
- 11:22:37.377 INFO : Vid *CENC 720x406 | 971 Kbps | 3 | 23.976 | avc1.42C01E | 3252 Segments | ~01h48m30s
- 11:22:37.379 INFO : Vid *CENC 512x288 | 571 Kbps | 2 | 23.976 | avc1.42C01E | 3252 Segments | ~01h48m30s
- 11:22:37.380 INFO : Vid *CENC 384x216 | 271 Kbps | 1 | 23.976 | avc1.42C01E | 3252 Segments | ~01h48m30s
- 11:22:37.381 INFO : Aud *CENC 6 | 128 Kbps | mp4a.40.2 | eng | 2CH | 3252 Segments | ~01h48m30s
- 请选择 你要下载的内容:
- > [ ] Basic
- [X] Vid *CENC 1920x1080 | 4171 Kbps | 5 | 23.976 | avc1.640028 | 3252 Segments | ~01h48m30s
- [ ] Vid *CENC 1280x720 | 2621 Kbps | 4 | 23.976 | avc1.4D401F | 3252 Segments | ~01h48m30s
- [ ] Vid *CENC 720x406 | 971 Kbps | 3 | 23.976 | avc1.42C01E | 3252 Segments | ~01h48m30s
- [ ] Vid *CENC 512x288 | 571 Kbps | 2 | 23.976 | avc1.42C01E | 3252 Segments | ~01h48m30s
- [ ] Vid *CENC 384x216 | 271 Kbps | 1 | 23.976 | avc1.42C01E | 3252 Segments | ~01h48m30s
- [ ] Audio
- [X] Aud *CENC 6 | 128 Kbps | mp4a.40.2 | eng | 2CH | 3252 Segments | ~01h48m30s
- (按 空格键 选择流, 回车键 完成选择)
- 11:22:52.716 INFO : 保存文件名: 1_2024-12-13_11-22-37
- 11:22:52.718 WARN : 你已开启下载完成后混流,自动开启二进制合并
- 11:22:52.722 INFO : 开始下载...Vid 1920x1080 | 4171 Kbps | 5 | 23.976 | avc1.640028
- 11:22:53.874 WARN : Type: cenc
- 11:22:53.878 WARN : PSSH(WV): CAESEHzjh6lZNVQY0KMc05oHt4EaCmludGVydHJ1c3QiASo=
- 11:22:53.880 WARN : KID: 7ce387a959355418d0a31cd39a07b781
- 11:22:53.883 WARN : 读取媒体信息...
- 11:22:55.476 INFO : [0x1]: Video, h264 (avc1), 1920x1080
- Vid 1920x1080 | 4171 Kbps | 23.976 ------------------------------ 512/3253 15.74% 480.16MB/3.18GB 37.38MBps 00:01:31 /
- Aud 128 Kbps | eng | 2CH ------------------------------ 0/100 0.00% - - --:--:--
- 这时候我们就已经正常跑起来了。
复制代码 这里是有两个工具必要下载的,
一个是 N_m3u8DL-RE 执行的时候还会提示少工具,到时候见招拆招即可,- 11:22:52.718 WARN : 你已开启下载完成后混流,自动开启二进制合并
- 11:22:52.722 INFO : 开始下载...Vid 1920x1080 | 4171 Kbps | 5 | 23.976 | avc1.640028
- 11:22:53.874 WARN : Type: cenc
- 11:22:53.878 WARN : PSSH(WV): CAESEHzjh6lZNVQY0KMc05oHt4EaCmludGVydHJ1c3QiASo=
- 11:22:53.880 WARN : KID: 7ce387a959355418d0a31cd39a07b781
- 11:22:53.883 WARN : 读取媒体信息...
- 11:22:55.476 INFO : [0x1]: Video, h264 (avc1), 1920x1080
- 11:24:23.095 INFO : 二进制合并中...
- 11:24:28.873 WARN : Type: cenc
- 11:24:30.142 WARN : PSSH(WV): CAESEHzjh6lZNVQY0KMc05oHt4EaCmludGVydHJ1c3QiASo=
- 11:24:30.144 WARN : KID: 7ce387a959355418d0a31cd39a07b781
- 11:24:30.145 INFO : Decrypting using MP4DECRYPT...
- 11:24:47.029 INFO : 开始下载...Aud 6 | 128 Kbps | mp4a.40.2 | eng | 2CH
- 11:24:47.298 WARN : Type: cenc
- 11:24:47.303 WARN : PSSH(WV): CAESEHzjh6lZNVQY0KMc05oHt4EaCmludGVydHJ1c3QiASo=
- 11:24:47.306 WARN : KID: 7ce387a959355418d0a31cd39a07b781
- 11:24:47.308 WARN : 读取媒体信息...
- 11:24:48.329 INFO : [0x1]: Audio, aac (mp4a)
- Vid 1920x1080 | 4171 Kbps | 23.976 ------------------------------ 3253/3253 100.00% 3.17GB - 00:00:00
- Aud 128 Kbps | eng | 2CH ------------------------------ 1365/3253 41.96% 43.12MB/105.95MB 2.25MBps 00:00:27 \
复制代码 自动下载还好坏常nice的
本文结束,下篇文章分析一下开源库的js代码。看一下他是如何hook的数据包。
8、Widevine DRM解密原理
DRM 存在目标是为了防止带有版权的多媒体内容不被非法访问的访问控制技术,被DRM保护的视频纵然下载页没办法看,由于有加密嘛。
流媒体服务商先将加密视频内容放在自己的内容服务器,将密钥key放置在谷歌提供的Widevine认证服务器。用户播放时,先与Widevine服务器完成认证,得到key之后从内容服务器下载视频,并用key解密播放。
Widevine拥有三个安全级别——L1、L2和L3。L1是最高的安全级别,解密全过程在硬件中完成,必要设备支持。L3的安全级别最低,解密全程在CDM(Content Decryption Module )软件中完成。L2介于两者之间, 核心解密过程在硬件完成,视频处理阶段在软件中完成。本文只讨论L3级视频的解密方式。
播放L3级加密视频必要CDM模块,主流的视频播放设备均已内置CDM。播放器调用DRM进行解密时,有以下过程:
- 用户开始播放视频时,客户端从视频服务器中下载mpd文件。在解析mpd之后,播放器根据相干字段确定该视频是否利用Widevine加密视频。
- 播放器将加密音视频流初始化信息发送给内置的CDM模块解密。
- CDM吸收到来自播放器的初始化信息,并创建“允许证请求”,然后将其发送回给播放器
- 播放器吸收到允许证请求后,将该请求发送给Widevine license服务器。允许证请求为全报文加密,抓包改包的方式无法进行攻击。
- license服务器吸收到播放器发送的请求后解密,提取初始化信息,并通过初始化信息找到其数据库中的播放key。之后将key加密,返回给播放器。
- 播放器吸收到license服务器返回的key,将它通报给CDM。所有往来流量均被加密,播放器和中心人都无法读取相干信息。
- CDM调用相干的解密工具,将加密视频分段解密,实时传送到播放器播放,不在本地存储。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |