首先找到数据包,然后进入调用栈去查看,从上往下慢慢找
接着在这里打上断点进行调试
发现此时的数据已经加密了,所以往前找,如此循环
直到我们找到一个栈,里面的数据是未加密的,既然在这个时候数据还未加密,而在下一个调用栈中传出数据的时候加密了,那么就说明加密过程在下一个调用栈中,也就是u1.be2x中
接着我们进入到里面
var chF5K = u1x.be2x;
u1x.be2x = function(X2x, e1x) {
var i1x = {}
, e1x = NEJ.X({}, e1x)
, mk4o = X2x.indexOf("?");
if (window.GEnc && /(^|\.com)\/api/.test(X2x) && !(e1x.headers && e1x.headers[ex2x.zM8E] == ex2x.Io3x) && !e1x.noEnc) {
if (mk4o != -1) {
i1x = j1x.gW3x(X2x.substring(mk4o + 1));
X2x = X2x.substring(0, mk4o)
}
if (e1x.query) {
i1x = NEJ.X(i1x, j1x.fS3x(e1x.query) ? j1x.gW3x(e1x.query) : e1x.query)
}
if (e1x.data) {
i1x = NEJ.X(i1x, j1x.fS3x(e1x.data) ? j1x.gW3x(e1x.data) : e1x.data)
}
i1x["csrf_token"] = u1x.gS3x("__csrf");
X2x = X2x.replace("api", "weapi");
e1x.method = "post";
delete e1x.query;
var bKC1x = window.asrsea(JSON.stringify(i1x), bvh3x(["流泪", "强"]), bvh3x(Rf5k.md), bvh3x(["爱心", "女孩", "惊恐", "大笑"]));
e1x.data = j1x.cr2x({
params: bKC1x.encText,
encSecKey: bKC1x.encSecKey
})
}
var cdnHost = "y.music.163.com";
var apiHost = "interface.music.163.com";
if (location.host === cdnHost) {
X2x = X2x.replace(cdnHost, apiHost);
if (X2x.match(/^\/(we)?api/)) {
X2x = "//" + apiHost + X2x
}
e1x.cookie = true
}
chF5K(X2x, e1x)
}
这里的BA8s是未加密了的数据,那么说明在这之前完成了加密,这里的e1x已经加密了,我们看图发现在ex1.data中有加密数据,所以我们可以搜索ex1.data
在第22行我们看见了这个加密的地方,当然这不是我们的猜测,我们是打断点之后然后来看,发现是这个位置。这是一个找加密的方法,我们也可以通过搜索url来
例如这种url,我们可以搜索
**1.weapi/song/enhance/player/url/v1
2.song/enhance/player/url/v1
3.enhance/player/url/v1
*4.player/url/v1 ***
通过在搜索栏搜索,我们发现了
接着我们在这里打断点,然后重新调试,进入到这个调用方法里面
我们还是看到,在ex1.data后,数据就变成了加密的了,那么我们现在就能锁定加密位置了
** 那么问题来了,找到加密入口怎么办?**
1.扣他的js代码,在我的电脑上运行加密部分的js代码,实现相同的加密功能
2.通过读懂他的加密逻辑,用什么加密方法,用python来实现相同的功能
3.如果观察后发现对方用的第三方库加密,例如md5,rsa加密的情况,那么你就可以调用第三方库,实现相同的功能
npmjs.com这个网站可以找到你需要的第三方库 例如这个案例用到的npm i crypto-js 然后通过在js文件中用下面的语句来导入这个ku
var CryptoJS=require('crypto-js')
4.补环境(复制所有的js代码,把nodejs中没有的环境补上去,你可以理解为傻瓜操作,但是也会比较繁琐)
假设我用第一种方法,那么我现在的目的就是能够跑出那个加密逻辑,然后最后能得到加密后的数据(通过发送请求来验证) 因为这里的调试和扣代码过于复杂,不在此文细讲,主要是差什么补什么参数,最后运行出来,这个是主要逻辑 如果想要代码的,可以去guijialei-web/WangYiyun: 网易云爬虫项目... (github.com)这个网址,代码可以自行拿走。如果有什么问题,也可私信。