1 执行摘要
视频内容保护是流媒体平台的核心商业诉求。现有主流方案(HLS AES-128、CENC/Widevine)在 Android 设备上普遍存在被逆向的风险,国内三大主流平台优酷、爱奇艺、B站的加密方案均已被研究者逆向并公开破解工具。
ZQMF(朱雀媒体格式,ZhuQue Media Format)是朱雀 SDK 自研的私有加密协议,通过私有格式 + 分片加密 + 设备绑定 + 噪音流量 + 请求混淆五层防御体系,从根本上提升了内容保护的门槛。
已被破解
层层递进
破解工具
2 五层防御体系
每一层独立生效,即使某一层被突破,其他层仍然有效。防御对象从"普通用户"到"专业逆向工程师"层层递进。
私有格式
防御目标:脚本小子 + 99% 普通用户ZQMF 使用完全私有化的二进制文件格式:索引文件 .zqm 和分片文件 .zqs,均为加密二进制,与任何现有视频格式标准不兼容。
- • VLC / ffplay / ffmpeg 无法识别
- • 任何标准播放器直接报错
- • 抓包工具看到的是无结构二进制
- • B站 .bbts 内部仍是标准 TS 结构
- • ZQMF 索引和分片全部加密,无标准结构暴露
分片加密
防御目标:知道格式但没密钥的人采用 AES-128-CTR 模式对每个分片进行全量加密,每个分片使用独立的 8 字节随机 Nonce,并附加 HMAC-SHA256 截断认证(基于密文 + 密钥,攻击者无法伪造)。
设备绑定
防御目标:有密钥想分发给多人的人视频密钥(VideoKey)不存储在客户端,每次播放时携带设备指纹向密钥服务器请求。密钥有 TTL 时效,过期自动失效,无法离线转移。
- • 设备指纹由硬件 ID + 软件指纹综合生成,不可伪造
- • 换设备播放需要重新向密钥服务器授权
- • 密钥传输有应用层加密(TransportKey),即使 HTTPS 被劫持也安全
噪音流量
防御目标:批量抓取资源 URL 的同行SDK 在请求真实分片时,同步发送随机生成的虚假请求,真假请求混合,流量监控工具无法区分哪些是真实视频请求,无法批量扫描和缓存视频资源。
请求混淆
防御目标:追踪 CDN 路径的人CDN 分片 URL 路径通过 SHA-256 混淆,每次播放请求的路径不同。即使攻击者知道 CDN 域名,也无法通过路径规律追踪或预测具体视频的存储位置。
3 竞品逆向分析
以下分析基于对优酷、爱奇艺、B站三家平台客户端的逆向研究,所有信息均来自公开的安全研究社区。目的在于理解行业加密弱点,指导 ZQMF 设计规避相同错误。
| 平台 | 加密模式 | 密钥管理 | 加密粒度 | 状态 |
|---|---|---|---|---|
| 优酷 | AES-ECB(最弱) | 整个视频一个 Key,无 IV | PES Payload 级(TS 内部) | 已被逆向 |
| 爱奇艺 | AES-256-CBC + BigNum XOR | TLV License,固定 IV "0000…" | 视频级 | 已被逆向 |
| B站 | AES-128-CTR + CRC16 | License 文件 + PMT 私有数据 | NAL 单元级(选择性) | 已被逆向 |
| ZQMF | AES-128-CTR | 服务器实时下发 + 设备绑定 + TTL | 分片级(全量加密) | — |
✗ 3.1 优酷方案分析(TSParser)
- • 纯 Java MPEG-TS 解析器,按 PID 识别视频/音频流
- • PID 硬编码(0x100 视频 / 0x101 音频),不解析 PAT/PMT
- • 同一 PES 的所有 TS Payload 拼接后做 AES-ECB 解密
- • 解密后原地回写到 TS 数据,TS 封包结构不变
- ! AES-ECB:相同明文块 → 相同密文块,存在模式泄露
- ! PID 硬编码,逆向者只需关注两个固定 PID
- ! 密钥无保护,无设备绑定
- ! TS 同步字节 0x47、TS Header 全部明文
✗ 3.2 爱奇艺方案分析(MonalisaTLV + LicenseKeyDecryptor)
- • License 为 Base64 编码的 TLV 结构,包含 7 个记录
- • 两步解密:AES-256-CBC 解密 Encrypted Key → BigNum XOR 得最终 Key
- • 最终密钥用于 AES-CTR 解密视频内容
- ! 固定 IV
"0000000000000000",降低 CBC 安全性 - ! 固定 XOR 掩码(32 字节硬编码),逆向一次永久有效
- ! License 结构公开,TLV 解析后所有字段一目了然
- ! License 是静态文件,可被转移复制
✗ 3.3 B站方案分析(bbts_decrypt)
- • 自定义 .bbts 格式,但内部仍是标准 TS 结构
- • 解密参数嵌入 TS 文件的 PMT 私有数据中
- • 选择性加密:只加密关键帧,VPS/SPS/PPS 保留明文
- • CRC16-CCITT 校验解密完整性
- ! 解密参数(nonce、skip、interval)随文件分发
- ! 选择性加密保留了编码参数明文,缩小破解范围
- ! CRC16 仅 16 位,碰撞概率 1/65536
- ! License JSON 文件本身无加密,密钥可直接提取
4 ZQMF 针对性规避策略
| 竞品弱点 | 踩坑方 | ZQMF 规避方式 |
|---|---|---|
| AES-ECB(相同明文 = 相同密文) | 优酷 | AES-CTR,每分片独立 Nonce,无模式泄露 |
| 固定 IV "0000000000000000" | 爱奇艺 | 每分片随机生成 8 字节 Nonce,不重复 |
| 固定 XOR 掩码(硬编码) | 爱奇艺 | 密钥派生用 HMAC-SHA256,无固定掩码 |
| 解密参数嵌在文件内部 | B站 | VideoKey 不随文件分发,必须从密钥服务器实时获取 |
| License 是静态文件可转移 | 爱奇艺/B站 | 密钥有 TTL + 设备指纹绑定,不可离线转移 |
| PID 硬编码 | 优酷 | ZQMF 整文件加密,不需要解析 TS 内部 PID 结构 |
| 选择性加密留明文区域 | B站 | 整个分片全量加密,解密前看不到任何 TS/NAL 结构 |
| CRC16 校验太弱 | B站 | HMAC-SHA256 截断(基于密文 + 密钥,攻击者无法伪造) |
| TS 同步字节 0x47 明文暴露 | 优酷/B站 | .zqs 文件无任何标准视频格式特征,工具无法识别 |
| 密钥传输无二次加密 | 三家均无 | VideoKey 传输有应用层加密(TransportKey),HTTPS 被劫持也安全 |
核心结论
- 1. 纯靠加密算法强度不够:爱奇艺用了 AES-256 + BigNum XOR + AES-CTR 三层加密,仍然被逆向。根因是密钥和参数都可以从客户端/文件中提取。
- 2. 密钥管理比加密算法更重要:三家的共同弱点是密钥/参数可以被截获和转移。ZQMF 通过密钥服务器 + 设备绑定 + TTL 过期从根本上解决。
- 3. 私有格式是第一道门槛:.zqm/.zqs 从索引到内容全部私有化,逆向者无法用任何现有工具分析,需要从零开始理解格式。
- 4. 整文件加密优于选择性加密:选择性加密节省计算量但暴露结构信息。在现代设备 AES 硬件加速下,整文件加密的性能损失可忽略不计。
5 攻击面分析
| 攻击手段 | 防御措施 | 防御等级 |
|---|---|---|
| 抓包获取 M3U8 地址 | 无 M3U8,索引文件是加密的二进制格式(.zqm) | ★★★★★ |
| VLC / ffplay 直接播放 | 无法识别 .zqm/.zqs 格式,直接报错 | ★★★★★ |
| 下载 .zqs 文件本地解密 | 无密钥无法解密,密钥绑定设备指纹 | ★★★★★ |
| 中间人劫持 HTTPS | VideoKey 有应用层加密(TransportKey),即使 HTTPS 被劫持也安全 | ★★★★★ |
| 抓包获取分片 URL 批量下载 | URL 被 RequestDisguiser 混淆 + 噪音流量掩护,无法区分 | ★★★★☆ |
| 逆向 APK 提取密钥逻辑 | 密钥不在 APK 中,每次从服务器获取;appSecret 可 SO 加固 | ★★★★☆ |
| Frida Hook 拦截解密后数据 | 需要 Root + 实时 Hook,门槛极高,无法批量操作,仅能针对单个视频 | ★★★☆☆ |
| 录屏 | 非协议层能解决的问题,需配合水印溯源(规划中:动态水印 + 设备 ID 追踪) | ★★☆☆☆ |
6 安全架构概览
7 存量视频迁移方案
迁移流程
- 1. 优先迁移已选择 ZQMF 的高价值客户
- 2. ZQMF Worker 读取存量 HLS .ts 分片,执行加密后处理
- 3. 生成 .zqm 索引 + .zqs 加密分片,写回 S3
- 4. 数据库标记 format = "ZQMF"
- 5. SDK 自动根据 format 字段选择解密路径
迁移规格
迁移期间用户无感知:SDK 的 SourceType 检测会自动识别视频是 HLS 还是 ZQMF 格式,选择对应的播放路径。用户看到的只是正常播放,不会出现因格式迁移导致的播放失败。
8 结论
ZQMF 并非宣称在密码学上不可破解——理论上任何加密都可以被暴力破解。ZQMF 的优势在于将破解成本提升到无法规模化的程度:
- → 优酷/爱奇艺/B站的破解工具之所以流行,是因为一次逆向对所有用户有效。ZQMF 的播放器是客户自己的 App,每个客户不同,逆向者必须对每个 App 单独操作,无法做成通用工具。
- → 即使某个客户的 App 被逆向,影响范围仅限于该客户的视频,不影响其他客户,且密钥 TTL 限制了被盗密钥的有效期。
- → Frida Hook 虽然理论上可以拦截解密后的数据,但需要 Root 设备 + 实时操作,无法批量化,对大规模内容盗版没有商业价值。