某鹅通js逆向

群里一直有小伙伴,不知道咋下载某鹅通的视频,这里说一下我的逆向过程(开始那个某利威的确实不怎么详细,逻辑也很胡乱,主要是我不知道有挺多小伙伴需要这个,我当时就随便写写,记录一下,也没想有多少人看)

1.首先找m3u8链接

这里我们直接抓包,可以看到,这个m3u8链接

这个抓包过程就不赘述了,我们看一下这个m3u8的返回。

可以看到,这个返回的是一串字符,看来是加密的。

2.寻找解密代码

这个m3u8文本是加密的,但是他肯定要解密后才能进行解析,所以,我们要找到他的解密代码。这里对这个m3u8解密视频的key下一个断点。

就是这个链接。

查看一下他的发起程序。

扫描二维码关注公众号,回复: 14630381 查看本文章

可以看到一个loadkey,既然已经loadkey了,那肯定在这个之前就已经解密完成了,我们再往下移一下看看。

可以看到这个loadsuccess,这个很可疑。点进入看一下。

可以看到这样的代码,很熟悉,应该是对m3u8文件进行解析。看来解密不远了。先打结果断点。断住看看。

断住过后,找到这个解密函数,是这个D.decrypt,输出一下这个t.data。可以看到。

就是没解密的数据,而 D.decrypt(t.data)就是解密后的数据。

3.进入D.decryp函数

进入到decrypt函数,可以看到这些东西,乍一看,人都麻了,这一定是混淆了吧?头都大了,殊不知,这都是障眼法。他是直接运行了这样一行代码。

return t[y[1] + m[54] + y[9] + y[32] + y[26] + m[50] + y[10]](y[24] + v[50] + v[2]) > -1 ? (t = (t = (t = (t = (t = t[y[27] + m[34] + v[29] + y[58] + m[58] + y[30] + y[32]](m[27] + m[42] + v[2], ""))[y[27] + y[32] + m[17] + y[58] + m[58] + y[30] + m[34]](/@/g, y[35]))[m[60] + y[32] + y[19] + m[55] + y[12] + y[30] + y[32]](/#/g, m[44]))[m[60] + m[34] + v[29] + m[55] + v[2] + y[30] + v[8]](/\$/g, y[48]))[v[58] + v[8] + y[19] + v[53] + m[58] + y[30] + v[8]](/%/g, v[11]),I(O(t))) : t

return了一个值,判断ty[1] + m[54] + y[9] + y[32] + y[26] + m[50] + y[10]是否大于-1,如果不大于,就直接返回t,大于则执行,

(t = (t = (t = (t = (t = ty[27] + m[34] + v[29] + y[58] + m[58] + y[30] + y[32])y[27] + y[32] + m[17] + y[58] + m[58] + y[30] + m[34])m[60] + y[32] + y[19] + m[55] + y[12] + y[30] + y[32])m[60] + m[34] + v[29] + m[55] + v[2] + y[30] + v[8])v[58] + v[8] + y[19] + v[53] + m[58] + y[30] + v[8], I(O(t)))这一行代码。

在控制台输出一下,可以看到y,m,v都是定值,他是从里面选字母,组成单词,对t进行解密。

解密后的代码是这样的。

(t = (t = (t = (t = (t = t.replace("_ba", "")).replace(/@/g, 1)).replace(/#/g, 2)).replace(/\$/g, 3)).replace(/%/g, 4))
const buff = Buffer.from(t, 'base64');
const str = buff.toString('utf-8');

先移除一些关键词,在对结果对base64解码。就可以得到解密后的m3u8文本了。

4.请求m3u8文本

这里有一点要注意,请求链接的时候要带上refererorigin,某鹅通对这个有检测。这里你就可以请求视频下载了。

这个总体还是很简单的。可以作为练手。

有啥问题加群:342096685

猜你喜欢

转载自blog.csdn.net/qq_59848320/article/details/124885478