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

相关推荐
喵手2 小时前
Python爬虫实战:网抑云音乐热门歌单爬虫实战 - 从入门到数据分析的完整指南!
爬虫·python·爬虫实战·网易云·零基础python爬虫教学·音乐热门采集·热门歌单采集
喵手8 小时前
Python爬虫实战:节奏律动 - Billboard Hot 100 历史榜单深度采集实战!
爬虫·python·爬虫实战·零基础python爬虫教学·billboard hot·历史版单采集·采集billboard hot
喵手9 小时前
Python爬虫实战:数字时光机 - 基于 Playwright 的网页全貌归档系统(HTML + 截图)(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·playwright·零基础python爬虫教学·csv导出·网页全貌归档
喵手10 小时前
Python爬虫实战:自动化构建 arXiv 本地知识库 - 从 PDF 下载到元数据索引!
爬虫·python·自动化·arxiv·本地知识库·pdf下载·元数据索引
喵手11 小时前
Python爬虫实战:Spotify 公开歌单爬虫实战 - 打造你的全球音乐数据库!
爬虫·python·爬虫实战·spotify·零基础python爬虫教学·公开歌单爬虫实战·全球音乐数据库
橙露1 天前
Python 异步爬虫进阶:协程 + 代理池高效爬取实战
开发语言·爬虫·python
喵手1 天前
Python爬虫实战:地图 POI + 行政区反查(合规接口) - 商圈热力数据准备等!
爬虫·python·爬虫实战·零基础python爬虫教学·行政区反查·地图poi·商圈热力数据准备
l1t1 天前
DeepSeek总结的DuckDB爬虫(crawler)扩展
数据库·爬虫
喵手1 天前
Python爬虫实战:电商问答/FAQ 语料构建 - 去重、分句、清洗,做检索语料等!
爬虫·python·爬虫实战·faq·零基础python爬虫教学·电商问答·语料构建