美文网首页
Netease Cloud Music API Analysis

Netease Cloud Music API Analysis

作者: W_I_S_E | 来源:发表于2017-03-23 23:09 被阅读0次

    本文旨在分析网易云音乐试听歌曲地址的API,参考文章网易云音乐登录API(2016.04) Python3版以及如何爬网易云音乐的评论数?。虽然这两篇分别是登录篇和评论篇,但大同小异,区别在于bl参数不同

    1. 首先分析请求,可以看到关键点在于params和encSecKey这两个参数的获取
    1. 将initiator的JS文件复制到WebStorm中,格式化,查找params和encSecKey,如下:
     var bua = window.asrsea(JSON.stringify(bl), bbZ(["流泪", "强"]), bbZ(cnb.md), bbZ(["爱心", "女孩", "惊恐", "大笑"]));
     bf.data = bm.eX({params: bua.encText, encSecKey: bua.encSecKey})
    

    3.利用知乎参考回答中的方法,可以在控制台输出中看到:

    bbZ(["流泪", "强"]) = 010001
    bbZ(cnb.md) = 00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7
    bbZ(["爱心", "女孩", "惊恐", "大笑"]) = 0CoJUm6Qyw8W8jud
    bl = 
    br = 128000(码率)
    csrf_token = "18d55720a342bf3eae987e7ca40a5ed4"
    ids = "[421423806]"(歌曲ID)
    
    1. 那么参数问题都搞定了,开始搞window.asrsea,可以发现如下代码:
    window.asrsea = d
    
        function d(d, e, f, g) {
            var h = {}, i = a(16);
            return h.encText = b(d, g), h.encText = b(h.encText, i), h.encSecKey = c(i, e, f), h
        }
    

    然后再去追查函数a,b,c的定义,如下:

       function a(a) {
            var d, e, b = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", c = "";
            for (d = 0; a > d; d += 1)e = Math.random() * b.length, e = Math.floor(e), c += b.charAt(e);
            return c
        }
    
        function b(a, b) {
            var c = CryptoJS.enc.Utf8.parse(b), d = CryptoJS.enc.Utf8.parse("0102030405060708"), e = CryptoJS.enc.Utf8.parse(a), f = CryptoJS.AES.encrypt(e, c, {
                iv: d,
                mode: CryptoJS.mode.CBC
            });
            return f.toString()
        }
    
        function c(a, b, c) {
            var d, e;
            return setMaxDigits(131), d = new RSAKeyPair(b, "", c), e = encryptedString(d, a)
        }
    

    函数a的作用是生成长度为16的随机字符串
    函数b的作用是AES加密(CBC,padding = pkcs7)
    函数c的作用是RSA加密(暂且没弄懂)

    1. 根据以上理出来的思路,写出加密代码得到两个加密数据即可。

    相关文章

      网友评论

          本文标题:Netease Cloud Music API Analysis

          本文链接:https://www.haomeiwen.com/subject/vxitottx.html