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

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

[复制链接]
  • TA的每日心情
    慵懒
    2024-10-28 07:07
  • 签到天数: 193 天

    [LV.7]常住居民III

    712

    主题

    5959

    回帖

    6758

    积分

    管理员

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

    积分
    6758

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

    发表于 2024-6-21 07:26:51 | 显示全部楼层 | 阅读模式

    之前我们已经确定了基本的请求问题
    ffmpeg不支持H2协议
    根据查看同类库https://github.com/sim0n00ps/OF-DRM (这个库真的帮助了我很多思路)
    可以发现使用了一个yt-dlp
    我们可以找一个nodejs版本的
    测试代码如下

    const path = require('path');
    
    const YTDlpWrap = require('yt-dlp-wrap').default;
    
    const ytDlpWrap = new YTDlpWrap(path.join('./yt-dlp_x86.exe'));
    let ytDlpEventEmitter = ytDlpWrap
        .exec([
            'https://cdn3.onlyfans.com/hls/files/a/a2/xxx/xxx.m3u8',
            "-f",
            "bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best[ext=m4a]",
            "--allow-u",
            "--no-part",
            "--restrict-filenames",
            "-N 4",
            '--add-headers',
            `Cookie:"个人隐私"`,
            '-o',
            'F:/vmware/output2.mp4',
        ])
        .on('progress', (progress) =>
            console.log(
                progress.percent,
                progress.totalSize,
                progress.currentSpeed,
                progress.eta
            )
        )
        .on('ytDlpEvent', (eventType, eventData) =>
            console.log(eventType, eventData)
        )
        .on('error', (error) => console.error(error))
        .on('close', () => console.log('all done'));
    
    console.log(ytDlpEventEmitter.ytDlpProcess.pid);

    我也是刚接触,不一定参数描述的正确,-f表示格式,allow-u表示允许无法格式化的视频下载,no-part不要使用分割部分文件,restrict-filenames貌似是控制短标题和特殊字符的,-N应该是多线程
    只有使用这套能绕过DRM的版权下载问题

    下载完成后发现依然没法播放
    根据研究是视频使用了加密
    这个时候可以根据技术栈下手
    根据搜索drm找到了"DRM encrypted source cannot be decrypted without a DRM plugin
    根据上下文找到videojs字样
    图片.png
    所以怀疑是videojs
    于是找videojs的DRM库,找到了
    https://github.com/videojs/videojs-contrib-eme?tab=readme-ov-file#using
    使用例子是

    player.eme();
    player.src({
      src: '<your url here>',
      type: 'application/dash+xml',
      keySystems: {
        'com.widevine.alpha': '<YOUR URL HERE>'
      }
    });

    在网页中搜索eme,发现也能找到,下一个断点之后调试打印src的o内容
    图片.png
    根据文档getLicense()- 允许异步检索许可证。
    所以我们目前应该主攻getLicense()函数了
    其中代码为

                        getLicense: (e,s,o)=>{
                            j.vM.xhr({
                                url: i,
                                method: "POST",
                                responseType: "arraybuffer",
                                body: new Uint8Array(s),
                                headers: {
                                    "Content-type": "application/octet-stream",
                                    ...t
                                },
                                withCredentials: !0
                            }, ((e,i,t)=>{
                                e ? o(e) : o(null, t)
                            }
                            ))
                        }

    往上一层看
    这里可以看到创建了一个promise,当调用获取许可时会回调y,而y会把数据触发调用promise的Resolve出去,导致普通人很容易跟丢
    图片.png
    实际上接下来的流程处理在
    图片.png
    其中u是MediaKeySession,读取了我们的密钥,而MediaKeySession的接口代表与内容解密模块 (CDM) 进行消息交换的上下文。

    以CDM为关键词,可以搜到https://www.freebuf.com/articles/database/375523.html

    全球现有三大实现方案,分别为谷歌的Widevine、苹果的FairPlay和微软的PlayReady。其中Widevine实现简单,免费,市场占有率最高,应用最广泛。Widevine客户端主要内置于手机、电视、各大浏览器、播放器等,用于解密被保护的视频。
    
    Widevine拥有三个安全级别——L1、L2和L3。L1是最高的安全级别,解密全过程在硬件中完成,需要设备支持。L3的安全级别最低,解密全程在CDM(Content Decryption Module )软件中完成。L2介于两者之间, 核心解密过程在硬件完成,视频处理阶段在软件中完成。本文只讨论L3级视频的解密方式。

    既然我们是谷歌浏览器,那我们大概率是Widevine的DRM保护了
    那接下来的目标就是如何解密CDM

    待续

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

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
  • TA的每日心情
    开心
    2024-2-28 14:15
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    37

    主题

    233

    回帖

    363

    积分

    版主

    积分
    363

    油中2周年生态建设者

    发表于 2024-6-21 10:02:00 | 显示全部楼层
    牛蛙,ggnb
    一叶叶,一声声,空阶滴到明。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    10 小时前
  • 签到天数: 363 天

    [LV.8]以坛为家I

    7

    主题

    30

    回帖

    246

    积分

    高级工程师

    积分
    246

    挑战者 lv2

    发表于 2024-6-22 20:32:19 | 显示全部楼层
    继续继续,gg加油
    回复

    使用道具 举报

    发表回复

    本版积分规则

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