Python 爬蟲進(jìn)階必備 | 某游戲網(wǎng)站密碼加密邏輯分析(webpack 的 js 加密代碼怎么扣 -思路分析)
今日網(wǎng)站
aHR0cHM6Ly93d3cuZ205OS5jb20v
這個(gè)網(wǎng)站來自咸魚的技術(shù)交流群

本來是好奇是什么網(wǎng)站用 Reres 匹配不了看看是不是出了什么新的反爬措施
結(jié)果分析下來并不是,不過分析都分析了,就寫篇文章,這個(gè)網(wǎng)站的加密使用了 webpack 所以就順手分析下應(yīng)該怎么扣
還是那句話:通用算法的話不用扣,直接引用加密庫,別給自己找事

加密定位
知道加密是登陸使用的密碼,所以直接找登陸請(qǐng)求,目的明確的定位里面的加密參數(shù) password

兩種方法定位:
1、檢索password參數(shù)定位
2、在network按照initator中列舉的js直接溯源

用第二種方法,先進(jìn)去下斷點(diǎn),然后再次點(diǎn)擊登陸就進(jìn)入斷點(diǎn)了
多調(diào)試幾次就找到了下面這里的位置

s = (new Date).getTime()
r = g.encode(t.password, s)
p = {...password: r,}
根據(jù)上面的偽代碼可以看到現(xiàn)在位置的就是g.encode這個(gè)方法

繼續(xù)斷點(diǎn),然后請(qǐng)求,可以看到下面這樣的邏輯

基本就完事了,rsa 加密公鑰的就在上面setPublicKey地方,使用通用加密導(dǎo)包的方式復(fù)現(xiàn)加密,整個(gè)流程到這里就結(jié)束了
加密分析
既然開始的時(shí)候說到要看看這里使用的 webpack,這里簡單看看
先看看這里 webpack 的特征
將這里全部的代碼復(fù)制到編輯器中,將括號(hào)都收縮好
整體結(jié)構(gòu)是這樣的偽代碼
!function(x){
xxxxx
}([
function xxx,
function xxxx,
function xxxxx,
]);

是不是和上面的偽代碼一毛一樣
除了結(jié)構(gòu)之外,webpack 最重要的是他還有一個(gè)方法的加載器,加載后就是分析 webpack 加密的時(shí)候經(jīng)常會(huì)看到xxx(90)、xxx['xxxx']這樣的調(diào)用,扣代碼的時(shí)候感覺代碼全是套娃
他的模塊加載器一般在代碼的最上面,也有一些網(wǎng)站是將這個(gè)代碼拆分到別的 js 文件中
像我們這個(gè)網(wǎng)站是在最上方

他先定義了一個(gè)空的s,然后在n里面做了判斷,判斷s[t]有沒有東西,如果有就不進(jìn)入下面的邏輯了
所以這個(gè)模塊加載器一般在網(wǎng)站加載之后就不會(huì)再進(jìn)去了。

所以我們分析的邏輯里會(huì)看到一個(gè)s=r(3)是已經(jīng)加載好的
斷點(diǎn)下在這個(gè)位置是不會(huì)斷住的
需要在現(xiàn)在模塊加載器上下上斷點(diǎn),然后刷新網(wǎng)站,就會(huì)斷住了


點(diǎn)擊i[3]的回顯就可以看到s=r(3)的代碼在什么位置了
webpack 怎么扣
1、原來的代碼是有加載器的 我們也弄一個(gè)加載器
2、模仿上面?zhèn)未a的方式定義自己的模塊列表
這里自己的模塊列表內(nèi)容容就是加密參數(shù)經(jīng)過的加密邏輯代碼,摳出來放進(jìn)去
放到代碼里紅框的位置

3、扣取到代碼不會(huì)報(bào)錯(cuò)就可以了,之后就是導(dǎo)出對(duì)應(yīng)的方法照著加密的邏輯一個(gè)個(gè)拿來用就完事了。

完事,好了,今天的文章到這里就結(jié)束了,我們下次再會(huì)~
對(duì)了,看完記得一鍵四連,這個(gè)對(duì)我真的很重要。
