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

课程地址: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, ...} )();

一段集中的定义变量 【Python爬虫网易云音乐--JS逆向-补充笔记】接下来会报错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'}

    推荐阅读