起因:本人在某日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。
最新评论
5211314
能不能教我 一点不会