研究目的:(课题目的:为了拿m3u8的视频,但除了iv值之外还要解决万恶的QINIU-PROTECTION-10加密的key值)
参考资料:
(一)为了爬取视频网站,参考文章(
[C#/Java] 针对 QINIU-PROTECTION-10 的m3u8视频文件解密 - 码荣 - 博客园)
(个人感触:关于QINIU-PROTECTION-10的解决方案,读完下载代码后感受就是,虽说大体上的思路是有了的,但是具体的一些代码需要标注下,然后要根据不同平台自自行修改。建议读者先读完大神的文章再看如下)
(二)还有第二位大神(简称大神二)的一个手工操作的过程,这个自行去b站搜加密方式找(大致流程如下):
一、问题再现:陈列一个问题关于DRMKey,这个f12很好拿得到
拿到的m3u8的文件也和大神的差不多,这里不展示了,大家记得将ts的相对地址改回绝对地址就行了。
二、(重要!!)实践感觉到的出入:他说这个key值是这样加密的,但跟我的实践后的理解有区别,有出入
截图他说:“每一位数字转换成16进制字符串,然后把16进制字符串转为ASCII码”。(也就是10进制转16进制,然后转ASCII码)。但是转后的key值估计只是对他的网站是对的,但跟我平常操作以及自己的网站不太对。。。
(一)说一遍平常操作:
具体来说就是从10进制转16进制是对的,得到十六进制的KEY值也一样,但是后面我用如下这个工具,得到最终(蓝色部分)KEY值是这样的:OWU0ZTRlZjY0YTdhMmU4Mg==
然后拿到的key值,放到下载器那里,填上url其他信息就行了,iv值他也会自动获取,这个工具还挺强!如下:
三、(修改一)加密方法修改:
用大神缩写的java的工具是这样的(这边单独调用工具类试了下)备注:这里是启动类里面改的,只是为了测试
得到的值:bc3f46522d5d8190 ,所以就跟我们实际操作的不太一样。而且根据手工操作来说,放到下载器,命令窗口报错误说这个key是无效的!
那么这个十六进制的:“39653465346566363461376132653832”,到“OWU0ZTRlZjY0YTdhMmU4Mg==”字符串,背后到底是怎么转的呢?所以,就问了gpt,后来才知道是十六进制之后转base64才对!而且base64也算是ASCII码
其实是我的对base64的理解有点问题吧,真他喵的怪我理解不够。。。
python代码过程如下:
import base64
def hex_to_base64(hex_string):
# 将十六进制字符串转换为字节
byte_data = bytes.fromhex(hex_string)
# 将字节编码为Base64字符串
base64_string = base64.b64encode(byte_data).decode('utf-8')
return base64_string
# 示例输入
hex_string = "39653465346566363461376132653832"
base64_string = hex_to_base64(hex_string)
print(f"Hex string: {hex_string}")
print(f"Base64 string: {base64_string}")
得到结果是这样才对:
实际上base64也估计是对应的ASCII编码吧。。。
然后他java有个接口是、getAESKey这里各位大神们可以自行修改一下
截图大神的代码:
所以我有点怀疑是不是他转ASCII码不太对,这一步,但具体逻辑我也不太懂他的,因为没仔细读(尴尬。。。)所以第二张图的convertHexToString还是各位看官自己重写一个转base64吧。
哦对了:最后如果用下载器的话,key值哪怕给十六进制也是可以的,下载器会将其自动转为base64。但是编程环境就不会转的,代码层面要自己改下,还有以后有空会出个python版本加个多线程吧
四、代码部分修改二:关于ts正则匹配的修改:
还是截图下我的m3u8吧,看看ts地址长啥样。然后修改,各个网站的ts地址和大神的是不一样的,这里要灵活改改,因为大神的是这样的(图一):
而我的是这样的如下(图二):
(图三)这里是自己修改后的:
这里正则匹配主要是用来取文件名用的,因为这里用foreach,所以要用索引的话可以这样,举个栗子:(图四&图五:)当然有能力的改回普通for循环吧,都行,相信各位大神都是妥妥的高手,这里不需要教了,在下只是提点建设性的小意见,各位看官图个乐就行
最后,如果各位有自己独到的见解,欢迎各位留言!!!
总结就是:大神说的密钥DRMKey从十进制转十六进制也是对的,但是从十六进制转ASCii码就有问题。
个人感想:真他喵的傻x废w,居然花了3个晚上debug还没看出来。。。浪费时间。。。恶心,呵tui~~