Netease Cloud Music API Analysis

本文旨在分析网易云音乐试听歌曲地址的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)