网易云音乐web端加密解析
网易云音乐web端加密解析
API加密部分
即params和encSecKey字段,其中params字段通过两次aes cbc模式加密得到,密钥和偏移量都是固定的。encSecKey由rsa加密得到,最后输出的是byte数组转换成的16进制字符串。这块内容网上一搜一大把,本文不再赘述,如有需要可以参考这篇文章,讲的很详细。
内容加密部分
这部分加密出现在歌单等页面,即主要内容是 textarea 标签中的一段加密字符串,例如下图:
而在渲染完成的页面(审查元素)中,这部分代码则变成了正确的数据:
接下来就是分析js了(PS:又臭又长的JS)
首先搜索这串加密字符串相关的字符,在某段js中找到了下图的js代码:
尝试下断点调试,但是断点始终无法命中。(后来才知道这是网易云音乐原先的数据解析方式)。说明这部分代码应该是被废弃了,不过结合网上的一些过时代码可以看到这部分数据可能最终是转化为json来使用的。那么,是否能在json上下文章呢?马上想到了一个思路,将JSON.parse方法进行hook,然后加上debugger断点,再通过调用栈堆来找到关键位置。
hook代码如下(hook框架使用Everything-Hook):
eHook.hookAfter(JSON, 'parse', function (m, args, result) {
var json = args[0].toString();
if( json.indexOf("杨宗纬")>-1)
{
console.log(json);
debugger;
}
});
debugger生效:
通过调用栈堆,找到位置:
找到了位置,那么接下来都是些简单的工作了~~~
结果预览
checktoken字段
出现在创建歌单接口中,如果传值错误的话会返回错误码250,反馈消息为作弊(感觉是在故意嘲讽? ),如下图:
加密位置:
其中"ea().k(ra)"来源于请求"https://ac.dun.163yun.com/v3/d"
由于加密代码包装在匿名函数中,如果要调用的话需要想办法修改作用域