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

相关推荐
IP搭子来一个19 小时前
爬虫IP地址受限怎么办?附解决方法
网络·爬虫·tcp/ip
双叶83620 小时前
(Python)Python爬虫入门教程:从零开始学习网页抓取(爬虫教学)(Python教学)
后端·爬虫·python·学习
NPE~1 天前
[爬虫]获取某鱼网页版商品数据
爬虫·python·教程·逆向
深蓝电商API1 天前
Docker容器化部署爬虫项目全流程
爬虫·docker·容器
怪侠_岭南一只猿1 天前
爬虫阶段三实战练习题二:使用 Selenium 模拟爬取拉勾网职位表
css·爬虫·python·selenium·html
桃花键神1 天前
亮数据产品实测:爬虫API、网页抓取API与代理服务器,到底该怎么选?
爬虫·亮数据
喵手1 天前
Python爬虫实战:环境监测实战 - 天气与空气质量的联合分析!
爬虫·python·爬虫实战·环境监测·天气预测·零基础python爬虫教学·天气质量
喵手1 天前
Python爬虫实战:鸣枪起跑!深度抓取全国马拉松赛事报名情报!
爬虫·python·爬虫实战·马拉松·零基础python爬虫教学·采集马拉松赛事报名数据·马拉松数据采集
怪侠_岭南一只猿1 天前
爬虫工程师学习路径 · 阶段四:反爬虫对抗(完整学习文档)
css·爬虫·python·学习·html
电商API_180079052471 天前
1688 商品详情 API 深度对接:字段说明、异常处理与性能优化
大数据·服务器·爬虫·数据挖掘·数据分析