【记录】某网站js逆向与m3u8解密
今天在浏览网页的时候发现一个网站提供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代码
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给其他下载器下载
耐心等待下载完成
视频全片正常播放,解密完成 说实话,我只知道原理
就是这句话那么其中不存在的字符就是替换掉了,那么浏览器播放的时候一定要将正确的内容替换回来,再进行base64解码,得到m3u8文本
但是后面怎么弄,就歇菜了。完全不懂代码和编程,哈哈。 慵懒丶L先森 发表于 2020-9-1 17:03
全文思路清晰,涉及浏览器开发者人员工具的基础使用、字符解密、正则表达式的知识。关于base64解密那一块又 ...
抖个机灵啊 大佬牛逼啊 秀了一波技术 全文思路清晰,涉及浏览器开发者人员工具的基础使用、字符解密、正则表达式的知识。关于base64解密那一块又学到了,感谢分享宝贵经验 js逆向路 任重而道远 替换下字符就能绕过,这未免也太... 哦。原来我还差1个js的格式化工具!~难怪有时候找到很多有用无用的东西。。。 m3u8的演示页面看看{:17_1074:} 前排支持一下大佬 大神一个,牛