网易云音乐获取音频链接(爬虫)破解params参数
網易云音樂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函數說明
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實現代碼:
總結
以上是生活随笔為你收集整理的网易云音乐获取音频链接(爬虫)破解params参数的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 查看 rabbitmq 启动websoc
- 下一篇: java衍生作用_java-如何从Aff
