Python 爬虫进阶必备 | 某地方产权交易中心返回数据解密逻辑分析
点击上方“咸鱼学Python”,选择“加为星标”
第一时间关注Python技术干货!

图源:极简壁纸
今日网站
aHR0cHM6Ly93d3cuY2NwcmVjLmNvbS9wcm9qZWN0U2VjUGFnZS8jL2NxenI=
这个站来自咸鱼技术交流 4 群
蛮简单的
抓包分析与加密定位
打开目标页,点击下一页,可以捕获到下面的请求

除了请求参数是加密之外,请求的结果也是加密的需要解密

所以一个个分析看看
先分析请求参数
这里直接打上个xhr断点

然后继续点击下一页,可以看到请求会断在send的位置

这个时候h就是请求参数加密后的结果,所以我们需要向上分析堆栈,分析参数是在什么位置加密的
向上分析堆栈可以找下面的位置

可以看到s是提交的参数,经过了aes.encode就变成密文了
所以aes.encode就是请求参数的加密位置
现在来定位下返回值解密的地方
在上一步,我们分析出了关于请求参数的加密位置,xhr断点位置的位置是send,也就是请求数据发出的地方
当我们请求发出之后应该就是获取response并处理的地方了,所以我们还是从xhr的send分析,不过这次是继续执行,而不是回溯堆栈
继续执行几步就可以发现下面的逻辑



这里就是数据解密的位置
加密分析
先看数据解密的部分,正好断点也在这里,我们直接单步进去分析,看看decryptCode做了什么操作

单步进来之后可以看到上面的js逻辑,看了一下js中用到的逻辑,基本都是开头定义的变量,有几个是this.xxx这样形式的变量,所以看下这里的this是那个对象
可以看到这里的this.stringxxxx指向的是

所以我们只要构造e这个对象,在调用的时候实例化一下就可以直接调用了
这里直接把e在整个function扣出来,然后调用一下decryptCode看是否能够返回明文

是可以正常解密的
现在来看看请求参数的加密是什么逻辑
进入aes.encode后,可以看到这里的调用的是encode

和上面解密调用的是同一个对象下的不同方法,所以直接调用一下就完事了

这里整合一下放到python中请求一下

完事~
好了,以上就是今天的全部内容了。
我是没有更新就在摸鱼的咸鱼
收到请回复~
我们下次再见。
对了,看完记得一键四连,这个对我真的很重要。
