js url加密_python爬取网易云音乐JS破解

需要用到的工具

1.python3.7

2.chrome浏览器

3.sublime编辑器

话不多说,下面开始讲解流程。

主要流程

1.在网易云音乐搜索框中输入“成都”,F12打开开发者模式,搜索框回车,在Network中发现出现了很多响应数据,点进每个响应,切换到右边一栏的Preview。

ad9fa3831f705819428f5236b6c2159a.png

在web?csrf_token=中我们发现响应result是一个json格式的数据,在songs字段中出现了歌曲列表。

05686d64ab83adb18c0b77635ca79c97.png

4df057f58e02ebe7ca24c11064c25c04.png

当我们把鼠标放到页面第一首歌曲的上面是,屏幕左下方的链接显示的id刚好就是json数据中id,于是我们找到了歌曲的id,或许有用,接着往下看。

ac89d226b4f90b0351f14a9e63cb89d7.png

随机点击一首歌进行播放,注意不要点击超链接,那样会跳转页面,点击那个小的播放按钮就可以了。点击播放按钮后左侧导航栏里面会多了几个响应,其中就有一个MP3文件。

c5bb4591de741642146c42767790e69b.png

可以看到浏览器发送了一个GET请求,服务器响应一个mp3文件,如果我们在python程序里面也向Request URL发送一个GET请求,那样不就能下载MP3文件了吗。思路逐渐清晰,于是我们接下来的任务就是寻找到这个URL是从哪里得到的,再重新查看左侧的导航栏,发现在播放歌曲的时候多了一个url?csrf_token=的响应,点进去看Headers,发现是一个POST请求,参数有两个,params和encSecKey,点击Preview,可以看到也是一个json数据,有没有发现我们的响应里面有个url字段,他的地址和我们MP3响应的请求地址是一样的。

6a0cd44c004d1adbadf824df963b5da6.png

7412435f929a7e479ed8e4771dbcf0c1.png

64ad7a0c65a606bee3f41e76a2f2386a.png

好,大致思路已经有了,就是首先向服务器的url?csrf_token=发送一个POST请求,得到MP3文件的请求地址,再向这个地址发送GET请求就能得到mp3文件。那么问题来了,url?csrf_token=的POST请求的参数怎么办?接着往下看吧!

3.关闭右侧的导航栏,点击红色箭头所指向的文件,打开后是一个JS文件。

2c26b6bc5470ec5162fe3cdb3e80ad41.png

在bLi4m这个变量中含有我们需要的参数。这个bLi4m变量接收的是window.asrsea这个函数返回的数据,将鼠标放到这个函数上面出现一个对话框,是一个d函数,点进去,跳转到了function d()。

326c891f862cf70e4bf2771d0c151797.png

在function d中多设置几个断点,function d接收d,e,f,g四个参数,我们想要看看着四个参数到底是什么,下面演示断点调试。

4.我们设置好断点后,刷新页面,js会执行到第一个断点处。

可以看到粉色的是已经执行过的程序变量的值,再次点击红色箭头所指的按钮,程序运行到function d处暂停。

e6d96d0fc35430829ceb6fc92ba7267e.png

6b6e3a1dc1dcd019e0bb5aff83f25ee2.png

安装 PyCryptodome库,直接pip install PyCryptodome就行。

生成16位随机字符串,也就是一个for循环的事。

84047e6be726461a3baf81b4e2106188.png

AES加密

a02ec5356650b3852f16e501a12d120c.png

AES要加密的密文是 “{“ids”:”[song_id]",“br”:128000,“csrf_token”:""}",只要将其中的song_id替换成歌曲的id就行了,就是上面说到的POST请求得到的id。

RSA加密

9e4ff281a73935ab0e608d3ef34e3f2b.png

RSA加密的密文是16位的随机字符串,要和AES加密保持一致。

6.

介绍完加密过程,下面介绍获取歌曲id,毕竟我们要实现的是下载任意的歌曲。输入歌曲名字就能下载,要实现这个功能就必须得到id,然后通过上文加密方法,获得params和encSecKey参数发送POST请求回去下载的url。

d454d974818bac4d718b51a985e00782.png

这里我们发现了获取id的url,查看其request请求。

13a08289689a808ef35e2b90856c4817.png

b4960227ed394bca57c593b26f526a34.png

同样的这也是一个post请求,参数还是params和encSecKey,和上面加密一样,查看其js文件,进行断点调试,有了上面的经验,这次我们重点查看d函数就行了。

d6aa77df65b50a10e811e678ddf76a16.png

可以看到这次d函数传入的参数基本没有变,只有d参数稍有变化,变成了"{“hlpretag”:"<span class=“s-fc7”>",“hlposttag”:"","#/download":"",“s”:“成都”,“type”:“1”,“offset”:“0”,“total”:“true”,“limit”:“30”,“csrf_token”:""}",其中s字段就是我们要搜索的歌曲名字,还是按照前面的加密过程一样得到post参数,到这里整个过程基本结束,下面贴上完整的代码。

7.

程序流程就是,首先输入想要下载歌曲的名字,然后拼接密文字符串进行加密,获得歌曲的id,再通过id获取下载的链接,其中由于获取的歌曲id有很多个,我只选择下载第一个(一般都是原唱),程序写的很简单,但基本功能已经实现,大家可以学习一下。

2d16429f047ab4cc2a68db3a7b221ac6.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值