【爬虫JS逆向实战】关于this指向的逆向实战——某产权交易中心数据解密

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


🔗网址

复制代码
aHR0cHM6Ly93d3cuY2NwcmVjLmNvbS9uYXZDcXpyLyMv

🔎网站观察

首先,我们需要的数据为下图中的公告信息

需要在翻页时查看网络请求

需要逆向的数据

  • 载荷(涉及到翻页数据的更改)
  • 响应(涉及到具体的数据获取)

📳载荷加密逆向

因为该请求的载荷未携带参数,所以无法使用关键字定位,在这里我们可以采取hookxhr断点堆栈的方式找到加密位置,这里我使用hook脚本的方式查找会比较快,脚本如下

javascript 复制代码
(function () {
    var open = window.XMLHttpRequest.prototype.open;
    window.XMLHttpRequest.prototype.open = function (method, url, async) {
        if (url.indexOf("honsanCloudAct") != -1) { // honsanCloudAct根据具体接口更改
            debugger;
        }
        return open.apply(this, arguments);
    };
})();

点击翻页时,浏览器会跳到我们的hook脚本的位置

点击上一个堆栈

可以看到,载荷值在这个栈中也是由上个栈携带过来的

所以我们需要继续向下找,直到找到初始的加密位置为止,这里就不做赘述,我直接跳到加密位置这里了

这里先看一下方法里面的值:s

目前我们不知道这里面的值是不是固定的,所以需要在这里下个断点,看一下有哪些值会变化

根据上图可知,变化的值有:两个id值,pageNo值,这不必说。这里我们先不急着去逆向id值。万一这两个id值不会检测,我们就不需要浪费事件在这个上面了。测试思路很简单,我们随便拿一个数据,只更改其中的翻页pageNo值,其他的不变,然后将修改后的值放入加密函数中加密,然后拿着这一串加密值python请求获取到加密后的数据,然后再把一串加密数据用浏览器中的解密函数解密,如果能得到正确信息,则证明这两个id值暂时就不需要逆向。

  • 首先,我们先定位到解密函数的位置,以便后面作校验测试,仍旧采用hook脚本的方式
javascript 复制代码
(function () {
    var _parse = JSON.parse;
    JSON.parse = function (value) {
        debugger;
        return _parse(value);
    }
})()
  • 当数据出现时,点击上一个堆栈
  • 这个this.decryptCode方法就是解密函数(解密函数逆向在下一步)
  • 将所有断点放开,点击翻页定位到我们开始加密的位置
  • 输出s
  • pageNo值改为5,然后传入到this.aes.encode函数中获取加密载荷值
  • 然后携带这个加密载荷值通过python请求数据
  • 将数据代入到解密函数this.decryptCode
  • 结果如下
  • 验证成功,id暂时无需逆向。

参数确定了,接下来去该去逆向加密函数this.aes.encode

看到this,多少会有点头疼,这个时候可别直接点到整个方法里面去,先找一下这个this是这么来的,往上翻

可以看到,这个this指向的是t,这个t肯定是个对象,接着往上翻找到t的初始位置

原来如次,this.aesnew了一个对象b,我们要找到这个b对象,可以直接回到刚才加密函数的位置,点进去

b找到了

现在我们简单的扣一下代码测试一下

  • 参数s先固定
  • 改写一下加密函数
  • 将我们之前找到的b对象的位置全部复制到本地编辑器
  • 可以生成数据,但不知道是否正确
  • 可以按照之前测试id值的方法测试是否可以请求到正确的加密数据,经过测试该加密值无误,这里就不做赘述。

🔐数据解密逆向

上面我已经详细说明了解密函数this.decryptCode定位方式,在此不作赘述。首先,还是别急着点进方法里面去看(对于这种有this指向的),我们往上翻就可以找到当前的函数在哪个对象的作用域

既然这样,我们可以仿照上面加密函数的写法,要用到decode函数,那就随便命名一个参数,然后new这个b对象,于是代码可以写成下图的形式

运行结果

这个时候可能会有朋友问,数据呢?因为在浏览器中我们所获取的是对象,浏览器会将数据折叠起来

而在本地的编辑器中(以vscode为例),它不会显示全部的数据,只是以[Array]展示出来

要先将数据全部展示出来也很简单,找到解密的位置,把JSON.parse方法去掉即可

输出结果

至此, 载荷加密 数据解密全部搞定!


如有爬虫相关问题,可关注wx公众号"小恰学逆向",我们一起讨论学习。

相关推荐
TlSfoward19 小时前
抓包代理链路下的 TLS 指纹变化分析 TLSFOWARD抓包工具
数据库·爬虫·网络协议·搜索引擎·php
电商API_1800790524720 小时前
企业ERP进销存场景|京东商品详情接口自动同步方案|凭证鉴权批量调用技术实操
大数据·运维·人工智能·爬虫·数据挖掘·网络爬虫
拓海SEO外贸1 天前
Google 爬虫管理:抓取预算、404 与重定向
爬虫·搜索引擎·信息可视化·seo·跨境电商·独立站搭建·seo优化
深蓝电商API1 天前
浏览器缓存机制对爬虫有什么影响?
爬虫
Dontla1 天前
网站爬虫控制策略介绍(robots.txt、sitemap.xml、x-robots-tag、noindex、nofollow)网站索引
xml·爬虫·dubbo
Bright Data2 天前
DuckDuckGo 搜索爬取器
爬虫·serp·网页数据
去码头整点薯条ing2 天前
某当网登录滑块【协议+OCR】
爬虫·python·ocr
上海云盾-小余2 天前
中小站点防护避坑:低价高防服务存在的各类安全短板剖析
网络·爬虫·安全·ddos
huangdong_2 天前
电商图片下载工具技术选型与稳定性深度解析:从爬虫到浏览器方案的完整技术演进与源码级实现
爬虫
阿标在干嘛2 天前
从单机到分布式:政策快报爬虫系统的三次重构
分布式·爬虫·重构