上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖

onlyfans的OB解密及DRM过校验思路(三)

[复制链接]
  • TA的每日心情
    擦汗
    2024-7-16 09:20
  • 签到天数: 192 天

    [LV.7]常住居民III

    691

    主题

    5563

    回帖

    6462

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    6462

    荣誉开发者管理员油中2周年生态建设者喜迎中秋

    发表于 2024-6-23 06:10:20 | 显示全部楼层 | 阅读模式

     警告

    从这里开始逐渐超脱我的个人知识范畴,可能从任意节点出错!
    不放心可以过阵子再看

     解密

    之前已经确定了是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,重启
    image.png
    image.png
    然后安装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...

    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表