Python 爬蟲(chóng)進(jìn)階必備 | 某音樂(lè)網(wǎng)站查詢(xún)參數(shù)加密邏輯分析(分離式 webpack 的加密代碼扣取詳解)
第一時(shí)間關(guān)注Python技術(shù)干貨!

今日網(wǎng)站
aHR0cDovL3d3dy5rdXdvLmNuL3NlYXJjaC9saXN0P2tleT0lRTQlQjglOEIlRTUlQjElQjE=
首先聲明,本網(wǎng)站的這個(gè)參數(shù)不是必要的參數(shù),通過(guò) postman 測(cè)試不帶參數(shù)也可以返回?cái)?shù)據(jù),那么這篇文章講什么?
之前分析了一篇 webpack 加密的網(wǎng)站,講了大概一個(gè)使用了 webpack 的網(wǎng)站他的參數(shù)應(yīng)該如何扣取。
本篇是他的續(xù)篇,主要講述當(dāng)模塊分發(fā)器不在同一個(gè)文件的 webpack 應(yīng)該如何扣取
Python 爬蟲(chóng)進(jìn)階必備 | 某游戲網(wǎng)站密碼加密邏輯分析(webpack 的 js 加密代碼怎么扣 -思路分析)
加密參數(shù)定位
首先看下我們需要的分析的參數(shù)是什么

這里的 reqId 就是需要分析的參數(shù),這個(gè)參數(shù)看著是不是特別像 uuid
直接檢索參數(shù)名可以找到下面這個(gè)文件

在文件里再次檢索可以定位到下面幾個(gè)位置


這里的reqId的值分別等于r和n,但是這里的r和n的邏輯都指向下面這個(gè)邏輯c()()
所以我們需要斷點(diǎn)一下看下reqId是否就是在這里生成的,如果是這里再看看c的具體邏輯
這里打上斷點(diǎn)刷新可以看到,確實(shí)斷點(diǎn)的位置在上面標(biāo)記的兩個(gè)位置中,并且參數(shù)也是c()()生成的


加密參數(shù)分析
經(jīng)過(guò)上面的定位已經(jīng)可以知道參數(shù)是由c()()生成的,那么c的邏輯分析出來(lái)就完成了。
往上翻下代碼可以看到下面的邏輯
l = n(109)
c = n.n(l)
reqId = c()()
所以這里的關(guān)鍵參數(shù)就是l,l是n(109)生成的,這里的n就是我們今天的重點(diǎn)webpack整出來(lái)的。
按照前一篇的介紹,要看下模塊分發(fā)器的位置把他扣取出來(lái),然后把加密邏輯用到的模塊都塞到分發(fā)器里調(diào)用就可以了。
但是在開(kāi)始的位置沒(méi)有看到分發(fā)器

所以現(xiàn)在要在l的位置單步到分發(fā)器的位置,原來(lái)在另一個(gè)文件中

這里就是分發(fā)器的位置了,這里的e存的就是全部的模塊

代碼運(yùn)行到函數(shù) d 的時(shí)候會(huì)把所有方法都塞到這個(gè)列表里,然后就可以用n(xxx)調(diào)用了,我們要做的就是和這里一樣把reqId的邏輯組成一個(gè)這樣的函數(shù),我們直接調(diào)用d(xxx)這樣的代碼就可以直接生成 reqId
現(xiàn)在就是把分發(fā)器還有reqId用到的模塊都扣出來(lái)然后組裝到一起。
代碼扣取
先扣模塊的分發(fā)器,把除了d之外的全刪了

因?yàn)?code style="font-size: 14px;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(71, 193, 168);">d里面用到了t,所以在d前面補(bǔ)一個(gè)var t={}
這個(gè)時(shí)候剩下的代碼應(yīng)該是下面這樣的

接下來(lái)就是找l用到的代碼了
可以看到l用到的是n(109),所以我們需要找到109對(duì)應(yīng)的代碼
“注意:這里最好是在模塊分發(fā)器里找 109 對(duì)應(yīng)的代碼像下圖這樣,如果將斷點(diǎn)打在 l 的位置單步進(jìn)去可能會(huì)出現(xiàn)偏差

然后通過(guò)點(diǎn)擊上面圖示中的回顯,來(lái)找到對(duì)應(yīng)的代碼

將這部分代碼放到我們扣好的分發(fā)器里面

可以看到109里面還用到了202 還有203
按照我們上面方法重復(fù)把他們兩個(gè)都扣出來(lái)

這個(gè)時(shí)候就得到了所有用到的代碼,接下來(lái)就是需要在外部得到這個(gè)模塊分發(fā)器運(yùn)行起來(lái)的結(jié)果
為啥需要這么做?
完成上面的操作后,我們得到的是一個(gè)自執(zhí)行的函數(shù),也就是說(shuō)我們一運(yùn)行代碼他就會(huì)自動(dòng)執(zhí)行了。
函數(shù)執(zhí)行結(jié)束我們要的方法的列表的就沒(méi)了,所以就需要把這個(gè)函數(shù)列表導(dǎo)出到一個(gè)全局變量里,然后在這個(gè)全局變量里面調(diào)用對(duì)應(yīng)的方法完成reqId的生成
所以我們?cè)谕饷嬲{(diào)用一個(gè)var xianyu;
在自執(zhí)行的方法里把d方法賦值給xianyu

之后再照網(wǎng)站上的調(diào)用邏輯調(diào)用一下就可以了
!
運(yùn)行就可以生成reqId了

就這樣就完事了~
以上就是今天的全部?jī)?nèi)容了,咱們下次再會(huì)~
對(duì)了,看完記得一鍵四連,這個(gè)對(duì)我真的很重要。
