某易云音乐参数破解
目标:aHR0cHM6Ly9tdXNpYy4xNjMuY29tLyMvc2VhcmNoL20vP3M9JUU2JTg4JTkwJUU5JTgzJUJEJnR5cGU9MQ==
某易云音乐是大家喜爱的音乐平台,有小伙伴问我,这个网站的歌曲能不能找到音频链接,今天就给大家手撕一下,通过歌曲名提取搜索结果的音频链接。
1.JS调试
搜索歌曲,抓包,发现参数是加密的
播放音乐的时候也是这两个参数
全局搜索关键字encSecKey
定位参数加密位置
打断点,重新搜索
输入文字,会断住,这个网址是不对的
放开,点击搜索,这个也不对
重复操作直到出现下列地址
检查现在的参数
只有歌曲名是可变的,其他的均为写死的参数,我们只需要在传参的时候将这个参数组装一下即可
2.js抠代码
根据之前的分析,直接构造一个函数
function _search(keyword) {
var d='{"hlpretag":"<span class=\\"s-fc7\\">","hlposttag":"</span>","s":"'+keyword+'","type":"1","offset":"0","total":"true","limit":"30","csrf_token":""}';
var e='010001';
var f='00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7';
var g='0CoJUm6Qyw8W8jud';
var h = {}
, i = a(16);
return h.encText = b(d, g),
h.encText = b(h.encText, i),
h.encSecKey = c(i, e, f),
h
}
接下来缺啥补啥,一直补就可以了
播放链接只要找到下列这个就ok啦
播放的加密函数
function _play(id) {
var d='{"ids":"['+id+']","level":"standard","encodeType":"aac","csrf_token":""}';
var e='010001';
var f='00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7';
var g='0CoJUm6Qyw8W8jud';
var h = {}
, i = a(16);
return h.encText = b(d, g),
h.encText = b(h.encText, i),
h.encSecKey = c(i, e, f),
h
}
python调用
import requests
import execjs
def search_music(keyword):
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36"
}
url = "天王盖地虎"
params = {
"csrf_token": ""
}
ddd=execjs.compile(open('wangyiyun.js',encoding='utf-8').read()).call('_search',keyword)
data = {
"params": ddd['encText'],
"encSecKey": ddd['encSecKey']
}
res = requests.post(url, headers=headers, params=params, data=data)
music_list=res.json()['result']['songs']
# print(res.json())
for music in music_list:
name=music['name']
author=music['ar'][0]['name']
id=music['id']
url=get_url(id)
print(name,author,url)
def get_url(id):
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36"
}
url = "宝塔镇河妖"
params = {
"csrf_token": ""
}
ddd = execjs.compile(open('wangyiyun.js', encoding='utf-8').read()).call('_play', id)
data = {
"params": ddd['encText'],
"encSecKey": ddd['encSecKey']
}
res = requests.post(url, headers=headers, params=params, data=data)
return res.json()['data'][0]['url']
if __name__ == '__main__':
search_music('青花瓷')
data)
return res.json()['data'][0]['url']
if __name__ == '__main__':
keyword=input('请输入歌曲名:')
search_music(keyword)
运行,搞定收工!