网易云接口参数加密分析

本文详细解析了网络数据加密的过程,从查看接口和调用方法开始,逐步揭露了加密参数的来源和加密方法。通过分析加密参数的生成、何时加密以及加密过程,揭示了AES和RSA等加密技术在实际应用中的使用细节,为理解网络数据安全提供了深入洞察。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.查看接口

通过xhr记录排查找到该数据由此接口返回
在这里插入图片描述

2.查看调用

在这里插入图片描述
第一个记录点进去可知最终由此方法发送请求
在这里插入图片描述
直接打上断点刷新页面
在这里插入图片描述
查看调用参数发现并不是热评接口,直接放行本次调用。
在这里插入图片描述
经过几次放行,发现热评接口。
在这里插入图片描述
查看请求参数发现参数被加密
在这里插入图片描述

3.何时加密

查看调用栈,寻找未被加密前是什么参数。
在这里插入图片描述
当点击此调用栈发现加密前参数
在这里插入图片描述
向上点击查看,当进入此调用栈时参数被加密
在这里插入图片描述
可以确定参数在此方法处理后被加密,将i7b这个参数打上断点刷新页面
在这里插入图片描述
第一次查看接口并不是热评接口
在这里插入图片描述
放行直到热评接口出现
在这里插入图片描述
由图可知此时的data没有被加密
在这里插入图片描述
点击向下执行,直到发现参数被加密
在这里插入图片描述
由图可知这里的bWf7Y变量就是最终加密的参数,同时也能看出它是调用了asrsea这个方法后被加密了
在这里插入图片描述

4.加密过程

由上面可知加密使用的就是window.asrsea,直接搜索这个方法发现它指向了d方法
在这里插入图片描述
在这里插入图片描述
可以看到定义的d方法接收了4个参数分别是:d, e, f, g,查看调用所用到的参数
在这里插入图片描述
参数d就是将真实的参数序列化成字符串
参数e 调用bsG0x方法将返回值做为参数
搜索bsG0x方法查看定义
在这里插入图片描述
可以看到它返回一个字符串,因为加密调用bsG0x方法传入的是固定参数,此处可以直接在控制台执行这个方法,这个方法不管执行多少次都返回"010001"
在这里插入图片描述
所以e参数即"010001"
在看f它也是使用方法返回值做为参数,直接执行它。
在这里插入图片描述
由此可知f就是"00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7"

因为它传入也是一个固定值,所以无论执行几次返回都是一样的值
在这里插入图片描述
最后一个参数g不用看直接执行
在这里插入图片描述
由上面步骤可得4个参数值
d:序列化真实的参数这个参数不是固定值
e:"010001"
f:"00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7"
g:"0CoJUm6Qyw8W8jud"

现在我们知道了d方法所需参数,现在回过头看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
}

d方法先定义一个空对象和i变量,i变量使用a方法返回值做为值(传入固定值16),查看a方法的定义

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
}

a方法主要做的就是返回16位随机字符串,for循环中的e变量就是生成随机数

Math.random返回介于 0(包含) ~ 1(不包含) 之间的一个随机数

然后对e取最大整数

Math.floor返回小于等于x的最大整数。

c就是拼接每次随机的字符,现在继续看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
}

可以看到d方法最终返回的就是h变量,先在h对象定义encText属性,第一次encText 使用b方法返回值做为值。

先看c方法,b方法后面说

function c(a, b, c) {
    var d, e;
    return setMaxDigits(131),
    d = new RSAKeyPair(b,"",c),
    e = encryptedString(d, a)
}

从d方法的调用就可以知道,c方法的a,b,c参数除了b和c是固定值,只有a每次不一样。
里面的setMaxDigits和encryptedString来自rsa插件,这里内部不做详解
打上断点查看a的返回值
在这里插入图片描述
本次随机了16位字符:OzxSbrV3WrPa6Qf7

现在看d方法中的h.encTex它第一次使用b方法传入d和g做为参数

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()
}

a参数不固定就是序列化请求参数字符串后结果,b参数是固定值,d里面第一次给定的是g也就是

"0CoJUm6Qyw8W8jud"

b方法做的就是使用AES加密最后返回一个字符串,这里关于具体的AES加密算法和CryptoJS不做详解
这里的iv就是指加密偏移量
mode指的的是加密模式,这里使用的CBC

第二次还是使用b方法传入第一次加密结果和16位随机字符串
最后在h对象加入encSecKey属性,值来自c方法。
最终加密结果即h对象

基于Node.js,提供网易云所有API接口数据,包括:登录,获取用户信息 , 歌单,收藏,mv, dj 数量 获取用户歌单 获取用户电台 获取用户关注列表 获取用户粉丝列表 获取用户动态 获取用户播放记录 获取精品歌单 获取歌单详情 搜索 搜索建议 获取歌词 歌曲评论 收藏单曲到歌单 专辑评论 歌单评论 mv 评论 电台节目评论 banner 获取歌曲详情 获取专辑内容 获取歌手单曲 获取歌手 mv 获取歌手专辑 获取歌手描述 获取相似歌手 获取相似歌单 相似 mv 获取相似音乐 获取最近 5 个听了这首歌的用户 获取每日推荐歌单 获取每日推荐歌曲 私人 FM 签到 喜欢音乐 垃圾桶 歌单 ( 网友精选碟 ) 新碟上架 热门歌手 最新 mv 推荐 mv 推荐歌单 推荐新音乐 推荐电台 推荐节目 独家放送 mv 排行 获取 mv 数据 播放 mv/视频 排行榜 歌手榜 云盘 电台 - 推荐 电台 - 分类 电台 - 分类推荐 电台 - 订阅 电台 - 详情 电台 - 节目 给评论点赞 获取动态 热搜列表(简略) 发送私信 发送私信歌单 新建歌单 收藏/取消收藏歌单 歌单分类 收藏的歌手列表 订阅的电台列表 相关歌单推荐 付费精选接口 音乐是否可用检查接口 登录状态 获取视频播放地址 发送/删除评论 热门评论 视频评论 退出登录 所有榜单 所有榜单内容摘要 收藏视频 收藏 MV 视频详情 相关视频 关注用户 新歌速递 喜欢音乐列表(无序) 收藏的 MV 列表 获取最新专辑 听歌打卡 获取视频标签下的视频 已收藏专辑列表 获取动态评论 歌单收藏者列表 云盘歌曲删除 热门话题 电台 - 推荐类型 电台 - 非热门类型 电台 - 今日优选 心动模式/智能播放 转发动态 删除动态 分享歌曲、歌单、mv、电台、电台节目到动态 通知-私信 通知-评论 通知-@我 通知-通知 设置 云盘数据详情 私信内容 我的数字专辑 batch批量请求接口 获取视频标签列表 全部mv 网易出品mv 收藏/取消收藏专辑 专辑动态信息 热搜列表(详细) 更换绑定手机 检测手机号码是否已注册 初始化昵称 更新歌单描述 更新歌单名 更新歌单标签 默认搜索关键词 删除歌单 电台banner 用户电台 热门电台 电台 - 节目详情 电台 - 节目榜 电台 - 新晋电台榜/热门电台榜 类别热门电台 云村热评 电台24小时节目榜 电台24小时主播榜 电台最热主播榜 电台主播新人榜 电台付费精品榜 歌手热门50首歌曲
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值