Python 爬虫进阶必备 | 某策网数据返回值 data 解密逻辑分析

2022-12-10 16:09:47 浏览数 (1)

今日网站

aHR0cHM6Ly93d3cuY2hhY2V3YW5nLmNvbS9jaGFueWUvaW5kZXg=

无限 Debugger绕过

打开控制台,就进入 debugger 模式了

直接右键 Never Pause Here 就可以了

抓包分析

绕过反调试,刷新页面,可以看到如下的请求包

请求的参数没有什么好分析的,都是明文,主要是返回的内容是加密的

加密定位

先用上 xhr 断点,找到发包的位置,然后向上翻

可以看到处理 response 的逻辑

在这个位置打上断点,然后放过断点让逻辑运行

可以看到这里的 n 就是请求的返回值

然后继续向下分析,直到这个逻辑

这里是对 page_set 的解密

继续向下,就是对返回值内容的解密

继续跟进去,看到这里的解密是一个 AES CBC 解密

p 上面的变量操作基本都是对 key iv 的处理,所以需要逐个分析一下

加密分析

首先是解密的密钥 c

c 的生成逻辑如下

代码语言:javascript复制
e = r.decode(t)
a = e.slice(0, 10)
n = l(a, e)
s = n.slice(0, 32)
c = i.default.enc.Utf8.parse(s)

点进 decode 方法,里面是一大串对于返回值的处理

看了一下decode逻辑主要是对返回的字符串进行一些字符的替换,然后再调用了 atob,其实就是base64解码

这里的 a = e.slice(0, 10) 就是获取了解码结果的前 10 的字符然后和解码的结果一块进入 l 计算

这里的 l 主要是对解码的结果进行遍历hex ,每次的hex 的结果都拼接起来

拼接的结果取前 48位作为结果返回

之后的 s 就是对 l 的结果切割取值,再之后的步骤就是 CryptoJS 的常规操作

直接导入 CryptoJS 包就可以

代码语言:javascript复制
npm install crypto-js

这里的解密使用的 AES CBC 的解密,直接使用 CryptoJS 就可以实现

简单使用 js 复现一下解密的逻辑

这样就得到解密好的结果了

Python 请求全流程

用 Python 请求结果如下

这个站点在 page 的部分好像还动态加载了字体文件,不知道是否还有对字体做了一些操作

本次操作是在未登录状态下的测试,不知道在登录状态下是否还有其他不同的操作,感兴趣的朋友可以拓展测试一下

End.

以上就是全部的内容了,咱们下次再会~

0 人点赞