网易云音乐JS逆向分析

文章目录

      • 页面分析
      • 抓包分析
      • JS逆向分析
      • 代码编写

页面分析

先来分析一下页面
在这里插入图片描述

当我们点击播放按钮的时候,音乐开始播放。实际上这个逻辑背后的原理是这个按钮后面对应的是一个url,这个地址是通过ajax来进行局部刷新的。

所以我们可以通过抓包工具,来看看点点击播放按钮的时候到底发送了哪些网络请求。我们逐个去分析这些请求,就可以从这些请求中拿到我们想要的数据了。

那么我们想要下载这个音乐其实只需要三步:

  1. 分析网络请求,找到音乐下载地址
  2. 分析url请求的参数,获取来源
  3. 编写代码,下载音乐

抓包分析

在这里插入图片描述

点击播放,这里产生了一堆数据表,这里我们需要逐个去分析。
在这里插入图片描述

找到这个请求,返回的数据里面有一个url

http://m701.music.126.net/20240105104834/ad9643baf3be3fea26ec3af8fe02b556/jdyyaac/obj/w5rDlsOJwrLDjj7CmsOj/32048585194/3ae6/9029/4439/a1ee98567f8ef9469319a85700a24486.m4a

直接把这个url放到浏览器里

在这里插入图片描述

发现就是这个音乐本身,那么这个url就是我们要的音频的下载地址。

JS逆向分析

接着我们来分析这个请求
在这里插入图片描述

首先URL是这一个

https://music.163.com/weapi/song/enhance/player/url/v1?csrf_token=

直接构造就可以了,那么怎么知道下载的是哪一首歌曲呢,这个体现在参数里
在这里插入图片描述

这里一共提交了两个参数,params和encSecKey,那么这两个参数从哪来的就是我们要进行分析的。
在这里插入图片描述

我们点开Initiator,随便选一个调用堆栈往上跟
在这里插入图片描述

这里gA4E.data是我们要追踪的加密字段
在这里插入图片描述

而这个值来源于当前的参数,所以我们要继续往上找调用堆栈
在这里插入图片描述

找到上一层,发现还是来源于参数
在这里插入图片描述

一直往上回溯,直到找到这个位置,这里就是他的加密逻辑

var bVi9Z = window.asrsea(JSON.stringify(i3x), bsu5z(["流泪", "强"]), bsu5z(Xo5t.md), bsu5z(["爱心", "女孩", "惊恐", "大笑"]));
            e3x.data = j3x.cr3x({
                params: bVi9Z.encText,
                encSecKey: bVi9Z.encSecKey
            })

params字段和encSecKey字段均来源于bVi9Z,那么关键就在于分析出asrsea函数和他的几个参数

函数代码如下:

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

这是第一波扣的代码。

在这里插入图片描述

第二波,把Crypto加密库扣下来
在这里插入图片描述

第三波,把全局函数扣下来

在这里插入图片描述

然后就拿到运行结果了,
在这里插入图片描述

也可以通过补全第三方库的方式,来解决这个问题。

接下来需要搞定加密函数的参数

var bVi9Z = window.asrsea(JSON.stringify(i3x), bsu5z(["流泪", "强"]), bsu5z(Xo5t.md), bsu5z(["爱心", "女孩", "惊恐", "大笑"]));

这四个参数都是固定的

在这里插入图片描述

我们可以直接把结果拿下来,放到函数里面。

如果你想要其他的数据,比如评论,获取评论的接口也是用的这两个参数,只不过传入的参数不一样,那就得去扣bsu5z函数,我这里是扣不动了。

代码编写

在这里插入图片描述

最后 写代码发请求,然后把音乐内容下载保存即可。

在这里插入图片描述

另外,评论的接口,也是用的这两个参数,需要扣,只不过传入的加密参数不一样,各位有兴趣可以自行分析。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/343018.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

防御保护----信息安全

网络安全概述 信息安全:防止任何对数据进行未授权访问的措施,或者防止造成信息有意无意泄露、破坏、丢失等问题的发生,让数据处于远离危险、免于威胁的状态和特性。 网络安全:计算机网络环境下的信息安全。 网络安全背景 网络空间…

Open3D 与 Point Cloud 处理

点云基础3D数据结构点云采集方法点云处理框架点云操作 Open3D基础操作 点云基础 3D数据结构 点云(Point Cloud): 点云是由一组离散的点构成的三维数据集合,每个点都包含了坐标信息 (x, y, z) 、颜色 (RGB)、类别 (cls)、强度值等…

宝塔面板部署MySQL并结合内网穿透实现公网远程访问本地数据库

文章目录 前言1.Mysql服务安装2.创建数据库3.安装cpolar3.2 创建HTTP隧道 4.远程连接5.固定TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址 前言 宝塔面板的简易操作性,使得运维难度降低,简化了Linux命令行进行繁琐的配置,下面简单几步,通过宝塔面板cp…

梳理Langchain-Chatchat知识库API接口

一.Langchain-Chatchat 知识库管理 1.Langchain-Chatchat 对话和知识库管理界面 Langchain-Chatchat v0.28 完整的界面截图,如下所示: 2.知识库中源文件和向量库 知识库 test 中源文件和向量库的位置,如下所示: 3.知识库表结构 k…

超融合基础架构理解

1 超融合基础架构 1.1 定义 超融合基础架构(Hyper-converged infrastructure,缩写为HCI),是一种集成了存储设备及虚拟运算的信息基础架构框架。在这样的架构环境中,同一厂商的服务器与存储等硬件单元,搭配…

比较有创意的网站

有创意的网站通常展示了独特的设计、交互或内容。以下是一些备受赞誉的有创意的网站,你可以参考: Awwwards: Awwwards 是一个评选并展示全球最优秀网站的平台。你可以在这里找到很多有创意的网站设计。 Awwwards CSS Design Awards: 类似于Awwwards&…

若依分页失败,由于对数据二次处理导致total只有十条

在使用若依框架的过程中,如果是查询结果数据直接返回,那么其自带的分页插件可以正常返回数据以及总条数,但若是对数据进行了其他二次处理,再返回就会出现异常,即无论查询了多少条,total都只会显示10&#x…

实现纯Web语音视频聊天和桌面分享(附源码,PC端+移动端)

在网页里实现文字聊天是比较容易的,但若要实现视频聊天,就比较麻烦了。本文将实现一个纯Web版的视频聊天和桌面分享的Demo,可直接在浏览器中运行,不需要安装任何插件。 一. 主要功能及支持平台 1.本Demo的主要功能有 &#xff…

CSAPP fall2015 深入理解计算机系统 Cache lab详解

Cache Lab cache lab 缓存实验 代码下载 从CSAPP上面下载对应的lab代码 http://csapp.cs.cmu.edu/3e/labs.html 环境准备 需要安装 valgrind。可以参考文章Valgrind centos。 安装好以后执行valgrind --version可以看到版本号。 Cache simulator cache simulator not a …

苹果眼镜(Vision Pro)的开发者指南(5)-主要工具

主要工具有:Xcode、Reality Composer Pro、Unity 第一部分:【用Xcode进行开发】 开始使用Xcode为visionOS进行开发。将向你展示如何在你现有的项目中添加一个visionOS目标,或者构建一个全新的应用,在Xcode预览中创建原型,以及从Reality Composer Pro中导入内容。还将分享…

c++:string相关的oj题(415. 字符串相加、125. 验证回文串、541. 反转字符串 II、557. 反转字符串中的单词 III)

文章目录 1. 415. 字符串相加题目详情代码1思路1代码2思路2 2. 125. 验证回文串题目详情代码1(按照要求修改后放到新string里)思路1代码2(利用双指针/索引)思路2 3. 541. 反转字符串 II题目详情代码1思路1 4. 557. 反转字符串中的单词 III题目详情代码1&…

[足式机器人]Part3 机构运动学与动力学分析与建模 Ch00-3(3) 刚体的位形 Configuration of Rigid Body

本文仅供学习使用,总结很多本现有讲述运动学或动力学书籍后的总结,从矢量的角度进行分析,方法比较传统,但更易理解,并且现有的看似抽象方法,两者本质上并无不同。 2024年底本人学位论文发表后方可摘抄 若有…

机器学习笔记:地理加权回归(GWR)

1 传统的线性回归 机器学习笔记:线性回归_线性回归的读书笔记-CSDN博客 最优的β为: 2 地理加权回归(GWR) 2.1 模型概述 地理加权回归(Geographically Weighted Regression,GWR)是传统回归分…

【算法小记】——机器学习中的概率论和线性代数,附线性回归matlab例程

内容包含笔者个人理解,如果错误欢迎评论私信告诉我 线性回归matlab部分参考了up主DR_CAN博士的课程 机器学习与概率论 在回归拟合数据时,根据拟合对象,可以把分类问题视为一种简答的逻辑回归。在逻辑回归中算法不去拟合一段数据而是判断输入…

5G-A:“繁花”盛开在2024

2019年,我国正式发牌5G,开启5G商用新时代。通信技术十年一代,五年过去了,5G是否要进入“半代更迭”阶段? 2024年被视为5G-A商用元年,是5G走向6G的关键一跃。5G-A以R18为演进起点,在连接速率、网…

【Linux配置yum源以及基本yum指令】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、yum是什么? 二、什么是软件包? 三、三种安装软件包的方式 四、yum的相关操作 4.1、搜索软件 4.2、安装软件 4.3、卸载软件 4.4、那…

龟兔再跑

欢迎来到程序小院 龟兔再跑 玩法&#xff1a;乌龟跳绳&#xff0c;点击鼠标左键乌龟跳跃&#xff0c;两只乌龟一直不停的甩绳子&#xff0c;另外一只乌龟从中跳过&#xff0c;赶快去跳绳吧^^。开始游戏https://www.ormcc.com/play/gameStart/255 html <div class"mai…

vue中keep-alive的理解和使用

简要说明&#xff1a; keep-alive&#xff1a;保留状态。在项目中我们经常将keep-alive和router-view结合使用&#xff0c;实现切换路由后仍然保留之前的路由页面的状态&#xff0c;路由切换回来后不会 重新初始化&#xff0c;而是保留之前的状态。但keep-alive是vue本身提供的…

七八分钟快速用k8s部署springboot前后端分离项目

前置依赖 k8s集群&#xff0c;如果没有安装&#xff0c;请先安装 kubectl &#xff0c;客户端部署需要依赖 应用镜像构建 应用镜像构建不用自己去执行&#xff0c;相关镜像已经推送到docker hub 仓库&#xff0c;如果要了解过程和细节&#xff0c;可以看一下&#xff0c;否…