视频是某课堂加密了的,直接抓包得到m3u8文件下载是下载不了的,直接下载m3u8内的ts文件也是播放不了的。通过下载的m3u8文件分析得知,流媒体的ts文件使用AES-128加密方式加密了,AES-128的密钥长度为16字节。Key就是里面的URI链接,IV就是初始化偏移量地址。这里可以拿到IV的值。
image.png
直接使用Key的URI访问,是访问不了的,这里加了token验证,只能抓包拿到有效链接,之后拿到Key的Url访问实际上是加密了的,是一串乱码。
image.png
随后在linux系统把该链接下载下来,使用 vi -b /路径/key文件 以二进制的形式打开该文件,然后输入“ :%!xxd”再把二进制文件切换到16进制,那么就可以拿到Key了,实际也不需要这么麻烦,可以直接用谷歌下载下来就是16进制文本。
image.png
那么问题来了,Key应该是16位,而这里是32位,如果直接拿这些key值去解析ts文件是会报key长度超长的。所以,没得办法只能去解析Js文件,最后分析拿到16位的Key值数组,随后把数组里面的值转为16进制即是解密的Key。
使用Apache安装文件目录下的bin文件夹内的openssl执行:
openssl aes-128-cbc -d -in C:\Users\Admin\Desktop\demo\f8f97d.ts -out C:\Users\Admin\Desktop\demo2\media_decryptd_0.ts -nosalt -iv 425541cee5d436f4e023533acfa0a621 -K 74cea8bca5915a64c7c597592974b566
就可以获取到解密的ts文件了,那么要怎么样才能直接下载m3u8文件并转换为mp4呢。这里可以观察m3u8文件,这里面key的Url直接是访问不了的,所以需要把它替换了,这个时候就需要自己搭建一个本地服务器,构建一个key的Url,然后把key的Url替换了,再然后也构造一个Url来获取m3u8文件,这个时候m3u8文件实际上是可以下载播放了。
另外也可以把所有的ts文件保存下来,再把里面的ts链接替换成本地服务器可访问的Url,然后通过ffmpeg来转换成mp4文件:
ffmpeg -i http://127.0.0.1:8089/local/baf2_3.m3u8 -y -c:v libx264 -strict -2 C:\Users\Admin\Desktop\demo\demo.mp4
网友评论