M3U8加密key计算

查看 192|回复 11
作者:Augustus-myth   
看了这个兄弟的帖子:https://www.52pojie.cn/thread-1637348-1-1.html
觉得挺有意思的,但是操作比较麻烦,所以现学了python操作了下。
使用方法:
1.下载视频的“.key”、“M3U8”、“.json”文件;
浏览器打开视频-> F12 ->network-》filter
分别过滤“.key”、“M3U8”、“.json”关键字,选中request URL——》右键——》复制,下载或者直接点转到,会跳转下载。
注意:下载M3U8时要注意,有些视频因为可以选择清晰度,所以会有多个M3U8文件,自己注意判断


插图3.png (38.84 KB, 下载次数: 0)
下载附件
2022-5-24 17:43 上传

2.将脚本放在“.key”、“M3U8”、“.json”同一文件夹下;


插图.png (12.45 KB, 下载次数: 0)
下载附件
2022-5-24 17:29 上传

3.运行脚本得到key
标记1和标记2的计算结果是一样的,只是用空格隔开了而已。


插图2.png (33.45 KB, 下载次数: 0)
下载附件
2022-5-24 17:35 上传



网络key解析.zip
(1.47 KB, 下载次数: 487)
2022-5-24 17:35 上传
点击文件名下载附件
python脚本
下载积分: 吾爱币 -1 CB

扩展思考:其实第3步生成的key就是下载的“.key”文件的解密版本;加密的“.key”文件用HEX查看器看可以看到是32位的;用我们计算到的key用HEX编辑器编辑好就是解密后的“.key”文件了。
而一些视频是可以离线缓存的,查看缓存文件,可以发现除了切片后的TS文件也有“.key”、“M3U8”、“.json”文件;
所以说,我们如果懒得一个一个的从网站抓,可以用缓存文件直接解密、合并TS文件生成目标视频;
但是经过验证,没成功;发现的问题如下:
1)缓存文件的“.key”文件和网页抓的“.key”文件是不同的;
2)json文件名不一样,发现只是命名规则做了修改,如把末尾的“_0”改成了“_2”,调整了脚本,发现json文件解析出来的json结构体内容是相同的,最重要的是seed值是一样的;——》由1、2两条可知计算到的key值是不一样的;
3)但是!!用网页抓的“.key”文件计算到的key值可以把缓存的ts文件解密合并生成目标视频;
我猜测是缓存文件的“.key”文件所用的AES加密的iv值和网页视频用的不一样。
如果有那位能好心人能给我解惑或者将iv值告诉我将不胜感激。

文件, 缓存

明月清疯   

PS C:\tmp> python 网络key解析.py
这是一个key文件:41b5b893bc68ead3f077a0c275407f5a_1.key
这是一个json文件:41b5b893bc68ead3f077a0c275407f5a_4.json
小写的32位
be995a109399bbc68a4bb5fa5523f0b3
jiaMiKey: be995a109399bbc6
jiaMiIv: 8a4bb5fa5523f0b3
9
小写的32位
45c48cce2e2d7fbdea1afc51c7c6ad26
jiaMiKey2:  45c48cce2e2d7fbd
[70, 53, 88, 102, 57, 101, 55, 47, 56, 53, 104, 108, 84, 68, 119, 72, 106, 82, 87, 118, 72, 90, 84, 51, 105, 106, 65, 113, 57, 111, 121, 84, 105, 69, 50, 68, 88, 97, 73, 52, 67, 105, 99, 61]
Traceback (most recent call last):
  File "C:\tmp\网络key解析.py", line 81, in
    den_text = aes.decrypt(text)
  File "C:\Program Files\Python310\lib\site-packages\Crypto\Cipher\_mode_cbc.py", line 246, in decrypt
    raise ValueError("Data must be padded to %d byte boundary in CBC mode" % self.block_size)
ValueError: Data must be padded to 16 byte boundary in CBC mode
P
fzcm   

C:\Users\Administrator>python d:\key.py
小写的32位
d41d8cd98f00b205e9800998ecf8427d
jiaMiKey: d41d8cd98f00b205
jiaMiIv: e9800998ecf8427d
Traceback (most recent call last):
  File "d:\key.py", line 43, in
    f = open(jsonFileName,'r',encoding='utf-8')
FileNotFoundError: [Errno 2] No such file or directory: ''
又提示这是什么意思,目录下有json文件的
json文件内容是:{"code": 200, "status": "success", "body": "687b74b0e9be1fd61e4399ea85afeb7f5329d422b262................................
zhoushengzhi   

学习一下,先收藏了再说。
dongjing520   

不错,学习了
gcode   

谢谢楼主分享,刚好有时间研究下
anyucompany   

昨天刚看完,今天就有简化版,不错!!
806785900   

多谢您的分享
lighterleon   

非常感谢楼主分享,学习了
yks1985   

感谢分享学习了
您需要登录后才可以回帖 登录 | 立即注册

返回顶部