今天在浏览网页的时候发现一个网站提供m3u8内容的加密,其主要宣传如下图。
看起来非常的厉害,主要是能够防嗅探防下载防合成。下面给出了样品视频,点进去初步尝试逆向一下
打开浏览器F12,刷新页面开始抓包。发现其中的m3u8内容确实是被加密了,如下图
看到内容有点像base64编码,但又有base64编码不存在的字符。但是最后两个字符是【==】,这个是base64编码的填充,那么说明很有可能就是base64编码
那么其中不存在的字符就是替换掉了,那么浏览器播放的时候一定要将正确的内容替换回来,再进行base64解码,得到m3u8文本。那么此时可以从js的replace方法入手
在全局中搜索replace,发现有4个js文件有,那么就将这4个js文件下载到本地
下载完成后打开全部4个js文件,然后搜索【replace(/\(/】,为什么搜索这个呢?观看加密的m3u8内容里面,有很多特殊的符号,其中就包含【(】,而在js中replace方法传入的是正则表达式,其中【(】是一个特殊字符,在正表达式中有特殊含义,如需要匹配自身,则需要在前面增加转义字符【\(】
只有一个内容,那么就可以关闭其他三个js,然后格式化这个搜索到的js文件,找到搜索到的内容,可以看到以下js代码
[JavaScript] 纯文本查看 复制代码 s.h2dehlsdata = function(data) {
var data = data.replace(/\//g, "B");
data = data.replace(/_/g, "A");
data = data.replace(/-/g, "h");
data = data.replace(/\*/g, "I");
data = data.replace(/!/g, "N");
data = data.replace(/@/g, "O");
data = data.replace(/\(/g, "s");
data = data.replace(/\)/g, "X");
data = this.base64_decode(data);
return data
}
这里可以很清楚的看到哪些字符被替换掉了
用python请求m3u8然后还原内容,再写出m3u8给其他下载器下载
耐心等待下载完成
视频全片正常播放,解密完成 |