声明:本文仅提供逆向思路和方法,不提供具体代码,所有一切仅供学习交流使用,切勿使用爬虫脚本对网站进行高频率或高并发数据爬取行为,如对网站造成损失的,后果自负!!!
网址
68747470733a2f2f71696b616e2e63717669702e636f6d2f51696b616e2f4a6f75726e616c2f4a6f75726e616c477569643f66726f6d3d696e646578
技术前瞻
该网站逆向所面临的主要难题为:瑞数6代cookie加密(版本号会随时间更新,请以最新版为准)。
判断依据
当数据请求的接口携带的cookie中有下图的数据时,极大可能为瑞数的产品
开头数字为6则代表版本号为瑞数6代
需要逆向的为第二条数据
上图箭头所指不打勾表示这个数据是本地JS生成的,打勾则表示由服务端传输,我们可以直接获取
逆向过程
先打开调试窗口(F12),瑞数产品的另一大特征为无限debugger,不过这个网站没有,所以不做介绍
在“源代码/来源”页面右侧勾选“事件监听器断点”下的”脚本“选项
接下来清除网页cookie信息(本人使用的是谷歌浏览器)
删掉cookie之后便会出现”重新加载“的选项
会停在如下页面
此时查看cookie信息,发现已经生成好了
直接把这些cookie删掉,然后再次刷新页面
当刷新之后点击下一步,直到cookie信息如下图时,就可以进行下一步的调试了
查看源代码,复制下图代码段到本地,注意,瑞数产品会对代码会有格式化监测,需要将JS代码压缩后复制到本地
我们还需要找到解密这段代码的自执行函数,点击下一步,会自动跳转到自执行函数的位置
同样的,将这JS文件中的所有代码压缩后复制到本地编辑器
接下来就是补环境的操作了,为了使代码更易阅读,我在另一个文件中引入我们刚才在浏览器复制的代码
首先运行一下,看看会报什么内容的错误
那就一下补window对象,一般来说像这种环境补的东西较多的案例,一般会挂个代理监测,方便查看
查看输出
在浏览器中self === top === window,所以可以这样补充
接着查看输出
在此先补充最后一个undefined的对象方法
- 首先,创建一个document对象
- 再在对象里面写入createElement方法,并通过控制台输出它的传参
- 查看输出,发现其传入了一个字符串div
- 在浏览器控制台输出查看结果
- 返回一个div标签,在JS代码中可用对象表示,写一个条件判断,当传入的参数为div时,输出一个对象
- 同时在上方声明这个div对象
- 同时监测一下这个div对象
- 查看输出
- 可以看到,这个div对象中又调用了一个getElementsByTagName方法,也像之前一样的补法
- 查看输出
- 可以看到,传入了字符串i,在浏览器查看它的输出
- 返回一个空列表,也是加个条件判断
- 当吐出其它方法时,就说明我们可以先跳过这个方法,去补充最近的undefined
接着补充上图标记的方法
- 初始写法
- 查看输出
- 查看浏览器输出
- 列表中有一个script对象,也是一样的操作
- 记得挂个代理
- 查看输出
- 补充
- 查看输出
- 浏览器输出
- 补充
- 看输出
- 浏览器输出
- 补充
- 查看输出
- 补充
- 看输出
- 接着补
- 看输出
- 补充
- 看输出
- 浏览器查看
- 补充
- 看输出
- 还有个location对象需要补,先浏览器查看
- 补充
- 看输出
- 看到这种标签,直接写空方法就行了
- 看输出
- 浏览器查看
- 属性的话直接补充就好了
- 看输出
- 此时程序在一直执行,肯定用了定时器,直接将定时器改写成空方法即可
- 成功生成
将这个加密的cookie携带到请求中也可以正常请求
如有爬虫相关问题,可关注wx公众号“小恰学逆向”,我们一起讨论学习。