上次 分享了一下 生意参谋的 解密方法,写不是很好,见谅。
这一次,我要分享的是 QQ音乐的歌手信息获取的解密方法,大神的可以绕道哦!
先来一张 QQ音乐 网站图,歌手列表地址:https://y.qq.com/portal/singer_list.html

接下来,开始 爬虫 操作,初步流程,按F12 ,抓包调试,上图

上图 直接获取到了 列表页的 网址信息,具体这个怎么来的,这里不说了,太基础了,不浪费口舌了。
网址中的内容 分析一下:
下面是展开的数据
-: getUCGI165692935827088
g_tk: 5381
sign: zza0x20nli39b31a4bb609c7b78275ed2b8d0ec78fbb7
loginUin: 0
hostUin: 0
format: json
inCharset: utf8
outCharset: utf-8
notice: 0
platform: yqq.json
needNewCode: 0
data: {"comm":{"ct":24,"cv":0},"singerList":{"module":"Music.SingerListServer","method":"get_singer_list","param":{"area":-100,"sex":-100,"genre":-100,"index":-100,"sin":80,"cur_page":2}}}
为了进一步查看哪些是变化的,那还要在抓包一个分页,
-: getUCGI796782016737499
g_tk: 5381
sign: zza186sdh05jdq27af03a5adad21f9891fbc31f2dedaf93
loginUin: 0
hostUin: 0
format: json
inCharset: utf8
outCharset: utf-8
notice: 0
platform: yqq.json
needNewCode: 0
data: {"comm":{"ct":24,"cv":0},"singerList":{"module":"Music.SingerListServer","method":"get_singer_list","param":{"area":-100,"sex":-100,"genre":-100,"index":-100,"sin":160,"cur_page":3}}}
从两个抓包的数据来看,变化的 有 getUCGI ,sign,data ,这三个数据
那我们先查询 最关键的sign,那我们找一下sign 在哪个代码段里,先搜索一下 如图:

通过 搜索sign后,下面出现了几个网址,那我们一个个去打开找一下,关键位置。
点开网址后 ,一定要点 格式化,如图

仔细搜索找到这一串代码:r.url.indexOf("u.y.qq.com") > -1 && (r.url = c("sign=" + getSecuritySign(r.data.data), r.url),
这个代码中的 "sign=" + getSecuritySign(r.data.data) ,很明显告诉我们,sign=getSecuritySign(r.data.data),意思就是sign是通过 getSecuritySign(r.data.data) 进行加密算出来的,如下图

居然找到这个算法函数,那我们就需要进去看一下他算法了,我们先在左边的8211加上断点,鼠标点一下 数字 就可以了,然后,我们在网站中点 下一页,就直接会跳到这里了。
鼠标放到这个 getSecuritySign函数上会,自动跳出一个链接,点击一下就会 直接进入了。

进入算法代码中

到这里后,我们找函数测试一下,就是刚才的getSecuritySign这个函数,我们在console中进行简单调试 getSecuritySign(),按回车,多测试几个,发现值和我们sign 是一样的效果的,那就说明这个代码就是加密,我们是找对了。

那接下来我们分析一下这个值是怎么加密的,从上面的多个测试看出来,zza050npmgzld4h667210b4e7ab8ff0f1e1a5aa3912804a这个值中的,zza是一个固定值,667210b4e7ab8ff0f1e1a5aa3912804a这个也是一个固定值,
因为我们函数中()空的,他加密的是空值,那我们随便写个试试。

是不是发现不一样了,用同一个值去加密,后面的值就是不变的。从后面的 667210b4e7ab8ff0f1e1a5aa3912804a 这个值看出,就是MD5算法,具体怎么算的,还需要抓包看情况了。

这个加密算法里334 那边 下断点,进行测试,按f10,一步步查看

左边下了断点后,按了f10 两次,右边看到这组数据,a-z0-9的数字,下面是一个 lecqc05pajaf ,似乎是 上面的数字进行了随便提取组合到下面的,这个先放着,等会看抓包到网址是否有这些内容。再继续按f10,慢慢的,右边的scope那边关注要有没有什么内容出现,

发现出现了sign 值 "zzalecqc05pajaf0405ae7720c7b86f221e9ceb53c5e5d7" 在这个scope里,我们点开看看里面的值,上面抓包获取到是随机值 lecqc05pajaf 也在里面,而 CJBPACrRuNy7 和 0405ae7720c7b86f221e9ceb53c5e5d7 又是什么那?
0405ae7720c7b86f221e9ceb53c5e5d7 很好理解,就是sign 后面的值,那CJBPACrRuNy7 这个有什么那,因为这里已经加密了,看不到那个值加密的,我们在 Call Stack往下找,是否哪个值加密的


发现了, 这个里看到值 {"comm":{"ct":24,"cv":0},"singerList":{"module":"Music.SingerListServer","method":"get_singer_list","param":{"area":-100,"sex":-100,"genre":-100,"index":-100,"sin":240,"cur_page":4}}} 在这里,这个是一个data值,我们可以直接获取到如图

而 下面有其他值出现了
- 9: ["CJBPACrRuNy7"]
- 10: ["415780cec1273bc3d5928d0fbd831735"]
- 11: ["2qvw5s6oba"] // 不小心关闭了f12,从新获取了,这个值就是 a-z 0-9 的一个随机值 ( lecqc05pajaf )就是这个 。
415780cec1273bc3d5928d0fbd831735 这个 就是一个 md5值,他的加密一个是 上面的 {"comm":{"ct":24,"cv":0},"singerList":{"module":"Music.SingerListServer","method":"get_singer_list","param":{"area":-100,"sex":-100,"genre":-100,"index":-100,"sin":240,"cur_page":6}}} (data ) 和 CJBPACrRuNy7 这个组合后的 md5,我们可以测试一下,是不是这样的 。打开站长工具http://tool.chinaz.com/tools/md5.aspx

看到了吗,这个 md5出来,很准确,抓包就到这里结束。
总结: getUCGI 值随便值不用管
sign 是 一个 组合 zza + 一个 a-z0-9的随机值 +md5(CJBPACrRuNy7+ data)
好了具体这个解密流程大致就是这样的。至于用什么去写破解代码,就看自己会什么,写什么了?
所有流程多是通过其他高手写的资料里学到的知识,我这个不是第一个写的,也不是最后一个吧,感觉自己写 应该算流程比较全了,不过水平有限,希望大家不要介意。

1万+





