Replies: 1 comment
-
为啥不能看hdr和杜比视界啊,合成的qsv用那个解密工具解密后的dovi信息还在吗 |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
新版 QSV 结构
根据前辈公开的已有资料,可以知晓目前新版 qsv 的整体结构:
点击展开
头部
索引
每个索引结构体的大小为0x1C,经过加密,记录视频分段的偏移和大小。
json字符串
加密的json字符串,需要解密(应使用 version1 算法 解密)。
视频分段
一个qsv文件包含多段视频文件,通过索引定位,且每个视频文件的前0x400字节经过加密(应使用 version2 算法 解密)。
明白文件结构后,我们就能从 QSV 文件中读取想要的信息,并提取出加密的 TS 文件。
python 实现:https://github.com/nilaoda/qsv_unpacker/blob/main/qsv_unpacker.py
一个想法
通过对 QSV 文件的解析,我们已经能够提取出有关的 m3u8 文件、json 文件和加密 TS 文件
那如果我们已经有了加密的 TS 文件,能否自行生成符合规范的 QSV 文件,然后实现用官方的播放器直接播放加密文件呢?
理论上是可以的。
实现加密
根据已有的解密算法(这里需要指出,原始的
decrypt_1
函数对于新版本的解密有些问题,@592767809 已经给出正确的版本),不难写出对应的逆向操作,即加密算法。python 版本的加密函数:
生成JSON
JSON 文件用于告知播放器如何播放视频,最关键的是
ticketdata
和ticketsize
这两个字段。注意: 需要调用
encrypt_1
将数据加密后再写入。生成索引
索引主要是
文件名
、文件在QSV中的起始位置
、大小
。文件名和大小可以通过 m3u8 文件来获取:通过正则表达式提取出对应的文件名和大小:
有了每个文件的
文件名
和大小
,再加上已知的偏移数据,就能计算每个文件在 QSV 中的正确起始位置。注意: 需要调用
encrypt_2
将数据加密后再写入。写入 TS 数据
与读取相反,写入结束后,根据索引跳转到文件对应位置,调用
encrypt_2
加密每个分片的前1024
字节即可。完整实现
根据以上步骤,即可自行使用已知的 TS 文件、m3u8 文件和 ticketdata 来生成 QSV 文件。
完整实现:https://github.com/nilaoda/qsv_unpacker/blob/main/qsv_packer.py
验证
Beta Was this translation helpful? Give feedback.
All reactions