声明:本文仅限交流学习使用,请勿使用在任何非法商业活动,禁止用于非法用途。否则后果自负。如有侵权,请告知删除!
本次逆向目标为采集某易云音乐真实歌曲地址,难度简单,适合逆向初学者练手,仅供学习,源码在文章最下方。
目标网址:
aHR0cHM6Ly9tdXNpYy4xNjMuY29tLyM=
请求流程分析
1、随机点开一首歌曲,复制链接。
2、新建一个无痕窗口,打开F12,打开链接。
3、点击播放,可以找到存放歌曲的真实地址的接口。
分析该接口,可以看到主要提交了两个表单数据,格式如下:
params :xFV7hdq52mP4aeQhkR/lr99xZA+jznlqmn651M1B3/TDrlPBhC4FO5FuaBCv7uul1T3ZTL2pYN/WBTnkeKFSWJl8lbuhyzXIc4buJfbdtguA31eY8ZoTFmRhdOAYmwKK/C7oY3OGt3OlDKkDFowX7w==
encSecKey : 7afd112b56856ce059b5d3ebc95ea681aabf754189539a78ad05910543dfb03e8a2044d8d63bcd8842d356503d754c8a692e98d760690bd0bc6167b4d46e2d2165f49095f6b05dc1d5e17c6a6048da583bab32693cc055198db1f8034cb7caa73225ef8951bf686be52288cfc882d23e2e7cabfa8c6a74f3ddac303042bb4bca
加密参数分析
搜索加密参数名可以直接定位到加密点。
在 e3x.data
处打下断点,然后清空缓存刷新,网站会直接断下,根据右边作用域可以发现是在请求其它接口时也生成了这两个加密参数。
这里直接 F8 ,过掉所有断点,点击播放,直到右边作用域中的接口为我们想要采集的接口 enhance/player/url/v1
。
可以看到,params 和 encSecKey 都是由 bMs1x 得来。而 bMs1x 的生成在上一条语句。
var bMs1x = window.asrsea(JSON.stringify(i3x), bsi6c(["流泪", "强"]), bsi6c(Vx0x.md), bsi6c(["爱心", "女孩", "惊恐", "大笑"]))
其中关键点在于
方法 window.asrsea
i3x
方法 bsi6c
Vx0x.md
i3x 是一个对象,内容如下:
{ids: '[2034742057]', level: 'standard', encodeType: 'aac', csrf_token: ''}
我们通过分析可以知道除了 ids 其余的都是固定值,而 ids 正是歌曲 ID ,所以这个点我们就解决掉了,在采集不同歌曲时修改 ids 的值即可。
Vx0x.md 的值通过调试可以知道是固定的,写死就行。
然后就是喜闻乐见的扣代码环节,缺啥补啥。可以扣整体,也可以一个一个补,也不多。
bsi6c 大概补五六个函数和一个对象就可以了,主要是 window.asrsea。
b 是一个 AES 加密,可以通过调 node 的 crypto-js 库来实现,其余的慢慢扣就行。