网易云params和encSecKey的获取

2023-10-30


要这两个参数有什么用呢, 屁用没有 ,往下看有惊喜

params和encSecKey有什么用

以《平凡之路》为例
在这里插入图片描述
我们通过分析Network变化发现了这样一个数据接口https://music.163.com/weapi/song/enhance/player/url/v1?csrf_token=
(后期事实证明它是通用的接口)
它的响应结果里有一个url,打开这个url,发现居然正好是我们想要的音频,于是我们非常高兴,开始尝试访问这个url
在这里插入图片描述

我们将他这个url复制进浏览器却发现没有任何返回
于是我们开始分析他的请求标头
在这里插入图片描述
在这里插入图片描述
发现这是一个POST请求而且携带有params和encSecKey这两个数据
我们瞬间明白,请求不成功是因为缺少了这两个关键参数
所以我们的核心目标就是找出这两个参数是如何获取的

软件准备

1.python及其对应的编辑器,推荐pycharm

需要安装requests和execjs这两个模块

2.发条js调试工具(我使用的是1.9版本)

js代码分析

定位生成位置

在这里插入图片描述
通过使用全局搜索方法搜索encSecKey,我们发现它以下三个js文件有出现,一个个点进去查看代码
在这里插入图片描述
发现在第一个js文件中有如下代码,params和encSecKey同时出现,我们就猜测这一段代码可能是生成这两个参数的代码。

var bUE3x = window.asrsea(JSON.stringify(i0x), bsl6f(["流泪", "强"]), bsl6f(WT9K.md), bsl6f(["爱心", "女孩", "惊恐", "大笑"]));
            e0x.data = j0x.cr1x({
                params: bUE3x.encText,
                encSecKey: bUE3x.encSecKey
            })

在这里插入图片描述

我们点击左侧设置断点,点击页面中的播放开始调试,发现程序果然在这里停下,而且显示的参数看起来就像是我们需要的参数(实际上就是)
于是我们开始分析这段代码
这两个参数是由bUE3x得到,而bUE3x 是由 window.asrsea 得到,我在代码中搜索window.asrsea发现仅在两处出现,另一处如下

!function() {
    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)
    }
    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
    }
    function e(a, b, d, e) {
        var f = {};
        return f.encText = c(a + e, b, d),
        f
    }
    window.asrsea = d,
    window.ecnonasr = e
}();

由此我们可以肯定params和encSecKey是在d这个函数中生成的且bUE3x就是d函数中返回的h对象
进一步发现d函数还调用了a,b,c三个函数
于是我们将上述代码的a,b,c,d四个函数复制放入js调试工具中,等待后续使用

分析传入参数

在这里插入图片描述
再回头分析传入d的四个参数,我们通过分析整体代码(分析过程省略)认为后三个参数是一个固定值,而第一个参数暂时无从得知,于是便在d函数中设置断点进行调试,记录下了后三个数据,同时意外的发现第一个参数似乎只和id有关
格式为"{\"ids\":\"["+id+"]\",\"level\":\"standard\",\"encodeType\":\"aac\",\"csrf_token\":\"\"}";
我们又发现id值正是上方网址中的id
所以至此我们解决了所有的传入d函数的参数的问题
我们将bUE3X处的代码改写成如下函数一并加入js调试工具中

function generate(id)
{
 x ="{\"ids\":\"["+id+"]\",\"level\":\"standard\",\"encodeType\":\"aac\",\"csrf_token\":\"\"}";
var bUE3x = d(x, "010001", "00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7","0CoJUm6Qyw8W8jud");
params = bUE3x.encText,
encSecKey = bUE3x.encSecKey
return params+","+encSecKey
}

代码初步调试

在这里插入图片描述

在js调试工具中点击加载代码,显示加载成功,说明没有语法错误
再在下方输入generate("1299844911")点击生成表达式
却显示 ‘CryptoJS’ 未定义,说明我们还得加入CryptoJS相关的代码

CryptoJS,setMaxDigits相关函数代码的添加

在这里插入图片描述
我们在代码中搜索CryptoJS,发现总共有13处,其中12045到12756行(不同人不同时间的这个代码可能有差别)之间的代码,包括了所有定义CryptoJS及其方法的内容,所以我们将这些全部复制放入js调试工具中
在这里插入图片描述
再次加载代码并计算表达式,发现 ‘CryptoJS’ 未定义的问题解决了,但是又出现了缺少对象setMaxDigits的问题在这里插入图片描述
同样的我们去搜索并且引入了这段函数,但是发现这个函数里还引用了其余一堆函数,十分的复杂。
但是我们发现这些使用的函数位置十分相近,基本都在12700到13200行之间,说以我们把这些函数和相关代码(RSAKeyPair函数到BarrettMu_powMod函数)全部复制放入js调试工具中
在这里插入图片描述
这次显示bitPerDigit未定义,于是我们再次查找搜索js代码,把如下定义bitPerDigit及其他东西的相关内容加入

var maxDigits, ZERO_ARRAY, bigZero, bigOne, dpl10, lr10, hexatrigesimalToChar, hexToChar, highBitMasks, lowBitMasks, biRadixBase = 2, biRadixBits = 16, bitsPerDigit = biRadixBits, biRadix = 65536, biHalfRadix = biRadix >>> 1, biRadixSquared = biRadix * biRadix, maxDigitVal = biRadix - 1, maxInteger = 9999999999999998;
setMaxDigits(20),
dpl10 = 15,
lr10 = biFromNumber(1e15),
hexatrigesimalToChar = new Array("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"),
hexToChar = new Array("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"),
highBitMasks = new Array(0,32768,49152,57344,61440,63488,64512,65024,65280,65408,65472,65504,65520,65528,65532,65534,65535),
lowBitMasks = new Array(0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535);

在这里插入图片描述
再次加载代码,发现成功生成了params和encSecKey这两个参数(由于和随机算法有关,每次生成的都不一样),终于成功了!!!
最后我将它导出命名为wangyi.js文件
wanyi.js下载地址:https://download.csdn.net/download/for_none/20814273

python 程序实现

调用js

调用js代码的方式如下

def getdata(id):#调用js代码,获取params和encSecKey
    node = execjs.get()
    ctx = node.compile(open('wangyi.js', encoding='utf-8').read())
    exp = 'generate(\"' + id + '\")'
    pwd = ctx.eval(exp).split(",")
    data = {'params': pwd[0], 'encSecKey': pwd[1]}
    print('生成参数为:')
    print(data)
    return data

我们已经得到了params和encSecKey接下来程序实现就比较简单了,有想要代码参考的直接找我就行

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

网易云params和encSecKey的获取 的相关文章

随机推荐

  • HelloSpring---第一个spring项目

    1 Spring概述 1 1 简介 Spring 春天 gt 给软件行业带来了春天 2002年 Rod Jahnson首次推出了Spring框架雏形interface21框架 2004年3月24日 Spring框架以interface21框
  • websocket php连接数,swoole websocket协程服务端 因为客户端连接数量过多崩溃

    问题描述 websocket 携程风格的服务端 同时300多个客户端连接的时候 PHP Fatal error Uncaught Error Maximum function nesting level of 256 reached abo
  • ARM汇编多寄存器寻址

    原文转自 http hi baidu com mugua item c43f37cc55a75d35ee4665e6 多寄存器和堆栈寻址的用法 多寄存器寻址 LDMIA LDMIB STMIA STMIB LDMDA LDMDB STMDA
  • 使用Python实现公司地址的(3-4级)标准化

    这个博客的目的是实现公司地址的模糊匹配与3 4级标准化 也可以迁移到房产信息 电话号码之类的字段上 本来的应用场景是反团伙欺诈以及失联客户的修复 大概的意思就是说多个相同公司的同事都在我公司借贷的欺诈可能性要高于其他客户 以及造假的房产信息
  • linux安装百度云盘

    之前window下一直使用绿色 你懂的 的百度云 但时切换到Ubuntu 系统之后 要下载好几个G的百度云资源却没有Linux版的客户端 网上又说使用bcloud 但是在16 04环境安装后总是登录不上 索性直接找了个浏览器插件下载 用起来
  • 股票API下单接口是怎样传入交易数据的?

    股票API下单接口传入交易数据的方法有四种 但主要使用的还是csvdatasetconfig和函数 不过基于当前的线程组或者请求创建CSV数据文件配置组件 如果这份数据只有这一个请求会用 那么就基于请求创建即可 如果这份数据会被这个线程组里
  • IDEA 快捷键等小技巧积累

    快捷键 全局搜索 Ctrl N 利用类名查找类文件 查看类继承关系 Ctrl H 查询某个符号被使用的所有地方 Alt F7 其他 自动导包 代码模板 code template
  • 【node.js】 Windows 下更新 node.js

    文章目录 一 node js 更新 一 查询 node js 版本 二 查询 node js 安装位置 三 官网下载安装包 四 安装到原位置 覆盖旧版本 二 npm 更新 一 查看版本 二 更新版本 三 yarn 更新 一 查看版本 二 更
  • (六)Java操作elasticSearch(2)

    Java操作elasticSearch 2 一 DSL查询文档 0 DSL 1 DSL查询分类 2 全文检索查询 3 精准查询 4 地理坐标查询 5 组合查询 二 搜索结果的处理 0 搜索结果处理整体语法 1 排序 2 分页 3 高亮 三
  • VMware Fusion 挂载物理机硬盘(整盘)

    以下操作前提 系统为 Mac OS OSX 安装了 VMware Fusion 实现原理 类似ESXI中的RDM映射 将物理硬盘映射到一个VM虚拟磁盘 可供VM选择的虚拟磁盘文件 首先查询本机硬盘情况 diskutil list 采用SCS
  • S50非接触式IC卡性能简介(M1)

    主要指标 容量为8K位EEPROM 分为16个扇区 每个扇区为4块 每块16个字节 以块为存取单位 每个扇区有独立的一组密码及访问控制 每张卡有唯一序列号 为32位 具有防冲突机制 支持多卡操作 无电源 自带天线 内含加密控制逻辑和通讯逻辑
  • chatgpt赋能python:Python主动抛出异常详解:了解如何正确地处理异常

    Python主动抛出异常详解 了解如何正确地处理异常 在Python开发中 异常处理是非常重要的一部分 可以使我们的程序更加健壮和可靠 然而并不是所有的错误都是由Python解释器捕获的 我们有时需要手动抛出异常 在本文中 我们将介绍Pyt
  • MPU6050 获取角度理论推导(二)---6轴融合算法

    接着上篇文章 https mp csdn net postedit 101777018 姿态角解算 互补滤波算法及理论推导 一般在程序中 姿态解算的方式有两种 一种是欧拉角法 一种是四元数法 这里不介绍欧拉角法 只介绍四元数法 互补滤波算法
  • makefile中关于all和.PHONY .cpp.o

    转自 http blog 163 com benben long blog static 199458243201110230292490 http blog csdn net wangxmin2005 article details 80
  • C 标准库 - 《locale.h》

    原文链接 https www runoob com cprogramming c standard library locale h html 简介 locale h 头文件定义了特定地域的设置 比如日期格式和货币符号 接下来我们将介绍一些
  • Java的Integer类

    1 用途 包装一个对象中的原始类型int的值 封装基本数据类型 int 将字符串转成基本数据类型 int 2 特点 类型为Integer的对象包含一个单一字段 其类型为int 此外 该类还提供了一些将int转换为String和String转
  • Git - 生成 SSH 公钥

    生成 SSH 公钥 如前所述 许多 Git 服务器都使用 SSH 公钥进行认证 为了向 Git 服务器提供 SSH 公钥 如果某系统用户尚未拥有密钥 必须事先为其生成一份 这个过程在所有操作系统上都是相似的 首先 你需要确认自己是否已经拥有
  • centos安装ruby

    可以使用 sudo yum install ruby 直接安装 但安装的是旧版本 不建议使用 1 去ruby官网直接下载安装包 http www ruby lang org en downloads 燃鹅 下载不了 那就借助 某雷吧 把安装
  • 查看linux是否已经安装了apache

    查看linux是否已经安装了apache 解决方法 查看linux是否已经安装了apache服务 可以通过执行 http www yayihouse com yayishuwu chapter 1800
  • 网易云params和encSecKey的获取

    网易云params和encSecKey的获取 params和encSecKey有什么用 软件准备 1 python及其对应的编辑器 推荐pycharm 2 发条js调试工具 我使用的是1 9版本 js代码分析 定位生成位置 分析传入参数 代