【爬虫JS逆向实战】某中文期刊服务平台逆向

27 阅读4分钟

声明:本文仅提供逆向思路方法,不提供具体代码,所有一切仅供学习交流使用,切勿使用爬虫脚本对网站进行高频率高并发数据爬取行为,如对网站造成损失的,后果自负!!!


网址

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公众号“小恰学逆向”,我们一起讨论学习。