Python 爬虫进阶必备 | 某策网数据返回值 data 解密逻辑分析
点击上方“咸鱼学Python”,选择“加为星标”
第一时间关注Python技术干货!
图源:网络
今日网站
aHR0cHM6Ly93d3cuY2hhY2V3YW5nLmNvbS9jaGFueWUvaW5kZXg=
无限 Debugger绕过
打开控制台,就进入 debugger 模式了
直接右键 Never Pause Here 就可以了
抓包分析
绕过反调试,刷新页面,可以看到如下的请求包
请求的参数没有什么好分析的,都是明文,主要是返回的内容是加密的
加密定位
先用上 xhr 断点,找到发包的位置,然后向上翻
可以看到处理 response 的逻辑
在这个位置打上断点,然后放过断点让逻辑运行
可以看到这里的 n 就是请求的返回值
然后继续向下分析,直到这个逻辑
这里是对 page_set 的解密
继续向下,就是对返回值内容的解密
继续跟进去,看到这里的解密是一个 AES CBC 解密
p 上面的变量操作基本都是对 key iv 的处理,所以需要逐个分析一下
加密分析
首先是解密的密钥 c
c 的生成逻辑如下
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 包就可以
npm install crypto-js
这里的解密使用的 AES CBC 的解密,直接使用 CryptoJS 就可以实现
简单使用 js 复现一下解密的逻辑
这样就得到解密好的结果了
Python 请求全流程
用 Python 请求结果如下
这个站点在 page 的部分好像还动态加载了字体文件,不知道是否还有对字体做了一些操作
本次操作是在未登录状态下的测试,不知道在登录状态下是否还有其他不同的操作,感兴趣的朋友可以拓展测试一下
End.
以上就是全部的内容了,咱们下次再会~
备注【咸鱼666】,入群交流
我是没有更新就在摸鱼的咸鱼
收到请回复~
我们下次再见。
对了,看完记得一键三连,这个对我真的很重要。