admin管理员组文章数量:1649931
最近在抓取QQ音乐歌手粉丝数量时,发现参数多了一个sign
如果不传这个参数返回的结果
所以用了2个多小时一直debug看了一下生成sign参数的源码
源码地址:https://y.qq/component/m/qmfe-security-sign/index.umd.js?max_age=2592000
刚开始我以为直接导入js,调用window.getSecuritySign(JSON.stringify(data)),可以直接获取sign,可是结果一直不正确。
我就想是不是源码里有什么比较,只让QQ音乐那边的页面返回正确结果,然后就开始了2个小时的debug
在此中间果然发现了蹊跷
后面继续debug
结果差不多已经出来了,QQ音乐那边 location.host = y.qq
又看到indexOf,后面肯定还有一个参数是y.qq
后面执行函数
"y.qq"['indexOf'].apply('y.qq',['y.qq']) ---->放到浏览器跑一下 返回值为0
下一步
0 === -1 返回false,所以g[15] = false
下一步
到这里 如果是我们本地运行的话,h是会赋值为963的,而QQ音乐那边则还是934(h是l数组的下标,而l数组存储的数据是调用n这个方法数组对应的方法的,具体就是n[l[h]]()),这样导致我们本地运行出来结果是错误的
最后,一直debug会看到如何获取sign参数。
分析出来的代码:
let str = 'abcdefghijklmnopqrstuvwxyz0123456789';
let count = Math.floor(Math.random() * 7 + 10);
let sign = 'zza';
for(let i = 0; i < count ; i++){
sign += str[Math.floor(Math.random() * 36)];
}
sign += window.__sign_hash_20200305('CJBPACrRuNy7'+JSON.stringify(data));
data就是请求中data参数的值
目前基本上没有什么问题
对于__sign_hash_20200305()这个加密算法,看不太明白,只能借助着这个方法来生成sgin
版权声明:本文标题:关于QQ音乐sign参数的获取 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1725784759a1042552.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论