Python 爬虫进阶必备 | 某游戏网站密码加密逻辑分析(webpack 的 js 加密代码怎么扣 -思路分析)

今日网站

aHR0cHM6Ly93d3cuZ205OS5jb20v

这个网站来自咸鱼的技术交流群

图片

本来是好奇是什么网站用 Reres 匹配不了看看是不是出了什么新的反爬措施

结果分析下来并不是,不过分析都分析了,就写篇文章,这个网站的加密使用了 webpack 所以就顺手分析下应该怎么扣

还是那句话:通用算法的话不用扣,直接引用加密库,别给自己找事

图片

加密定位

知道加密是登陆使用的密码,所以直接找登陆请求,目的明确的定位里面的加密参数 password

图片

两种方法定位:

1、检索password参数定位

2、在network按照initator中列举的js直接溯源

图片

用第二种方法,先进去下断点,然后再次点击登陆就进入断点了

多调试几次就找到了下面这里的位置

图片

s = (new Date).getTime() 
r = g.encode(t.password, s)
p = {...password: r,}

根据上面的伪代码可以看到现在位置的就是g.encode这个方法

图片

继续断点,然后请求,可以看到下面这样的逻辑

图片

基本就完事了,rsa 加密公钥的就在上面setPublicKey地方,使用通用加密导包的方式复现加密,整个流程到这里就结束了

加密分析

既然开始的时候说到要看看这里使用的 webpack,这里简单看看

先看看这里 webpack 的特征

将这里全部的代码复制到编辑器中,将括号都收缩好

整体结构是这样的伪代码

!function(x){
xxxxx
}([
function xxx,
function xxxx,
function xxxxx,
]);

图片

是不是和上面的伪代码一毛一样

除了结构之外,webpack 最重要的是他还有一个方法的加载器,加载后就是分析 webpack 加密的时候经常会看到xxx(90)、xxx['xxxx']这样的调用,扣代码的时候感觉代码全是套娃

他的模块加载器一般在代码的最上面,也有一些网站是将这个代码拆分到别的 js 文件中

像我们这个网站是在最上方

图片

他先定义了一个空的s,然后在n里面做了判断,判断s[t]有没有东西,如果有就不进入下面的逻辑了

所以这个模块加载器一般在网站加载之后就不会再进去了。

图片

所以我们分析的逻辑里会看到一个s=r(3)是已经加载好的

断点下在这个位置是不会断住的

需要在现在模块加载器上下上断点,然后刷新网站,就会断住了

图片图片

点击i[3]的回显就可以看到s=r(3)的代码在什么位置了

webpack 怎么扣

1、原来的代码是有加载器的 我们也弄一个加载器

2、模仿上面伪代码的方式定义自己的模块列表

这里自己的模块列表内容容就是加密参数经过的加密逻辑代码,抠出来放进去

放到代码里红框的位置

图片

3、扣取到代码不会报错就可以了,之后就是导出对应的方法照着加密的逻辑一个个拿来用就完事了。

图片

完事,好了,今天的文章到这里就结束了,我们下次再会~

(完)