网易云逆向找断点

184 阅读3分钟

首先找到数据包,然后进入调用栈去查看,从上往下慢慢找 image.png

接着在这里打上断点进行调试

image.png

发现此时的数据已经加密了,所以往前找,如此循环 image.png

直到我们找到一个栈,里面的数据是未加密的,既然在这个时候数据还未加密,而在下一个调用栈中传出数据的时候加密了,那么就说明加密过程在下一个调用栈中,也就是u1.be2x中

image.png

接着我们进入到里面

         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

image.png

在第22行我们看见了这个加密的地方,当然这不是我们的猜测,我们是打断点之后然后来看,发现是这个位置。这是一个找加密的方法,我们也可以通过搜索url来

image.png 例如这种url,我们可以搜索

**1.weapi/song/enhance/player/url/v1
2.song/enhance/player/url/v1
3.enhance/player/url/v1
*4.player/url/v1 ***

通过在搜索栏搜索,我们发现了

image.png 接着我们在这里打断点,然后重新调试,进入到这个调用方法里面

image.png 我们还是看到,在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)这个网址,代码可以自行拿走。如果有什么问题,也可私信。