Python爬虫网易云音乐--JS逆向-补充笔记

2023-11-20

课程地址:https://www.bilibili.com/video/BV1Mi4y147Yb
up主省略掉的,用报错信息来一一回溯的方式把js文件补全的过程,主要把握的几个点(把以下部分代码找到粘贴到js中即可补全并顺利运行):

CryptoJS变量

前情提要:在up主课程视频的13:13处,刚删掉了windows变量,现在报错CryptoJS未定义。

CryptoJS 在网页源js代码中出现13次,除了最开始的那个已经粘贴到我们的js文件中的函数,还出现在源js代码中的其余共6处函数中。

为了不让控制台输出‘CryptoJS未定义’,需要将CryptoJS在源js代码出现过的全部函数完整地复制,并粘贴到我们的js文件中。

需要找到的其余6处函数,up主没有带着一个一个找,我个人的寻找过程总结如下。

  • 在网页源码js中找到CryptoJS出现的第1处函数:
var CryptoJS = CryptoJS || function(u, p) {...}(Math);
  • 第2~4处是介于第1处和第5处之间的三个无名函数:
//第2处
(function() { ...}
)();
//第3处
(function(u) { ...}
)(Math);
//第4处
(function() { ...}
)();

第5处紧跟在第4处后面:

CryptoJS.lib.Cipher || function(u) {...}();

第6处是紧跟在第5处后面的一个无名函数:

(function() { 
	//函数内第一行出现了CryptoJS
	for (var u = CryptoJS, ...}
)();

一段集中的定义变量

接下来会报错maxDigitVal未定义,由此找到下面一大段代码,定义了包括maxDigitVal在内的许多变量:

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);

把这一大段变量定义找到并复制粘贴到我们的js文件中。

剩下的全是函数(共30个)

然后剩下的报错就全部是函数名了,总共30个,无序(没按照出现在源js代码的先后顺序)排列如下,每行6个用空格分隔:

setMaxDigits BigInt biFromNumber biFromHex hexToDigit charToHex
biHighIndex BarrettMu biCopy biDivide biDivideModulo biNumBits
biShiftLeft arrayCopy biMultiplyByRadixPower biCompare biSubtract biMultiplyDigit
biShiftRight BarrettMu_modulo biDivideByRadixPower biModuloByRadixPower BarrettMu_multiplyMod BarrettMu_powMod
encryptedString biToHex digitToHex reverseStr biMultiply RSAKeyPair

一个一个按照名字寻找定义,然后复制粘贴到我们的js文件中就不会再报‘未定义’类型的错了。
以setMaxDigits函数为例,在源js代码搜索’setMaxDigits’,看到function setMaxDigits(a) {这样的定义头,把整个函数复制下来,粘贴到我们的js文件中就ok了,以此类推所有30个函数。

成功输出结果

控制台不再报错,成功输出结果如下。

{'params': 'OPYiEeviGUsvOLMa7cENWV7bCk8iZ2CmHlw6hVUAgWc5nibtrcYDJvWXChluboDZQ1Fb3xp6p8r/wPPCBZ2gQQtGGkha6mAum5MAuv/gbGVFys/ziQWBL62d2YCtv4EnnEW/oMUKbqLWfFvD4tdMebZ5yU8g5SRSDA3FUWxgy7JQbFnQWOrkV7nCKUYG/mo/RrcCMXw3bzWrneVMrw7MEJfImsLZ1zFKLAcicx6Sagh02FkeVMDgTJCR4regbpPu1LoKRezCFk3oE0ahIwIzgsJvrKewIrYn+XjXXEXNt6E=', 
'encSecKey': '3da8f6c2b63a75b7ed2c3c2220c5396f6116cf96cab3be9f32d3adf6b33123729b38ac69c0520a735fb269c72847ccb753a77d401079c9ea7ae86329d66c697ba8ba9dc4aab08f1d17f04037f03547695b7d4949672da2ef9246f7c9d9bd3bba4059f2bcde6ab5e74103a453bb2e20a1298350764bf9cca0e403ade8704bb08e'}

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

Python爬虫网易云音乐--JS逆向-补充笔记 的相关文章

随机推荐

  • Dubbo远程传输协议详解

    前言 上次小编为大家带来了Dubbo调用及容错机制详解 不知道大家有没有去看小编最后留下的问题 欢迎对文章进行评论也希望大家和小编多多交流 今天接着为大家带来Dubbo的内容 传输协议 上次调用机制中并没有涉及Dubbo传输的协议 这次容小
  • 多线程下载文件(支持暂停、取消、断点续传)

    多线程下载文件 支持暂停 取消 断点续传 多线程同时下载文件即 在同一时间内通过多个线程对同一个请求地址发起多个请求 将需要下载的数据分割成多个部分 同时下载 每个线程只负责下载其中的一部分 最后将每一个线程下载的部分组装起来即可 涉及的知
  • 看完这篇 教你玩转渗透测试靶机Vulnhub——HarryPotter:Aragog(1.0.2)

    Vulnhub靶机HarryPotter Aragog渗透测试详解 Vulnhub靶机介绍 Vulnhub靶机下载 Vulnhub靶机安装 Vulnhub靶机漏洞详解 信息收集 漏洞发现 漏洞利用 数据库语句查询 SSH登入 备份文件提权
  • unable to install breakpoint in com... $ $FastClassBySpringCGLIB$ $12fabbfc due to missing line numb

    问题 unable to install breakpoint in com FastClassBySpringCGLIB 12fabbfc due to missing line number attributes Modify comp
  • linux定时执行shell脚本

    一 cron调度进程 c r o n是系统主要的调度进程 可以在无需人工干预的情况下运行作业 有一个叫做 c r o n t a b的命令允许用户提交 编辑或删除相应的作业 每一个用户都可以有一个c r o n t a b文件 来保存调度信
  • 量化投资学习-36:选股的基本方式

    1 选择的总原则 1 强者恒强 热点龙头 2 超跌反弹 星空雷达 2 策略总原则 1 主策略 1 2 辅策略 N 3 候选指标 趋势 支撑线 压力线 短期趋势通道 长期趋势通道 布林线 震荡 MACD底特征 KDJ震荡超卖 9转序列低9 能
  • 4大主流CPU处理器技术架构

    推荐阅读 浅谈linux 内核网络 sk buff 之克隆与复制 深入linux内核架构 进程 线程 了解Docker 依赖的linux内核技术 导读 RISC 精简指令集计算机 是一种执行较少类型计算机指令的微处理器 起源于80年代的MI
  • 【C++】STL中list容器内部元素的移动和交换

    文章目录 前言 一 list是什么 二 元素移动 1 插入 删除 2 切除 拼接 三 元素交换 1 元素值交换 2 元素 节点 交换 总结 前言 提示 list insert list erase list splice std iter
  • 【ESP32】反复重启

    ESP32开发 反复重启 串口输出如下所示 rst 0xc SW CPU RESET boot 0x13 SPI FAST FLASH BOOT configsip 188777542 SPIWP 0xee clk drv 0x00 q d
  • 使用 AJAX,局部刷新 GridView 进行数据绑定的简单实现

    很多用户都有这样需求 比如 点击按钮 刷新 GridView 中的数据 而不是这个页面刷新 使用简单的 XMLHttpRequest 就可以直接实现 具体代码如下 ASPX 代码 lt
  • C语言实现随机发纸牌

    C语言实现随机发纸牌 为避免重复发牌 设二维数组sign 4 13 记载是否发过纸牌 其中行下表表示花色 列下标表示点数 设字符串指针数组card n 存储随机发的n张纸牌 例如card 0 梅花2 按照以下方法以此发出每一张牌 首先产生一
  • Python异常捕获

    在 Python 中 try 和 except 语句用于捕获和处理异常 except 子句可以用来捕获不同类型的异常 Exception 这是 Python 中所有异常的基类 可以捕获几乎所有异常类型 ValueError 当函数收到不适当
  • 使用css 动画实现,水波纹的效果

    每日鸡汤 每个你想要学习的瞬间都是未来的你向自己求救 需求 实现水波纹动画效果 要求中心一个圆点 然后有3个圈 一圈一圈的向里面缩小 说实话我第一个想到了给3个圈设置不同的宽高 然后设置动画0 100 一次缩小宽高 但是 我转念一想 我是不
  • Intellisense and NAnt .build files in VS.NET

    Intellisense and NAnt build files in VS NET This has been blogged about before here and there but I wanted to share it a
  • 最大k乘积问题--动态规划

    问题 问题描述 设x是一个n位十进制整数 如果将x划分为k段 则可得到k个整数 这k个整数的乘积称为x的一个k乘积 试设计一个算法 对于给定的x和k 求出x的最大k乘积 编程任务 对于给定的x和k 编程计算x的最大k 乘积 示例 Sampl
  • 深入理解数据库事务(超详细)

    一 事务的介绍 事务是一组操作的集合 事务会把所有操作作为一个整体一起向系统提交或撤销操作请求 即这些操作要么同时成功 要么同时失败 二 事务的基本操作 2 1 事务操作方式一 例子 转账场景 张三向李四转账 1 查询张三账户余额 sele
  • mac下搭建cocos2d-x3.2开发环境

    1 软件 Xcode Ant apache ant 1 9 4 bin tar gz Jdk jdk 8u45 macosx x64 dmg 有的mac系统上没有自带 Ndk android ndk r10d darwin x86 64 b
  • 如何成为一名优秀的开发人员?

    如何成为一名优秀的开发人员 1 你不需要知道一切 没有人知道所有的细节 2 存在错误对于学习至关重要 3 谷歌搜索是一项合法的技能 4 尝试思考而不是编码 5 慎重对待教程 1 你不需要知道一切 没有人知道所有的细节 作为一名开发人员 你可
  • C++STL总结笔记(二)——仿函数(函数对象)

    文章目录 一 概念 总结 一 概念 仿函数又称函数对象 即重载了函数调用运算符 的类的对象 优势 1 仿函数对象的内部可以有自己的状态 可以实现一些其他的功能 2 函数对象可以作为参数进行传递 当仿函数类内重载的返回值是bool类型被称为谓
  • Python爬虫网易云音乐--JS逆向-补充笔记

    课程地址 https www bilibili com video BV1Mi4y147Yb up主省略掉的 用报错信息来一一回溯的方式把js文件补全的过程 主要把握的几个点 把以下部分代码找到粘贴到js中即可补全并顺利运行 CryptoJ