Python 爬虫进阶必备 | 某恩数据网排行加密数据解密逻辑分析
今日网站
aHR0cHM6Ly93d3cuZW5kYXRhLmNvbS5jbi9Cb3hPZmZpY2UvQk8vWWVhci9pbmRleC5odG1s
抓包分析
打开链接,刷新页面,可以看到如下的请求
返回值得结果是一长串得密文
这个密文得解密逻辑就是本文分析得主要内容
加密定位与分析
点开请求包得 Initiator 选项卡
点击下面得位置
进去可以看到代码所在的位置是一段 ajax 请求逻辑
这里请求得链接就是我们正在分析的请求
因为我们需要具体分析的逻辑是返回值解密的代码,所以我们需要关注的是 sucess 括起来的这一段
这里代表得是请求成功之后回调的处理方法,所以请求返回值解密大概率就在这里
打上断点,然后刷新页面,正好断在这里,这里有一段 JSON.parse 代码
从上图这里追进去之后,可以看到一个 OB混淆的代码
显然密文就是在这个文件里面进行解密的(此地无银三百两【狗头】)
接下来要做的是分析这段混淆代码,但是说实话看这么一段混淆有点脑瓜疼
寻思着先找找入口,就像缠在一起的线,找到线头才是解开它的开始
把 js 拖到最后,发现我可能想的有点复杂了
代码的最后这里直接实例化好了 weInstance 对象,也就是说这一大段的 js 代码的入口,就是webInstace.shell(e)
,我们可以照着调用就完事了
所以这里直接复制到 snippets 里
点击运行
运行没有问题,我们把密文带入进去试试,像下面这样
运行结果如下
这样就解出来了
但是到这里还不是最终的结果,毕竟这里用的还是浏览器自己的环境,我们在 node 环境下运行还不知道有没有什么幺蛾子
所以本地新建一个 js 文件把上面 snippets 的代码都复制进去,然后运行
然后果不其然就报错了
这里提示 navigator is not defined
按照缺啥补啥,写上 var navigator = {}
再运行就没有结果了
哦吼,这个时候我们回退回刚刚报错的地方,可以看到这里的代码是这样的
if (!navigator || !navigator[_0x2246('0x26d', '0I#o')])
return '';
continue;
像刚刚补齐var navigator = {}
,后面取得 navigator 中得值也是取不到得
所以打上断点看看这里取得是 navigator 得那个属性
选中 _0x2246('0x26d', '0I#o')
然后看看他得值是啥
取得是 ua,所以我们这个时候要把 ua 补上
var navigator = {
'userAgent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'
}
补全之后,再次运行
得出解密好得结果了
然后就是 Python 模拟请求,然后调用 js 解密就可以了
不过代码都在手上了,我们简单看看 js 的解密使用了什么算法
打上断点,可以看到有一个控制流
后续的 switch case 会按照这个字符串排序进行
之后向下知道switch case 部分可以看到一段解密的代码,手动还原一下,结果如下
这里是再 case 为 0 的时候才进行解密,前面的几个步骤都是对正文进行处理,来获取 key
这里用的是 ECB 加密所以没有 IV,所以只要简单分析一下的 key 的运算就可以完成还原了
而 key 的运算逻辑在 case 8 的位置
比较简单就是调用了 substr 对返回的密文进行切割得到 key
之后又对正文也做了处理,在 case 2 的部分
之后就是在 case 0 的部分解密
按照这个思路,就可以用 Python 完成全流程的请求了
Python 实现全流程
End.
以上就是全部的内容了,咱们下次再会~
相关文章
- Wing Pro 9 for Mac(Python集成开发工具)
- 干货 | 轮廓逼近原理与OpenCV应用(附Python-OpenCV文档下载)
- 放弃 Python 和 Electron,选择 aardio 编写批量视频合并软件
- 利用Python3写个爬虫脚本,爬取纯欲小姐姐的图片壁纸,隔壁的前端兄弟馋哭了,求着我要脚本
- 【免杀】一种python反序列化免杀方式
- 根据经纬度坐标获得省市区县行政区划城市名称,自建数据库 java python php c# .net 均适用
- 使用Python的http.server实现一个简易的Web Api对外提供HanLP拼音转换服务
- 【团队效率提升】Python-PyWebIO介绍
- 用Python提取网页中的超链接
- 在Linux/CentOS中编译安装Python
- 用Python3提取网页中的超链接
- Python cos sdk
- Python字典Dictionary
- Python基础(十三):集合的详细讲解
- Python基础(十四):公共操作的讲解
- Python基础(十五):推导式的讲解
- Python基础(十六):函数的初步认识
- Python基础(十七):函数的深入了解
- Python基础(十八):学员管理系统应用
- 语音数据增强及python实现