Skip to content

DRM Decryption

aliveranme edited this page Aug 18, 2026 · 2 revisions

Widevine DRM 解密指南 (DRM Decryption)

本文档介绍如何在 BBDown 中使用原生 Widevine CDM 解密下载 B 站受 DRM 保护的内容(如付费课程、特定版权番剧等)。


1. 核心特性与优势

传统工具通常需要安装 Python 运行时及第三方库(如 pywidevineprotobuf 等)才能处理 DRM 许可证协议。

BBDown 内置了纯原生 C# 实现的 Widevine Content Decryption Module (CDM)

  • 零外部环境依赖:无需安装 Python、无需配置 pip 虚拟环境。
  • 全自动流程:自动请求 B 站许可证服务器获取内容解密密钥,自动完成流解密,并与普通音视频一样无缝调用 FFmpeg 混流。
  • 支持手动注入:对于特殊场景,也支持手动通过 --key--kid 传入已知密钥。

2. 准备工作:配置 device.wvd

要解密 Widevine DRM 内容,必须提供一个有效的 Widevine 设备凭据文件(即 device.wvd)。

获取方式

  • device.wvd 是从具备 Widevine L3 支持的真实设备或合规环境中提取的 CDM 凭证。
  • 请从可信来源获取或自行提取(常见于各类 Android/Chrome CDM 提取工具)。

放置位置(满足其一即可)

BBDown 在启动时会按以下优先级自动检索 device.wvd

  1. 当前运行目录:直接将 device.wvd 文件放在与 BBDown.exe 相同的目录下。
  2. 环境变量 PATH 目录:放在任意已加入系统 PATH 的目录中。
  3. 系统标准目录
    • Windows: 程序同目录
    • macOS: /opt/homebrew/bin/usr/local/bin
    • Linux: /usr/local/bin
  4. 显式命令行指定:通过 --wvd-path 参数指定路径:
    BBDown --decrypt-drm --wvd-path "/path/to/device.wvd" <URL>

3. 自动解密下载实战

下载 DRM 保护的课程(Cheese)

确保已登录拥有该课程购买权限的账号(执行过 BBDown login),然后追加 --decrypt-drm

BBDown --decrypt-drm "https://www.bilibili.com/cheese/play/ep1243104"

执行流程

  1. BBDown 检测到 DRM 流(drm_tech_type=2)。
  2. 从本地加载 device.wvd 构建 CDM 客户端。
  3. 向 B 站许可证服务器发送 Challenge 请求并获取解密密钥(Key & KID)。
  4. 对下载的加密分片完成原生解密,并混流为标准 .mp4 文件。

4. 手动指定密钥模式

如果你已经通过其他手段获取到了该视频的解密 Key 和 KID(Hex 格式),可以直接手动传入,跳过 CDM 握手:

BBDown --key "0123456789abcdef0123456789abcdef" --kid "fedcba9876543210fedcba9876543210" <URL>

5. 常见问题与排障

  • 报错 Cannot find device.wvd: 未检测到设备凭据文件。请确认文件名确为 device.wvd 并放置在程序所在目录。
  • 获取许可证返回 403 / 失败: 请检查当前登录账号是否已购买该课程/番剧。DRM 解密无法绕过账号的购买鉴权,必须拥有合法的播放权限。
  • 某些 1080P/4K DRM 无法解密: 取决于 device.wvdsecurity_level(通常提取的为 L3 级别)。B 站部分最高画质仅向硬件 L1 设备下发密钥,此时程序会回退到 L3 允许获取的最高画质。

Clone this wiki locally