[JavaScript] 纯文本查看 复制代码http://hls.videocc.net/b034527feb/d/b034527feb4cd0ab7817207e07f247bd_3.m3u8?pid=1648272254443X1400514&device=desktop
原本我是按照下面帖子的方法进行解密32位的下载key的,基本完成了90%了,已经可以算出seed_const了。
https://www.52pojie.cn/thread-1585958-1-1.html
只要使用seed_const的md5前16位作为解密密钥,固定字符串AQIDBQcLDRETFx0HBQMCAQ==作为解密vi,就能解密32位的下载key。
但是到了这一步,发现解密下载key失败,解密密钥错误,我以为是自己的程序写错了,又使用了论坛大牛们开发的密码工具箱来解密,
虽然能解密出16位下载key,但是在下载工具下载时候提示解码失败,key不正确。
quBSr6.png (128.43 KB, 下载次数: 0)
下载附件
2022-3-26 13:33 上传
quBERA.png (24.9 KB, 下载次数: 0)
下载附件
2022-3-26 13:33 上传
我觉可能是加密方式改了,于是发了求助帖子
https://www.52pojie.cn/thread-1607458-1-1.html
https://www.52pojie.cn/thread-1608121-1-1.html
大牛们说的方法太抽象了,我看不太懂,于是自己也在研究。
终于,在贴里的大牛帮助下,给我发现了一种新的下载方式,比较简单和快捷,适合小白
方法如下(也需要简单的js逆向)
1.打开调试工具,找到这个js,并格式化一下。(因为他压缩了)
1.PNG (3.41 KB, 下载次数: 0)
下载附件
2022-3-26 13:41 上传
2.PNG (16.11 KB, 下载次数: 0)
下载附件
2022-3-26 13:42 上传
2.在js代码里面搜索"decryptdata"关键字,来到大约12706行左右(变量什么的可能有所不同,因为他是压缩过的),放入断点
3.PNG (151.46 KB, 下载次数: 0)
下载附件
2022-3-26 13:49 上传
3.基本上每次视频加载都会调用这个位置的代码,找到"_decryptdata"变量
4.PNG (96.82 KB, 下载次数: 0)
下载附件
2022-3-26 13:51 上传
4.发现里面有一大串json数据,包含了M3U8(baseuri)和key(_uri/reluri)信息
[JavaScript] 纯文本查看 复制代码{
"_uri": "http://hls.videocc.net/playsafe/v1102/b034527feb/d/b034527feb4cd0ab7817207e07f247bd_3.key?token=71e98423-69f1-4460-a045-fd9ce9e7f7ed-0126",
"baseuri": "http://hls.videocc.net/b034527feb/d/b034527feb4cd0ab7817207e07f247bd_3.m3u8?pid=1648273704804X1183405&device=desktop",
"reluri": "http://hls.videocc.net/playsafe/v1102/b034527feb/d/b034527feb4cd0ab7817207e07f247bd_3.key?token=71e98423-69f1-4460-a045-fd9ce9e7f7ed-0126",
"method": "AES-128",
"key": {
"0": 242,
"1": 155,
"2": 231,
"3": 3,
"4": 138,
"5": 225,
"6": 46,
"7": 25,
"8": 219,
"9": 1,
"10": 158,
"11": 253,
"12": 61,
"13": 0,
"14": 88,
"15": 211,
"16": 84,
"17": 252,
"18": 214,
"19": 248,
"20": 28,
"21": 47,
"22": 215,
"23": 178,
"24": 226,
"25": 94,
"26": 251,
"27": 73,
"28": 109,
"29": 155,
"30": 232,
"31": 110
},
"iv": {
"0": 115,
"1": 231,
"2": 209,
"3": 35,
"4": 245,
"5": 8,
"6": 70,
"7": 126,
"8": 225,
"9": 253,
"10": 116,
"11": 114,
"12": 11,
"13": 96,
"14": 251,
"15": 158
}
}
我尝试下载key,发现下载下来的key是32位的加密key来的,没用。
5.PNG (15.45 KB, 下载次数: 0)
下载附件
2022-3-26 14:01 上传
4.后来发现将里面的"baseuri" 复制,再在新的浏览器页签打开,会得到一个M3U8文件
[JavaScript] 纯文本查看 复制代码http://hls.videocc.net/b034527feb/d/b034527feb4cd0ab7817207e07f247bd_3.m3u8?pid=1648273704804X1183405&device=desktop
内容如下
[Asm] 纯文本查看 复制代码#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-ALLOW-CACHE:YES
#EXT-X-KEY:METHOD=AES-128,URI="http://hls.videocc.net/b034527feb/d/b034527feb4cd0ab7817207e07f247bd_3.key",IV=0x73e7d123f508467ee1fd74720b60fb9e
#EXT-X-TARGETDURATION:11
#EXTINF:5.043000,
http://uc-dts.videocc.net/b034527feb/0/1234567890123/d/f2/47/bd_3/b034527feb4cd0ab7817207e07f247bd_3_0.ts?pid=1648273704804X1183405&device=desktop
#EXTINF:5.000000,
http://uc-dts.videocc.net/b034527feb/0/1234567890123/d/f2/47/bd_3/b034527feb4cd0ab7817207e07f247bd_3_1.ts?pid=1648273704804X1183405&device=desktop
#EXTINF:10.000000,
http://uc-dts.videocc.net/b034527feb/0/1234567890123/d/f2/47/bd_3/b034527feb4cd0ab7817207e07f247bd_3_2.ts?pid=1648273704804X1183405&device=desktop
#EXTINF:10.000000,
http://uc-dts.videocc.net/b034527feb/0/1234567890123/d/f2/47/bd_3/b034527feb4cd0ab7817207e07f247bd_3_3.ts?pid=1648273704804X1183405&device=desktop
#EXTINF:10.000000,
http://uc-dts.videocc.net/b034527feb/0/1234567890123/d/f2/47/bd_3/b034527feb4cd0ab7817207e07f247bd_3_4.ts?pid=1648273704804X1183405&device=desktop
#EXTINF:10.000000,
......省略.....
发现M3U8文件的URI里面也有一个key下载地址,直接访问他,发现无法下载。
6.PNG (23.65 KB, 下载次数: 0)
下载附件
2022-3-26 14:04 上传
于是我对比了一下两个key下载地址,发现他们之间只差一个token
[Asm] 纯文本查看 复制代码
_decryptdata里面的"_rui"(key下载地址):http://hls.videocc.net/playsafe/v1102/b034527feb/d/b034527feb4cd0ab7817207e07f247bd_3.key?token=71e98423-69f1-4460-a045-fd9ce9e7f7ed-0126
M3U8文件里面的"URI"(key下载地址):http://hls.videocc.net/b034527feb/d/b034527feb4cd0ab7817207e07f247bd_3.key
5.将M3U8文件内"URI"的地址复制到浏览器,再把"_decryptdata"里面的"_uri"的token(比如:token=71e98423-69f1-4460-a045-fd9ce9e7f7ed-0126)带上到后面,得到如下的key下载地址
[JavaScript] 纯文本查看 复制代码http://hls.videocc.net/b034527feb/d/b034527feb4cd0ab7817207e07f247bd_3.key?token=71e98423-69f1-4460-a045-fd9ce9e7f7ed-0126
6.通过浏览器访问这个地址,我们就会下载到一个key(
注意:token会过期,如果下载失败,刷新页面重试一下
),这个key是16位的,是已经解密了的
7.PNG (14.58 KB, 下载次数: 0)
下载附件
2022-3-26 14:14 上传
7.将16位的key和M3U8的地址放到下载器就可以正常下载了
8.PNG (21.02 KB, 下载次数: 0)
下载附件
2022-3-26 14:18 上传
9.PNG (23.71 KB, 下载次数: 0)
下载附件
2022-3-26 14:18 上传
个人猜测: 为什么按照原来帖子的方法解密不了,这个方法好像是2020年时候的了,可能这个加密方法可能改了。可能改成了通过服务器端解密,
js异步下载解密key,不把加密/解密方法细节暴露出来,不过这样子只要暴露了解密的下载地址也就会下载到解密key,所以加上了一个token的限制吧,
token大概一分钟失效,失效以后需要刷新页面重新拿token,重新下载。
这个方法是我自己无意之间发现的,仅供参考。并且个人水平有限,如有错漏请指出。