某鹅通js逆向

(编辑:jimmy 日期: 2024/10/30 浏览:2)


某鹅通js逆向

[b] 开始图片好像出问题了,用的githup做图床,有点问题,重新编辑了一下
群里一直有小伙伴,不知道咋下载某鹅通的视频,这里说一下我的逆向过程(开始那个某利威的确实不怎么详细,逻辑也很胡乱,主要是我不知道有挺多小伙伴需要这个,我当时就随便写写,记录一下,也没想有多少人看)**

1.首先找m3u8链接

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

https://mmbiz.qpic.cn/mmbiz_png/CkZ7NDNJbiahbHQMeA5oz0jRceTnraos2DgibsSVAvHyXODhUtoDErxosDlaV8s9osAMEuUFic2J7uBevNw5IO3rA/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1

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

https://mmbiz.qpic.cn/mmbiz_png/CkZ7NDNJbiahbHQMeA5oz0jRceTnraos2xHXnrdaLYrcekTJPpuiaAhB2KusVqnficvfhWtkNWr0RbV8pozY0JK3A/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1

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

2.寻找解密代码

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

https://mmbiz.qpic.cn/mmbiz_png/CkZ7NDNJbiahbHQMeA5oz0jRceTnraos2OkQBu5tjakWP3KNBPYNvCzBSNtSibVKeWBKGibeDtCJpL8Pu746JCy4g/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1

就是这个链接。

查看一下他的发起程序。

https://mmbiz.qpic.cn/mmbiz_png/CkZ7NDNJbiahbHQMeA5oz0jRceTnraos2CXib0gliaOicgrD3xWqKgqOCxYic8qanqJYicp56M9icgnzzw0BkENibGOiagg/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1

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

https://mmbiz.qpic.cn/mmbiz_png/CkZ7NDNJbiahbHQMeA5oz0jRceTnraos2cTH1fPs5TicVI5Uw3Qe3jngoaPjiccfGOCGI5V1SYcLdia1G8MRE5ibREA/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1

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

https://mmbiz.qpic.cn/mmbiz_png/CkZ7NDNJbiahbHQMeA5oz0jRceTnraos2mjoL6pNqYxsqCicfXiajo5PA3JaPicrEO7fhcJGzCSeyYKicME9wIYnaUA/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1

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

[img=1080,374]https://mmbiz.qpic.cn/mmbiz_png/CkZ7NDNJbiahbHQMeA5oz0jRceTnraos2EwwrOxBWLOia2ia5swgRLWVAetQrS5wjZscB0NbibNlx3ZRxiaSurHYHxw/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1[/img]

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

[img=1080,283]https://mmbiz.qpic.cn/mmbiz_png/CkZ7NDNJbiahbHQMeA5oz0jRceTnraos2OSb3ia5VrMy2cM48gqbCyZ6IKwwkHGaiaxDW5oicEDFHgSmPQPR6ib7A5Q/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1[/img]

就是没解密的数据,而 D.decrypt(t.data)就是解密后的数据。
https://mmbiz.qpic.cn/mmbiz_png/CkZ7NDNJbiahbHQMeA5oz0jRceTnraos2tgwmEyVrSYJMtLa8oNDeOI11icj3zKEwjK2VcB7I6ECbaJJCzq00Wmw/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1

3.进入D.decryp函数

https://mmbiz.qpic.cn/mmbiz_png/CkZ7NDNJbiahbHQMeA5oz0jRceTnraos229XiaINNTNL77LEFJor3Xg8vzLibcQGre0xDmNdib4eppT74Zu4Pns88Q/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1

进入到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了一个值,判断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 = 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)))这一行代码。

https://mmbiz.qpic.cn/mmbiz_png/CkZ7NDNJbiahbHQMeA5oz0jRceTnraos2Aia0XLA6OEQiaQZHp5r83H15Y3zBbibMRqI8cqqOWFfMlgydRrYNYiaUhA/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1

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

解密后的代码是这样的。

function ww (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,某鹅通对这个有检测。这里你就可以请求视频下载了。

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