最近遇到了个喜欢的视频想下载下来。抓包第一眼觉得不复杂,快速找到m3u8的key尝试解密,竟然无法解密ts文件。重新分析一遍流程,为这视频好一通折腾,记录一下方法。
抓包获取的m3u8文件一看是加密了
分析一下JS解密的流程:
-
首先生成一个随机字符串:
-
利用上面生成的随机字符串加密后赋值给u.rand,这里会涉及到jvsm混淆,白话讲下就利用RSA的公钥进行加密。
-
接下来是生成请求视频地址的Signature值,生成函数:makeChangeSiga(i, e.accessSecret)。生成链接:https://vod.cn-shanghai.aliyuncs.com/?AccessKeyId=*** 进行GET提交,返回一个JSON信息。
-
返回JSON信息中带着Rand、Plaintext、PlayURL为M3U8的链接地址 。利用之前生成的随机字符串、rand和plaintext值进行计算,得到m3u8的key值,这里有jvsm逻辑过于复杂,直接提取JS代码调用这个函数更方便 一些。
-
得到M3U8的key直接尝试进下载并解密。竟然没成功。继续往下看,发现代码这里并没有对整个ts进行加密,而只加密了TS文件的PES部分,这里卡住好一通折腾。最终把代码扣出来改动一下,可以调用此JS进行ts解密。
-
这是ts包的解密分析部分
-
最后利用上面的逻辑写一个批量的下载工具,就可以愉快的下载啦~~~