今日网站
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、扣取到代码不会报错就可以了,之后就是导出对应的方法照着加密的逻辑一个个拿来用就完事了。
完事,好了,今天的文章到这里就结束了,我们下次再会~