网易云音乐params和encSecKey参数的生成
工具:谷歌浏览器,reres浏览器插件,python3,requests_html库
关键词:js逆向,js的AES加密,爬虫
1.首先打开网易云音乐的歌单

进入一个能听到音乐的页面搜索音乐文件,因为在线听歌要求加载文件速度快,体积小,所以候选音频文件有:mp3, m4a, acc。一番操作果然找到json格式的文件,找到音乐文件地址,接下来查看请求参数

2.经过一些列的请求发现,只有两个参数是全局的关键,params和encSecKey,搜索数值未发现携带参数的文件,疑似由js动态生成

3.查找生成此参数的js文件,查看此次请求的来源,找到可以文件,点击进入,再次搜索关键key

果然找到

4.分析js代码,发现关键变量是:bZ7ex(名肯定也是会变),由asrea函数生成,搜索发现这个函数就是d函数
分析变量:此函数的后3位变量肯定是不变值,都是固定的字符,关键找第一个参数如何生成

经过仔细观察params和encSecKey参数由a,b,c,d,e,这几个关键函数生成,看见for循环断点调试就很麻烦了,直接用reres插件替换成本地文件,在本地调试

5.被替换文件:https://s3.music.126.net/web/s/core_d889eff6d44685f138aeb17febf426d6.js(过段时间会变化)
替换文件:http://127.0.0.1/js/core_d889eff6d44685f138aeb17febf426d6.js
源代码复制粘贴到本地服务器文件

6.控制台输出参数,观察值,分析,d中的i由a函数生成,

a函数就是在b中找了16位随机字符,随机即确定,直接写死,可以正常运行,大会进行下一项

打印下看看是什么样

可以看到所有的也包括其他歌曲的encSecKey值也一样,encSecKey也为死值

测试发现只有这个params值可用,d函数d值为固定json格式并携带有歌曲id,也就是asrea函数的第一个参数也找到了

接下来找b函数,b函数一眼看出来就是AES加密(靠多年行走江湖的经验)参考这篇文章:https://blog.csdn.net/sinat_17775997/article/details/88814358

b函数说明

function b(a, b) {console.log("进入b函数 => ");console.log("b中a => " + a);console.log("b中b => " + b);var c = CryptoJS.enc.Utf8.parse(b);  // 十六位十六进制数作为秘钥 第一次是g(0CoJUm6Qyw8W8jud) 第二财是a循环出的i 现在写死:WCwzSK4ip8uBjv7Lconsole.log("b中由b生成的c => ");console.log(c);var d = CryptoJS.enc.Utf8.parse("0102030405060708");  // 十六位十六进制数作为秘钥偏移量console.log("b中生成的d => ");console.log(d);var e = CryptoJS.enc.Utf8.parse(a), f = CryptoJS.AES.encrypt(e, c, {    // e为密文, c为秘钥(固定值), AES加密iv: d,     // AES加密  iv 向量(固定值:0102030405060708)mode: CryptoJS.mode.CBC    //  加密模式,固定写法});// 两次加密出来f,搞定var bbbbbb = f.toString();console.log("这是b里的bbbbbb => ");console.log(bbbbbb);return bbbbbb}

d函数说明

function d(d, e, f, g) {console.log("进入d函数 =>");console.log("d中d =>" + d);console.log("d中e =>" + e);console.log("d中f =>" + f);console.log("d中g =>" + g);var h = {}, i = a(16);var ccc = c(i, e, f);   // 死值console.log("d中ccc =>" + ccc);return h.encText = b(d, g),   //值由  {"ids":"[1495845552]","level":"standard","encodeType":"aac","csrf_token":""}  0CoJUm6Qyw8W8jud  生成h.encText = b(h.encText, i),  //值由  新生成的b(d, g)  WCwzSK4ip8uBjv7L   生成h.encSecKey = ccc,h}

c函数就是生成encSecKey的是个死值
至此参数都ok了
加密时遇到了一个坑,aes加密填充使用的是pkcs7填充,代码参考的:https://blog.csdn.net/yt_xy/article/details/108863258
python实现代码:

from Cryptodome.Cipher import AES
import base64
import time
import jsonclass Encrypt:def __init__(self, key, iv):self.key = key.encode('utf-8')self.iv = iv.encode('utf-8')# @staticmethoddef pkcs7padding(self, text):"""明文使用PKCS7填充 """padding_size = len(text.encode('utf-8'))print("明文长度: ")print(padding_size)padding = 16 - padding_size % 16print(padding)padding_text = chr(padding) * paddingprint(chr(padding))return text + padding_textdef aes_encrypt(self, content):""" AES加密 """cipher = AES.new(self.key, AES.MODE_CBC, self.iv)# 处理明文content_padding = self.pkcs7padding(content)print(content_padding)# 加密encrypt_bytes = cipher.encrypt(content_padding.encode('utf-8'))# 重新编码result = str(base64.b64encode(encrypt_bytes), encoding='utf-8')return resultif __name__ == '__main__':key_one = '0CoJUm6Qyw8W8jud'key_two = 'WCwzSK4ip8uBjv7L'iv = '0102030405060708'# one_text = '{"ids":"[1316563155]","level":"standard","encodeType":"aac","csrf_token":""}'one_text = '{"ids":"[247579]","level":"standard","encodeType":"aac","csrf_token":""}'  # 固定格式的jsonone_text_e = Encrypt(key=key_one, iv=iv)two_text = one_text_e.aes_encrypt(one_text)two_text_e = Encrypt(key=key_two, iv=iv)two_text = two_text_e.aes_encrypt(two_text)print(two_text)

网易云音乐获取音频链接(爬虫)破解params参数相关推荐

  1. 网易云音乐获取播放链接

    原链接:获取id https://music.163.com/song?id=29984255&userid=267688655 mp3链接: http://music.163.com/son ...

  2. scrapy爬取网易云音乐的MP3链接

    最近遇到需要从网易云音乐爬取MP3的url的需求,看了很多github以及博客内容,都是直接拿着参数请求抓包得到的url,网上的一些api还能用,但是很多都已经不能用了,而且能用的那些也里面的MP3u ...

  3. 网易云音乐听歌量爬虫(免登陆版)

    最近学习了一下爬虫的原理和基本的思路, 并且利用selenium + Python + Chrome 进行了一系列的爬虫. 最开始的想法是, 想每天爬取自己网易云音乐的一些数据, 比如每天听歌量, 之 ...

  4. python网络爬虫网易云音乐下载_python网络爬虫爬取网易云音乐

    #爬取网易云音乐 url="https://music.163.com/discover/toplist" #歌单连接地址 url2 = 'http://music.163.com ...

  5. 网易云音乐App 音频会话管理解析

    点击"开发者技术前线",选择"星标????" 让一部分开发者看到未来 导读:WebRTC(Web Real-Time Communication)是一个支持网页 ...

  6. 网易云音乐插入外部链接

    <iframe frameborder="no" border="0" marginwidth="0" marginheight=&q ...

  7. 网易云音乐python爬虫(Js破解)

    网易云音乐下载python爬虫(Js破解) 最近做了一个网易云音乐下载的python爬虫,功能就是输入歌曲的名字,程序自动下载网易音乐搜索界面的第一首歌(一般都是原唱排第一位).本文很适合小白学习,写 ...

  8. Python爬虫实践-网易云音乐

    1.前言 最近,网易的音乐很多听不到了,刚好也看到很多教程,跟进学习了一下,也集大全了吧,本来想优化一下的,但是发现问题还是有点复杂,最后另辟捷径,提供了简单的方法啊! 本文主要参考 python编写 ...

  9. YesPlayMusic:一个高颜值多音频资源的网易云音乐播放器

    都2023年了还有人不知道这款开源免费下载的多音频,高颜值的音乐播放器吗(文末有下载地址) 首先我们来看一下YesPlayMusic的特性 和网易云音乐播放器的功能大同小异,少了歌曲评论的功能,这个功 ...

  10. 新手爬虫——网易云音乐分析

    前言 --一篇关于爬取网易云音乐的简单分析文章,仅供学习交流 本文主要分析用requests对网易云音乐进行访问时的一些问题,selenium可以很好得避开这些问题,本文不做讨论 提示:以下是本篇文章 ...

最新文章

  1. 零基础入门学习Python,这13个Python惯用小技巧一定要收藏
  2. 给小白图示讲解OFDM的原理
  3. python快速入门答案-Python快速入门(一)
  4. 主题:log4j详解与实战
  5. Windows Phone 8本地化多语言支持
  6. loadrunner 错误: 无法找到 java.exe_LoadRunner错误及解决方法总结
  7. Axure RP for Mac中文汉化破解版
  8. C++实现堆排序算法
  9. Android静态库和动态库的区别
  10. matlab设计高频滤波器
  11. WPS添加宋体等字体问题
  12. visio 如何让箭头完全水平?
  13. powerVR使用说明
  14. 阿里PaaS平台下开发建设
  15. python另存为对话框_“另存为文件”对话框如何不允许覆盖
  16. 通用Mmapper配置
  17. Object类的equals方法
  18. Mysql数据库修改某个字段的值,或修改某个字段的默认值
  19. (原创)通过DrawingCache截取View图片
  20. Git提交gitlab项目string) [], ParseException +FullyQualifiedErrorId :UnexpectedToken 异常,commit failed

热门文章

  1. 信息论基础(学习笔记整理)
  2. android imagebutton 设置边框,Android ImageButton没有边框但仍然有点击指示
  3. Oracle GoldenGate下载地址
  4. gentoo中文文档
  5. 省级面板数据(1990-2019):能源生产等(原油、石油、焦炭、原煤、天然气等)stata或excel版本
  6. 淘淘商城第107讲——添加购物车
  7. IOS 手写控件 简单播放器 AVFoundation音乐播放
  8. 中国大学MOOC创业基础题库及答案
  9. Anylogic模型搭建01:医院排队挂号模拟试验
  10. 2021年Java爬虫技术教程(一小时实现)