欢迎光临
我们一直在努力

记一次流媒体MPEG-DASH DRM解密过程(Widevine)

起因:本人在某日x爱x动作站买了很多片,想下载到本地收藏,但下载过程非常不顺利,视频全部都是受DRM保护的,说白了就是视频全部都是加密过的,下载到本地打开没有画面也没有声音。然后想着这不是个办法啊,花钱了还不能爽,遂决定一探究竟。

这篇文章记录下DRM解密过程,步骤非常繁琐,我尽量写的详细一点,仅作为个人备忘。DRM是什么这里就不解释了,有兴趣可以看看这几篇文章:

https://www.0xaa55.com/thread-27476-1-1.html
https://home.gamer.com.tw/artwork.php?sn=5895408
https://home.gamer.com.tw/artwork.php?sn=5949849

现在市面上DRM技术一般就3个:Google的Widevine,Microsoft的PlayReady,Apple的FairPlay,这篇文章是针对Widevine(本文标题已经特地注明过了)。

首先我得要知道目标站用的是哪家的技术,这个还比较容易,播放一个目标站的视频,F12看一下,发现有这个请求,OJBK,确定是Widevine了:

然后在浏览器安装一个名叫“猫抓”的扩展,看一下果然有DRM保护:

这个时候就要借助强大的Google了,通过Google搜索,我找到了几个在Github上开源的项目:

https://github.com/hyugogirubato/KeyDive
https://github.com/FoxRefire/wvg

当我第一次发现这两个工具的时候,内心的喜悦溢于言表,有了这两个工具,就能破解Widevine,就能拿到解密视频需要的key了。

大概的步骤:用KeyDive导出CDM,然后再把导出的CDM放到WVGuesserExtension里面,打开目标站点播放视频,WVGuesserExtension就能获取到key了。

为了能够使用这两个工具,现在需要做很多准备工作:

1:准备一台root过的Android手机,安装好Magisk。这里我使用的是一台oppo a8。(买了就没用过几次,翻箱倒柜找半天终于找到了lmao)

要root首先得解bl锁,这里我使用的是unlocktool这个工具,这个工具是收费的,而且还卖的很贵,但是万能的某宝有试用账号卖,我花8块钱买了个。。。

unlocktool使用方法这里就不介绍了,可以看这个b站视频跟着一步步来,驱动那些其实不需要事先下载,在unlocktool里面右上角点config,里面都可以下载到。另外unlocktool连接手机需要手机同时按住音量+-键以及关机键,而不是视频里面说的音量+-键。

Magisk要安装latest版本,不要安装pre版本,切记!后续需要用到的magisk-frida模块不支持pre版本。这是我踩过的坑。

2:电脑安装Android SDK,打开Android Studio,点SDK管理:

按下图勾选安装需要用到的工具:

配置环境变量,方便使用adb:

3:电脑安装Python3,这里也是要注意环境变量的配置,我之前电脑已经装过旧版本的python了,然后又直接装了个新的,环境变量不会生效还是用的旧的。最后的解决办法是全部都卸载了,然后重新装最新版,然后再手动看看环境变量的配置是不是正常的。

4:电脑使用pip安装KeyDive:

pip install keydive

5:下载这两个Magisk模块到手机安装:

magisk-frida
liboemcryptodisabler

安装完成后需要重启手机,如果一切正常则如下图所示:

6:在手机上安装一个代理APP并架好梯子,用于访问目标站,播放目标站视频,这里我使用的是karing。这个工具目前最新版可能是有点问题,启用VPN的时候一直提示timeout,下载旧版本即可,我使用的版本是1.0.27.333。

7:开着梯子,下载目标站的视频播放器APP,登录账号并播放一个视频。

一切准备工作已经全部做好。接下来回到电脑,执行如下命令:

adb devices

如果回显有你的设备那就OK,可以继续下一步了,如果没有,则参考这篇文章打开手机的USB调试模式。如果还是找不到设备,一定要把“选择USB配置”设置成RNDIS(USB以太网):

有类似如下回显就正常了:

现在执行如下命令:

keydive -w

如有这样的回显则说明正常:

此时回到手机把视频重新播放一次,稍等片刻,我们需要的cdm应该就导出成功了:

导出的路径在:

C:UsersLALAdevice

如图所示:

把oppo_pdbm00_14.0.0_fa256960_4445_l3.wvd重命名为device.wvd。然后把device.wvd丢到WVGuesserExtension的根目录下:

打开浏览器扩展页面:

chrome://extensions/

加载已解压的扩展程序,安装WVGuesserExtension扩展:

打开目标网站,播放视频,在播放页面点击WVGuesserExtension扩展,点击Guess获取key,如果正常的话会有如下回显:

是2个16进制的数据,格式是kid:key。也就是冒号后面的就是我们要的key。

万事俱备只欠东风,拿到key后,我们就可以尝试下载视频了。

这个时候又需要用到一个工具:N_m3u8DL-RE

这个工具在Windows系统下使用有一些问题,比如无法调用mp4decrypt解密等,后来我又特地用一台Linux去试,发现在Linux下是全部正常的,所以个人建议下载视频的时候直接在Linux上用这个工具下载可以省很多事情。视频下载到本地是分片的,这个工具可以自动合并分片,而且音频和视频文件也是分开的,这个工具可以自动混流。

我先说一下在Debian上如何使用这个工具,首先它依赖ffmpeg、Bento4的工具包,那我们就先要安装这些软件:

apt -y update
apt -y install ffmpeg

Bento4:

apt -y install wget unzip
cd /usr/local/bin/
wget https://www.bok.net/Bento4/binaries/Bento4-SDK-1-6-0-641.x86_64-unknown-linux.zip
unzip Bento4-SDK-1-6-0-641.x86_64-unknown-linux.zip
rm Bento4-SDK-1-6-0-641.x86_64-unknown-linux.zip
cd Bento4-SDK-1-6-0-641.x86_64-unknown-linux/
cd bin/
mv * ../../

安装N_m3u8DL-RE,有Github账号的可以登录然后去下载actions里面的最新版:

没有的话就下载旧版本,还是建议去下actions里面的版本:

cd /opt && mkdir N_m3u8DL-RE && cd N_m3u8DL-RE
wget https://github.com/nilaoda/N_m3u8DL-RE/releases/download/v0.2.0-beta/N_m3u8DL-RE_Beta_linux-x64_20230628.tar.gz
tar -xzvf N_m3u8DL-RE_Beta_linux-x64_20230628.tar.gz

回到浏览器打开猫抓,复制嗅探到的mpd地址,这个就相当于是视频下载地址:

使用N_m3u8DL-RE下载:

./N_m3u8DL-RE 
--key kid:key 
-mt 
-M mp4 
'https://dash-streaming.mgstage.com/streaming/doc/hmrk/016/hmrk-016_20240705T123002.mpd?......'

选择要下载的音视频质量:

下载完成后会自动调用mp4decrypt解密,然后自动调用ffmpeg混流,最终得到一个mp4格式的视频文件。由于我在一台VPS上下载的,下载完成后我还需要拉回本地,然后用播放器测试,终于成功了:

如果是在Windows上使用,N_m3u8DL-RE可能无法自动解密,需要我们手动去解:

.mp4decrypt --key kid:key xxx.mp4 xxx-decrypt.mp4

然后用ffmpeg把音视频合并:

.ffmpeg.exe -i xxx-decrypt.m4a -i xxx-decrypt.mp4 -vcodec copy -acodec copy xxx-final.mp4

最后我还了解到,Widevine是分级别的,分别有L1、L2、L3,本文所使用的方法应该只适用L3。

赞(0)
未经允许不得转载:拆东墙 » 记一次流媒体MPEG-DASH DRM解密过程(Widevine)

评论 抢沙发

登录

找回密码

注册