QQ音乐爬虫——sign参数逆向(补环境)

今天给大家分享一下QQ音乐sign参数的逆向。QQ音乐的sign是由webpack打包生成的。大致上就是把所有的函数封装为一个模块,然后通过加载器导出函数。各位如有什么不懂可以百度喔(主要是我也不太懂),这里就不做过多的解释了。

长话短说,切入正题。

进入一首歌播放页,框框里面的内容加上https://dl.stream.qqmusic.qq.com就是音乐的下载地址。

 

 

 

 sign就是加密参数,songmid在搜索页可以找到。接下来就是找到sign是怎么生成的。

依然,使用我们的全局搜索大法。

 

找到sign的位置了,打上断点进行调试分析。sign是=i的,而i又 = "GET" === t.type.toUpperCase() ? o(t.data.data) : o(t.data),因为 "GET" === t.type.toUpperCase()在控制台打印出来的结果是false,由js的语法可知,i=o(t.data),也就是冒号后面的那个。t.data是传入的参数,经过o函数就变为了加密内容。而o = n(350).default,因此现在要解决o = n(350).default。

 

 

 

 这里的o = n(350)就是webpack的形式。n是函数加载器,350是调用的函数。进入o函数,也就是webpack内部。如图:c就是加载器的名字。

 

 这就是函数加载器,几乎所有webpack的加载器都这样。把这一页内容全部复制下来,放到我们的Python编辑器中。然后用对象的形式引出我们的函数,像这样:350是键,后面的函数是值,也就是

 

这个n(350)里面又调用了n(110),如图,所以把n(110)函数也复制下来。

 

要在我们本地调用350和110,就需要我们在自执行函数的前面声明一个全局变量,这里我声明的是xxx。然后令全局变量等于我们的加载器。xxx=c。

 

ok,到这里就快接近成功了,接下来就是通过xxx来调用我们的函数350了。如下:

 

 顺利拿到了结果:

但是写爬虫代码却拿不到数据,那多半是加密参数有问题。

把代码放浏览器看看。

 ,果然不一样,接下来就是在node中补齐网站检测的环境。

这里挂几个常见的代理看看

 结果:

 接下来把缺的补上去就行了。

 

 再次运行,

 

 和浏览器运行结果一样,over!!。

通过Python来执行js代码,最后拿到音乐播放地址。效果如下:

 值得注意的是只对非付费音乐有用,付费音乐是拿不到url的,毕竟听都不让听。还是那句话,只有你有会员就能下载,会员过了也能听。

 

今天的分享到这里就结束了,如果对大家有帮助那就太好了,拜拜啦!!!

 

posted @ 2023-03-04 12:04  小纱雾  阅读(2959)  评论(25编辑  收藏  举报