当前位置: 首页 > news >正文

【爬虫JS逆向之旅】某9安全中心登录参数逆向 - 1(验证接口篇)

既然走了这么远了,干脆再走远一点。 -- 电影《肖申克的救赎》


📓 前言

特别声明,本文所提供的逆向思路及代码仅供学习参考使用,请勿使用爬虫脚本对网站进行高频率以及高并发数据抓取操作,若对网站造成损失的,后果自负!!!

📖 网址

aHR0cHM6Ly9hcS45OS5jb20vVjMvTkRVc2VyX0xvZ2luLmh0bQ==

🔎 观察

首先是接口中的参数

我的习惯是先全局搜索一下这些值,看一下哪些是接口返回的

  • appKey

这是固定在JS文件中的,所以不用去逆向。

  • behaviorData需要逆向
  • d是接口返回,但并非固定值,是点击登录时接口返回的,加密的参数可能携带账号/密码,本文章先固定,后续会出文章讲

  • token是接口/get返回的值,也无需逆向

以此类推,其余的值都需要逆向,观察完毕。

🚀 技术前瞻

在开始逆向之前,我需要简单介绍一下但我们在JS逆向的过程中遇到wasm的时候,该怎么进行简单的判断和处理。首先,wasm是什么,简单来说,浏览器中的专属语言是Javascript,那么如果我用CC++这种不支持在浏览器中直接执行的语言写了一个方法,我想要在JS中调用这个方法,该怎么办?于是就会使用到wasm技术,将我们写的C/C++文件编译成wasm文件,在JS中调用以此解决我的需求。我们作为逆向者,关注的是它的初始调用位置,以便我们进行后续的逆向操作。

wasmJS语言中的调用方式:

方法一:使用WebAssembly.instantiateStreaming调用

  • 特征代码
WebAssembly.instantiateStreaming(wasm_code, importObject);
  • 这种调用方式,wasm_code参数需要流式加载Wasm文件,也就是用fetch请求网页中提供的.wasm文件链接,而importObject则是可选模块,有的代码中不需要,有的需要,要根据具体代码进行补充。
  • 这种调用方式我在逆向过程中很少用,因为既然能找到wasm文件的链接,我直接下载下来用下面讲到的WebAssembly.instantiate直接调用就行了,免去网络请求这一步。

方法二: 使用WebAssembly.instantiate调用

  • 特征代码
WebAssembly.instantiate(wasm_code, importObject);
  • 这种调用方式是在网页中明确找到了wasm文件时的常用方法,先把wasm文件下载下来,然后用fs读取wasm文件的二进制数据,赋值给wasm_code就行了,而importObject和方法一中的相同。

方法三使用编译生成的胶水文件调用

  • 特征代码
const result = Module.ccall('add', 'number', ['number', 'number'], [10, 20]);
  • 这种调用方法主要是使用Emscripten等工具将C/C++代码编译成一份胶水文件(xxx.js,一般与wasm文件同名)和一份wasm文件(xxx.wasm),我们的主要目标是找到胶水文件,必要时还要找到对应的wasm文件。

🎮 正文

首先,我先介绍behaviorData逆向过程,我用的关键字搜索,主要是快🤭

断住的位置就是生成的地方

这段代码的逻辑是,执行等号后面的异步回调,将返回值中的behaviorData赋值给z,将返回值中的tqdna赋值给C

这里需要注意的是,异步只有在执行完毕之后才会返回值,如果你要查看这个方法返回的最终值的话,可以将断点打在它的下方

  • z

  • C

其实这个C值就是参数中的d值,我们暂且不管,重要的是behaviorData的生成位置,主要是这个e方法

点进去,然后触发断点

步入t[e(178)]方法

看出来了么,这不就是前面说的wasm调用的第三种方法的特征代码么。

Module是什么?其实就是这个this.jsonEncryptor,因为在这里它调用了ccall

那这个this.jsonEncryptor从哪来,在代码上方可以找到

但是你如果去找JsonEncrypt时,在本JS文件中找不到的,因为它是其它文件外调过来的,也就是胶水文件,具体你随便点入它下面定义的方法可以找到

代码收起来就可以看到

既然胶水文件找到了,那对应的wasm文件呢,我没找到😂,但我经过跟AI的不断对线中,知道了有一种情况不需要wasm文件,那就是在胶水文件中有调用wasm文件的代码,特征就是文件中有类似于base64编码形式的wasm数据流

这个时候,我们只要有胶水文件就可以了

现在把需要的代码先复制到本地

t是什么,是轨迹信息,这里不做介绍,后续会出文章,这里先固定

再把混淆的处理一下

调用的代码如下

将这里的this.jsonEncryptor替换为Module

运行

没有数据?忘了说了Module是一个异步对象,需要用then调用

成了?没那么简单,注意这个o值,打印一下

看浏览器中的值

为了确定这个值是不是固定的,可以加个日志点

那么可以确定,我们的代码有问题,询问了AI后,猜测是环境的问题,用jsdom模拟环境

结果

猜的没错,至此,behaviorData的逆向告一段落。

接下来就是signnonce值,主要生成方法为i.getSign

nonce的值可以确定是时间戳

C值感觉是MD5,看一下参数,A在代码上方,是固定值,这里其实也定义了sessionId

主要是这个(0, E.MD5)到底是不是MD5加密

那没什么好说的,用原生加密方法就行了。

接下来还剩一个pointJson

主要方法看i.encryptPointData,传入的值为坐标点信息,这个统一放在后续轨迹生成的文章中去讲,这里先固定

进入方法

接着是这个t.encryptData

是不是很眼熟,其实就是上面behaviorData的加密函数,共用的,只不过传入的值不同,加密出来的值就有所不同。

好了,关于验证接口的参数逆向就此结束,接下来其它的接口逆向我会在后续更新,可以给本菜鸟关注❤ 一波,以便获得最新的文章推送。^_^


更多有趣内容,可关注wx公众号“小恰学逆向”,分享一些爬虫JS逆向技术以及有趣的工具。(●´ω`●)ゞ

http://www.jsqmd.com/news/482175/

相关文章:

  • 大数据领域Doris在农业科技领域的作物生长数据分析
  • 基于SpringBoot和Vue的校园二手书交易系统设计与实现
  • 不同场景下的函数传参方式推荐
  • 《Dream to Control: Learning Behaviors by Latent Imagination》随记
  • 基于SpringBoot的足球赛事社区互动网站设计与实现
  • 基于SpringBoot的智能旅游行程规划系统设计与实现
  • 传递闭包
  • 基于SpringBoot的艺术作品展示平台设计与实现
  • 关于 MySQL 的锁,你真的分清楚了吗?
  • 实现大数据领域数据合规的策略指南
  • 基于双层共识控制的直流微电网优化调度附Matlab代码
  • java学习第三天
  • 【单调栈】LeetCode 42. 接雨水
  • 基于随机奇异值分解和软阈值的大数据集中健壮高效的谐波去噪附Matlab代码
  • 如何从互联网上免费下载歌曲
  • 分片请求视频,然后播放,能解决视频文件超大导致浏览器崩溃卡死的问题吗?
  • 什么是前置mp4?
  • 基于天牛群算法优化ELM的功率预测研究附Matlab代码
  • 基于鹈鹕优化算法(POA)的支持向量机(SVM)时序预测模型研究附Matlab代码
  • 当麻雀学会三角函数:SCSSA-BiLSTM分类模型实战手记
  • 第七章 回溯算法part01
  • 数字员工和AI销冠系统是什么?它们在企业智能化运营中的优势与应用是什么?
  • 基于线性准则的考虑风力发电不确定性的分布鲁棒优化机组组合附Matlab代码
  • 公共数据资源挖掘:TCGA、GEO、ENCODE、GTEx——如何利用公开数据开展二次研究?
  • “土木人转行软件测试学习第10天”-流程管理平台(JIRA)
  • 2026年3月亲子西双版纳住宿推荐,这些地方值得一住!目前排行前列的西双版纳住宿源头厂家有哪些聚焦优质品牌综合实力排行 - 品牌推荐师
  • 本月刮板输送机产品排名,看看哪些表现突出,排行前列的刮板输送机排行综合实力与口碑权威评选 - 品牌推荐师
  • 微信JS-SDK分享权限验证失败?“offline verifying”错误排查全攻略
  • 速看!2026年3月刮板输送机优质产品排行榜,市面上头部刮板输送机厂商优质品牌榜单更新 - 品牌推荐师
  • 文件头标识