|

某Q音乐Sign算法分析
有人会说废话,当然获取地址啦,好的。我们随便选一首音乐,按F12打开Network 然后滚到最下面你会发现一些音乐地址
但是,并不是所有的地址都能播放的。所以,我们一个一个试。
当我们试到:
- http://isure.stream.qqmusic.qq.com/C400001CzV9V46aanS.m4a?guid=5825340074&vkey=FA926CD3620D11963F88EE47A5715FC201B588D78888B1D2CC2AE372B816C8DDDB90C4DC62951BA9B73EC783973531C395874F981893DE30&uin=977345961&fromtag=66
复制代码
这个地址的时候,他就可以播放了。 接下来,我们看需要哪些参数
经过几次搜索会发现。 C400001CzV9V46aanS.m4a 和 vkey 是主要的 。接下来,我们就找一下这两个参数。
首先,我们搜索上面的Vkey,会发现。有两个结果。一个是播放地址,一个是接口地址。
我们把接口地址拿出来,URL解码一下。得到下面结果:
- https://u.y.qq.com/cgi-bin/musics.fcg?-=getplaysongvkey45691431540747973&g_tk=1082369868&sign=zza9o2g8ze17fpbwrkcdc33d95d1bfe5a9714c6cc3e992039b&loginUin=977345961&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq.json&needNewCode=0&data={"req":{"module":"CDN.SrfCdnDispatchServer","method":"GetCdnDispatch","param":{"guid":"5825340074","calltype":0,"userip":""}},"req_0":{"module":"vkey.GetVkeyServer","method":"CgiGetVkey","param":{"guid":"5825340074","songmid":["001CzV9V46aanS"],"songtype":[0],"uin":"977345961","loginflag":1,"platform":"20"}},"comm":{"uin":977345961,"format":"json","ct":24,"cv":0}}
复制代码
会发现很长,那有没有非必需的参数呢。经过我们的删除测试。发现有sign值和data就可以。也就是以下:
- https://u.y.qq.com/cgi-bin/musics.fcg?sign=zza9o2g8ze17fpbwrkcdc33d95d1bfe5a9714c6cc3e992039b&data={"req":{"module":"CDN.SrfCdnDispatchServer","method":"GetCdnDispatch","param":{"guid":"5825340074","calltype":0,"userip":""}},"req_0":{"module":"vkey.GetVkeyServer","method":"CgiGetVkey","param":{"guid":"5825340074","songmid":["001CzV9V46aanS"],"songtype":[0],"uin":"977345961","loginflag":1,"platform":"20"}},"comm":{"uin":977345961,"format":"json","ct":24,"cv":0}}
复制代码
接下来,我们先看data参数是怎么组成的
接下来,我们先看data参数是怎么组成的
- {"req_0":{"module":"vkey.GetVkeyServer","method":"CgiGetVkey","param":{"guid":"5825340074","songmid":["001CzV9V46aanS"],"songtype":[0],"uin":"977345961","loginflag":1,"platform":"20"}},"comm":{"uin":977345961,"format":"json","ct":24,"cv":0}}
复制代码
- {"req_0":{"module":"vkey.GetVkeyServer","method":"CgiGetVkey","param":{"guid":"5825340074","songmid":["001HmS8C4cQcg2"],"songtype":[0],"uin":"977345961","loginflag":1,"platform":"20"}},"comm":{"uin":977345961,"format":"json","ct":24,"cv":0}}
复制代码
由此得出结果:
然后我们看一下,这个歌曲mid怎么获取
我们搜索歌曲找一下json。原地址:
- https://c.y.qq.com/soso/fcgi-bin/client_search_cp?ct=24&qqmusic_ver=1298&new_json=1&remoteplace=txt.yqq.song&searchid=67992295898658425&t=0&aggr=1&cr=1&catZhida=1&lossless=0&flag_qc=0&p=1&n=10&w=DJ沈念版&g_tk_new_20200303=1082369868&g_tk=1082369868&loginUin=977345961&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq.json&needNewCode=0
复制代码
我们再次精简地址。得到如下:
- https://c.y.qq.com/soso/fcgi-bin/client_search_cp?n=10&w=DJ沈念版&format=json
复制代码
现在data参数分析完毕。但是还需要sign,接下来我们找sign
这里我们用最笨的方法,一个一个找。首先,我们切换到js列表
我们搜索关键字:sign= 挨个搜索。我们会搜到以下内容:
我们看代码:
- window.getSecuritySign ? f() : e.load("//y.qq.com/component/m/qmfe-security-sign/index.umd.js?max_age=2592000", function() {
复制代码
发现有个js文件,由此可见,调用的是这个js来生成sign,那就简单了。我们把整个js放到调试器试试看。
发现报错,那是因为没有初始化window。我们在第一行加一行初始化:
再次加载js,会发现,加载成功。
但是这还没结束,如果你现在调用函数。会发现出现了很多unfinded
为什么会出现unfinded呢,因为电脑没v8js环境。所以我们就需要v8js引擎来运行。这里用的是鬼鬼v8js调试。成功获取到sign
然后我们来试试sign能不能用呢。简单写个例子。
完美获取到链接....ok到这里就结束了。希望对您有帮助。
v8js引擎和dll已打包。直接下载就好。。
sign获取例子.zip
(2.1 MB, 下载次数: 83)
|
评分
-
查看全部评分
|