警告
从这里开始逐渐超脱我的个人知识范畴,可能从任意节点出错!
不放心可以过阵子再看
解密
之前已经确定了是wvd l3
我们需要获取解密mp4的密钥
需要ppsh和License URL
找到的wvd代码来自https://forum.videohelp.com/threads/414040-Need-some-help-to-download-drm-protected-video-from-this-free-service
这里我截取片段
WVD_FILE = "device_wvd_file.wvd"
PLAYER_URL = 'https://aloula.faulio.com/api/v1/video/{video_id}/player'
ORIGIN = "https://www.aloula.sa"
def get_keys(pssh_value, license_url):
if pssh_value is None:
return []
try:
device = Device.load(WVD_FILE)
except:
return []
pssh_value = PSSH(pssh_value)
cdm = Cdm.from_device(device)
cdm_session_id = cdm.open()
challenge = cdm.get_license_challenge(cdm_session_id, pssh_value)
licence = requests.post(
license_url, data=challenge,
headers={"Origin": ORIGIN}
)
licence.raise_for_status()
cdm.parse_license(cdm_session_id, licence.content)
keys = []
for key in cdm.get_keys(cdm_session_id):
if "CONTENT" in key.type:
keys += [f"{key.kid.hex}:{key.key.hex()}"]
cdm.close(cdm_session_id)
return keys
ppsh和licence属于网站提取的内容,那wvd是什么?
Create a Widevine Device (.wvd) file from an RSA Private Key (PEM or DER) and Client ID Blob.
wvd是Widevine Device ,是根据一个RSA私钥和Client IDBlob生成的
其提取的方法我在
https://forum.videohelp.com/threads/404994-Decryption-and-the-Temple-of-Doom
找到了,当然也可以使用现有的,但是本着苏格拉底式学习的思想,决定尝试手动提取WVD
另外也找到了一个疑似可以在线处理的网站
https://cdrm-project.com/
同时这个网站也提供了大量的WVD DRM分析的文章和工具
https://cdm-project.com/
提取WVD
注意!!!根据测试模拟器没有WVD,不要尝试在模拟器搞
首先需要root和安装magisk
然后在magisk的设置的超级用户访问选择用户和ADB,重启
然后安装MagiskFrida
https://github.com/ViRb3/magisk-frida/releases
下载出来在magisk导入模块
最好也装上L1回退模块
https://github.com/hzy132/liboemcryptodisabler/releases/tag/v1.5.1
全部搞定之后安装adb,为了图方便可以直接把adb的目录塞到path里
这样就有adb命令了
输入adb查看有没有手机
确定有之后拉取https://github.com/hyugogirubato/KeyDive的代码
输入pip install -r requirements.txt
安装依赖
因为adb devices找到了
List of devices attached
emulator-5554 device
输入python keydive.py -a -d ‘emulator-5554’ -w
即可导出
就是这样,你现在应该有一个以 ClientId 和 Private_key.pem 形式存在的 CDM,它们藏在 Keydive 文件夹根目录中的设备中(因为我本机没root,模拟器又复现失败了...所以这步要靠自己了,不过应该大差不差,因为我AVD提取成功了~)
待续
loading...