获取 Widevine L3 Key ID & Key 解密 Widevine L3 加密视频

众所周知,如今越来越多的流媒体已经开始使用 DRM 进行加密视频/音频流传输以避免视频/音频被录制或盗取使用.

DRM 全称 为 Digital Rights Management ,即 数字版权加密技术. 顾名思义,DRM通过对数字内容进行加密和附加使用规则对数字内容进行保护,可以断定用户是否符合播放,从而来保护文档、电影、音乐不被盗版.
今天我们要着重讲的是 Widevine.
Widevine 是由Google 开发的一款 DRM 加密技术,Widevine 分为以下几个层级:

1. Widevine L1
所有加密或未加密视频/音频流都通过一个集成在支持的CPU里的Trusted Execution Environment (TEE) 进行操作.
这意味着没有任何方法可以截取视频/音频流,因为他是启用硬件加密,除非直接在硬件动手脚,不然基本没方法可以破解.
2. Widevine L2只有加密了的视频/音频流视频/音频流都通过Trusted Execution Environment (TEE) 进行操作.
3. Widevine L3 < 今天的主角所有加密或未加密视频/音频流都通过没有通过 Trusted Execution Environment (TEE) 进行操作,也就是说它是在软件层级进行的操作. Widevine L3 通常都是通过软件上的 Content Decryption Module (CDM) 进行所有加密解密操作,也就是因为他是仅靠软件操作,就有大神研制除了破解 Widevine L3 加密的视频/音频流.

如何破解和获取 Widevine L3 Key ID & Key 解密 Widevine L3 加密视频

早在几个月前,大概是 2020年年末,Github上的 tomer8007 释出了可以破解 Widevine L3 的 Repo :tomer8007/widevine-l3-decryptor: A Chrome extension that demonstrates bypassing Widevine L3 DRM (github.com)
可想而知,谷歌直接对这个 Github repo 发出了 DMCA 下架请求,并且于 2021年6月1日 撤回(revoke) 所有旧版本的 Widevine CDM (因为这个repo 是根据旧版本的 Widevine CDM 编写的,不适用于新的 CDM)
皇天不负有心人,另外一位大神 ,Satsuoni 通过tomer8007 的repo找到一些线索,成功破解了新版本的 Widevine CDM,需要使用 Chrome / Edge v89 , 并且需要在 Edge 禁用 Playready 才可以,这样就能获取 Widevine L3 Key ID + Key.
简单来说,在我们要播放 Widevine 加密的视频/音频流时,我们需要一个被加密后的视频/音频流 和 一个 Widevine 服务器 URL.
如下图所示,浏览器收到 Widevine加密的视频/音频流时,
浏览器的CDM 会请求Widevine 服务器 URL获取密钥解密. 注意,密钥获取后的数据并不是完整的,而是经过二次加密的,需要到CDM里面进行解密密钥后才可以解密视频/音频流.
通过Satsuoni的repo,我们只需要将他载入 Edge / Chrome 作为 Extension使用,然后播放任意 Widevine L3加密的视频/音频流, Console就会显示如下内容:
WidevineDecryptor: Session: 2916F9556FD84******** KID= 6f85bb********** Key: f24a8a521*************
(*是为了避免被DMCA)
接下来,通过yt-dlp 下载加密后的 MPEG-DASH文件,在使用 mp4_decrypt.exe 通过如下指令操作,即可解密该视频/音频流:

./mp4_decrypt -key <keyid>:<key> <encrypted file> <output decrypted media>

经测试,截至截稿前(8月21日)还可于Netflix / Spotify 等等使用 Widevine L3 加密的串流平台使用
如下截图显示解密后的文件,可直接在 VLC 播放
更新(23/11/2021) : 此方法已经失效,Edge / Chrome 已经更新新版本 Widevine CDM , 经测试 , Edge Widevine CDM Version: 4.10.2391.1 使用时会提示 Can't verify license request signature; either the platform is wrong or the key has changed!
请注意,以上行为可能抵触串流平台 TOS ,本人不对以上行为造成的任何后果负责,请知悉!