欢迎光临散文网 会员登陆 & 注册

获取PSSH的一些思路

2022-07-06 00:21 作者:hungry小浩纸  | 我要投稿

前言:

最近把之前放弃的几个站又拿起来了,从头折腾了下PSSH这玩意,大概分享下心路历程。虽然这玩意是解密流程中绕不开的,不过只能算是非重点部分,本来不懂的,看了这个大概就更不懂了。本来懂的话大概可以拓展下思路啥的,当然我也是才折腾这些东西的,难免有错误。

此文章中的PSSH均为widevine PSSH,其它的我完全不会。

  1. 直接从mpd中获取

    几乎90%以上的PSSH都可以在mpd的响应里看到,可以说非常简单粗暴了。

    当然这样说明这玩意没那么重要,直接给你,你也不能咋地。。。

  2. 使用EME Logger脚本读取

    对于mpd中不直接提供PSSH的情况,首先安装油猴脚本EME Logger(https://greasyfork.org/zh-CN/scripts/373903-eme-logger),在打开对应的视频时,控制台可以看到Init Data,此处的这一串就是PSSH。一般长度适合的话就是正确的了,比如hami。但有时会遇到特别长的,无法继续下一步了,此时先pass,后面再讲。

  3. KID转PSSH

    这一段就有点长了,就慢慢来吧。

    先学习下PSSH的组成吧。

    先从kktv和unext分别找一个官方的PSSH,然后base64转hex,

KKTV_PSSH:

HEX:

UNEXT_PSSH:

HEX:

这样可能看不出有啥东西来。

将PSSH输入https://tools.axinom.com/decoders/PsshBox这个网站可以自动分割组成就比较直观了,可以发现以下几个部分:

Size:000000xx,此段代表整个完整PSSH的字节数

Type:70737368,就是指文本的pssh

Flags:00000000,固定立在这里的旗帜[doge],有用也没用

System ID:edef8ba979d64acea3c827dcd51d21ed,这一串就是指的Widevine,可作为识别部

Data Size:000000xx,此段代表xx之后到PSSH结束的字节数

Key IDs:重要部分,也就是KID

Provider与Content ID可以看出不同来源是不一样的,比如KKTV的Provider与Content ID都是KKTV(Text (UTF-8)),UNEXT的Provider是unext,Content ID是对应的视频id。

根据页面的提示的content ID可以不与KID同时存在,Provider字段也已经弃用。

此时就大胆尝试舍去Provider与Content ID去请求,发现请求成功并结果与之前一致。

因为KID为固定的16字节长度,那么就可以直接用KID去转换成PSSH了。

根据以上的规律可以得到:

000000347073736800000000EDEF8BA979D64ACEA3C827DCD51D21ED0000001408011210+KID

按这个格式转成PSSH即可。

当然由于各方面都不验证的原因,里面很多的不重要的地方可以瞎写了,依旧可以请求出来。

所以在mpd提供kid的情况下,可以直接转换。mpd不直接提供的话可以下载文件后读取文件的KID进行转换。一般使用mp4info或mp4dump之类的工具,不过有点坑的是路径及名称不能有中文,不然用不了。

或者用这种软件直接可以读PSSH了

mp4info

4.剥离长PSSH

回到上面那个没解决的问题,处理Init Data返回内容超长的问题。

以videx为例,先获取获取Init Data内容:

输入上面那个PSSH box的网站,可以发现这一长串混杂了playready和widevine的内容。其中playready的内容被识别成文本,包含widevine的PSSH部分为归为Unknown Data。

根据上面的规律可知,08011210后面去16字节的kid即可组成PSSH,再把这段Unknown Data丢上去再来一遍,网站自动分析出KID,然后看结尾截止到哪里了,转成base64就完成了。

获取PSSH的一些思路的评论 (共 条)

分享到微博请遵守国家法律