今天有位群友想下载某网课的视频,我告诉他用Chrome浏览器的猫抓插件即可。

结果他说试了不行,于是我开始了研究。

首先我测试使用猫抓,可以抓到m3u8以及视频的切片ts文件:

(一些专业名词我就不解释了,想了解的自行搜索资料)

下载了一个ts文件,发现是无法播放的:

用十六进制打开ts文件,发现是乱的,没有ts流文件的格式。

ts标准流文件格式如图:

猜想是ts文件被加密了。

于是打开m3u8文件看看,这里可以看到是用了AES-128加密。

我查了下资料,得知用ffmpeg的命令即可下载,解密和合并。

为了大家操作方便,我找到一个带界面的M3U8下载器,这个下载器原理就是调用的ffmpeg,我们试试看:

提示key下载失败,于是我手动试了试key文件确实是无法访问的。

我们在浏览器F12抓取看看:

https://hls.xxx.net/playsafe/9b52ce99c4/a/9b52ce99c43541a16a9d55f089b3321a_2.key?token=0599667a-60c5-4983-afcd-d5864e1241a6-v2156928

是可以抓到一个key文件的,这个key文件后面带了token参数,经过测试带上这个参数就可以访问了,且这个token是有时效性的。

我们把这个带参数的key的地址替换掉m3u8里原来的,再用M3U8下载器试试:

这次提示的是KEY无效了:

我们看看这个key文件的内容:

长度有32个字节,内容是乱码,猜想是js中对这个key文件做了处理。

我们来看看网页播放器的js中是怎么处理这个key文件的:

搜索.key,可以找到以下代码:

这个代码太复杂就不细看了,我们直接下断点找他解密后的数据即可。

在调试界面选择视频播放的这个窗口的线程,点击F8暂停。

展开t.data.decryptdata即可看到解密后的key了:

这里是十进制的数组[95, 203, 167, 94, 66, 45, 127, 1, 174, 33, 43, 114, 219, 43, 105, 153]

转换为十六进制文件:

再把这个key文件放到本地服务器,然后修改m3u8的URI为本地的key文件的地址:

保存,然后用M3U8下载器即可成功下载:

下载完成:

看看效果:

视频是可以正常播放的,到此就算解密成功了。

最后总结下:

对于这个网站,在想要下载视频播放界面按F12打开开发者工具,切换到Sources选项卡,选择网课视频播放的线程:

再按F8暂停:

Scope中展开t.data.decryptdata,这里的baseuri就是m3u8的地址。

把m3u8下载下来,然后把key保存为十六进制文件,替换掉m3u8里的uri即可使用下载器下载。

M3U8下载器在公众号内回复M3U8获取。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注