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

相关推荐
B站_计算机毕业设计之家1 天前
计算机毕业设计:Python股票投资辅助决策系统 django框架 request爬虫 协同过滤算法 数据分析 可视化 大数据 大模型(建议收藏)✅
爬虫·python·深度学习·算法·django·flask·课程设计
FlDmr4i282 天前
网络爬虫是自动从互联网上采集数据的程序
爬虫
源码之家2 天前
计算机毕业设计:Python股票交易管理可视化系统 Django框架 requests爬虫 数据分析 可视化 大数据 大模型(建议收藏)✅
爬虫·python·深度学习·信息可视化·数据分析·django·课程设计
篮子里的玫瑰2 天前
Python与网络爬虫——列表与元组
开发语言·爬虫·python
电商API_180079052472 天前
如何实现批量化自动化获取淘宝商品详情数据?爬虫orAPI?
大数据·c++·爬虫·自动化
源码之屋2 天前
计算机毕业设计:Python天天基金数据采集与智能分析平台 Django框架 数据分析 可视化 爬虫 大数据 大模型(建议收藏)✅
人工智能·爬虫·python·数据分析·django·flask·课程设计
源码之家2 天前
计算机毕业设计:Python基金股票数据分析与可视化平台 Django框架 数据分析 可视化 爬虫 大数据 大模型(建议收藏)✅
爬虫·python·信息可视化·数据分析·django·flask·课程设计
小花皮猪3 天前
2026 SERP + LLM 训练数据采集指南(Bright Data MCP + Dify)
人工智能·爬虫·工作流·dify·serp
小白学大数据3 天前
企业精准数据分析双路径对比:运营商大数据与 Python 爬虫技术选型与实践
大数据·开发语言·爬虫·python·数据分析
袁袁袁袁满3 天前
亮数据SERP API实现搜索引擎实时数据采集
爬虫·python·网络爬虫·爬山算法