【爬虫逆向案例】某易云音乐(评论)js逆向—— params、encSecKey解密

本文主要是介绍【爬虫逆向案例】某易云音乐(评论)js逆向—— params、encSecKey解密,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

声明:本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢!

【爬虫逆向案例】某易云音乐(评论)js逆向—— params、encSecKey解密

  • 1、前言
  • 2、行动
  • 3、源码
  • 4、号外

1、前言

今天逆向的这个网站 某易云音乐 歌曲的评论列表

在这里插入图片描述

而要拿到评论列表爬虫发送的表单需要两个参数 params 和 encSecKey。这两个玩意是加密的,所以重点就是怎么搞定这两个参数。

在这里插入图片描述

2、行动

话不多说,直接分析。

首先我们进入到网易云,随便进入某一首歌详情页。通过抓包分析,很轻松的找到了每一首音乐的评论的位置,现在只需要访问 https://music.163.com/weapi/comment/resource/comments/get?csrf_token= 就可以了。

可以看到这是一个post请求,而且携带的这两个参数这么大一坨,不用多想,绝对是个加密参数。但是大家不要慌,让我们全局搜索一下(跟栈也可以,但我觉得这里直接搜索要快一点),仔细分析一波。

通过搜索任意一个参数可以快速找到加密的位置,可以看到

在这里插入图片描述

接下来就是打断点分析。

首先可以确定的是 params= bVe7X.encText,

encSecKey=bVe7X.encSecKey

而 bVe7X 又等于 window.asrsea 这个函数,观察可知这个函数是需要四个参数的,

在这里插入图片描述

在控制台中打印一下四个参数,分别是:

在这里插入图片描述

经过多次测试,发现后面三个参数是不变的(如下图),而第一个参数也只有 rid、threadId、cursor 会变,rid 和 threadId 还是一样的,而且是 R_SO_4_ 加上歌曲的 id,cursor 是毫秒的时间戳,那这就简单了。

在这里插入图片描述

好了,四个参数已经搞定,接下来就是关键了,进入 window.asrsea 函数

在这里插入图片描述

可以看到,d 就是 window.asrsea 这个函数。要传入的四个参数我们已经知道了。

不管那么多,直接复制到 js 文件里看看结果。

为了避免与后面其他的参数起冲突,这里我就改了下名字,然后运行。

在这里插入图片描述

意料之中,报错了。

在这里插入图片描述

说简单也简单,报错了之后,接下来就是缺什么补什么,这里就大家去 js 页面找自己慢慢去补了哈。

在这里插入图片描述

另外,当补到b函数的时候,会说 CryptoJS is not defined,仔细一看原来 b 函数里面有个 AES 加密,能调库就调库,这里就npm install crypto-js,然后导入就可以了

在这里插入图片描述

后面的就没有什么大问题了。补完函数后(大概有34个函数左右,400行左右的 js 代码),我们也是顺利的拿到了想要的东西。

在这里插入图片描述

在这里插入图片描述

虽然过程艰辛,很累的,一味以为拿错了,但结果是好的。接下来就是写代码拿评论了,这里我用的是 execjs 库来执行 js 代码,完整 Python 代码如下:

import json
import timeimport execjs
import requests
from fake_useragent import UserAgentdef get_argument(music_id, page):with open('./comments.js', 'r', encoding='utf-8') as f:time_now = int(round(time.time() * 1000))# 第一个 {} 符号被误识别为占位符,导致后面的键值对无法正确替换,可以使用双大括号 {{}} 来表示字面意义上的大括号aa = '{{"rid":"R_SO_4_{}","threadId":"R_SO_4_{}","pageNo":"{}","pageSize":"20","cursor":"{}","offset":"0","orderType":"1","csrf_token":""}}'.format(music_id, music_id, page, time_now)bb = '010001'cc = '00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7'dd = '0CoJUm6Qyw8W8jud'argument_data = execjs.compile(f.read()).call('d', aa, bb, cc, dd)params = argument_data['encText']encSecKey = argument_data['encSecKey']return params, encSecKeydef get_comment(params, encSecKey):url = 'https://music.163.com/weapi/comment/resource/comments/get?csrf_token='header = {"Origin": "https://music.163.com","Pragma": "no-cache","Referer": "https://music.163.com/song?id=65766","Sec-Ch-Ua": "\"Not/A)Brand\";v=\"99\", \"Google Chrome\";v=\"115\", \"Chromium\";v=\"115\"","Sec-Ch-Ua-Mobile": "?0","Sec-Ch-Ua-Platform": "\"Windows\"","Sec-Fetch-Dest": "empty","Sec-Fetch-Mode": "cors","Sec-Fetch-Site": "same-origin","User-Agent": UserAgent().random}data = {"params": f"{params}","encSecKey": f"{encSecKey}"}response = requests.post(url=url, headers=header, data=data)data = response.textreturn datadef parse_data(data):json_data = json.loads(data)comments = json_data['data']['comments']print('采集评论数据如下:')for i in comments:comment = i['content']print(comment)if __name__ == '__main__':while True:music_id = input('请输入歌曲id:')page = input('请输入要采集第几页评论:')params, encSecKey = get_argument(music_id, page)response_data = get_comment(params, encSecKey)parse_data(response_data)is_continue = input('是否继续采集(y/n):')if is_continue == 'n':break

我这里是封装成一次采集一页评论,如果需要采集全部评论的需求,自己修改一下就可以了

3、源码

Github:网易云音乐PC端逆向
CSDN:网易云音乐PC端 js 逆向资源

4、号外

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “👍点赞” “✍️评论” “💙收藏” 一键三连哦!
【👇🏻👇🏻👇🏻关注我| 获取更多源码 | 定制源码】大学生毕设模板、期末大作业模板 、Echarts大数据可视化、爬虫逆向等! 「一起探讨 ,互相学习」!(vx:python812146)
以上内容技术相关问题😈欢迎一起交流学习👇🏻👇🏻👇🏻🔥

这篇关于【爬虫逆向案例】某易云音乐(评论)js逆向—— params、encSecKey解密的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/309231

相关文章

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

客户案例:安全海外中继助力知名家电企业化解海外通邮困境

1、客户背景 广东格兰仕集团有限公司(以下简称“格兰仕”),成立于1978年,是中国家电行业的领军企业之一。作为全球最大的微波炉生产基地,格兰仕拥有多项国际领先的家电制造技术,连续多年位列中国家电出口前列。格兰仕不仅注重业务的全球拓展,更重视业务流程的高效与顺畅,以确保在国际舞台上的竞争力。 2、需求痛点 随着格兰仕全球化战略的深入实施,其海外业务快速增长,电子邮件成为了关键的沟通工具。

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件

EasyPlayer.js网页H5 Web js播放器能力合集

最近遇到一个需求,要求做一款播放器,发现能力上跟EasyPlayer.js基本一致,满足要求: 需求 功性能 分类 需求描述 功能 预览 分屏模式 单分屏(单屏/全屏) 多分屏(2*2) 多分屏(3*3) 多分屏(4*4) 播放控制 播放(单个或全部) 暂停(暂停时展示最后一帧画面) 停止(单个或全部) 声音控制(开关/音量调节) 主辅码流切换 辅助功能 屏