漁滒 发表于 2020-9-1 16:35

【记录】某网站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给其他下载器下载

耐心等待下载完成

视频全片正常播放,解密完成

king82 发表于 2020-9-15 14:51

说实话,我只知道原理

就是这句话那么其中不存在的字符就是替换掉了,那么浏览器播放的时候一定要将正确的内容替换回来,再进行base64解码,得到m3u8文本

但是后面怎么弄,就歇菜了。完全不懂代码和编程,哈哈。

manan9629 发表于 2020-12-2 08:55

慵懒丶L先森 发表于 2020-9-1 17:03
全文思路清晰,涉及浏览器开发者人员工具的基础使用、字符解密、正则表达式的知识。关于base64解密那一块又 ...

抖个机灵啊

wakichie 发表于 2020-9-1 16:43

大佬牛逼啊

star321123 发表于 2020-9-1 16:46

秀了一波技术

慵懒丶L先森 发表于 2020-9-1 17:03

全文思路清晰,涉及浏览器开发者人员工具的基础使用、字符解密、正则表达式的知识。关于base64解密那一块又学到了,感谢分享宝贵经验

大鸽鸽 发表于 2020-9-1 17:12

js逆向路 任重而道远

漫漫长昼 发表于 2020-9-1 17:13

替换下字符就能绕过,这未免也太...

simon21 发表于 2020-9-1 17:17

哦。原来我还差1个js的格式化工具!~难怪有时候找到很多有用无用的东西。。。

OVVO 发表于 2020-9-1 17:24

m3u8的演示页面看看{:17_1074:}

时光书窝 发表于 2020-9-1 17:27

前排支持一下大佬

好走不送 发表于 2020-9-1 21:43

大神一个,牛
页: [1] 2 3 4
查看完整版本: 【记录】某网站js逆向与m3u8解密