查看原文
其他

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

The following article is from 咸鱼学Python Author 煌金的咸鱼

今日网站

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

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

Tips:后台回复关键字 进阶 可查看【Python进阶】文章列表。


- EOF -

推荐阅读  点击标题可跳转

1、干货:用 Python 绘制“手绘风格”图表的所有方法!

2、简单方便的 JavaScript 逆向辅助模拟方法

3、36 张图详解 DNS :网络世界的导航


觉得本文对你有帮助?请分享给更多人

推荐关注「Python开发者」,提升Python技能

点赞和在看就是最大的支持❤️

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存