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

猿人学js逆向比赛第一届第二十题

分析请求

image-20250712084727685

通过堆栈可以快速定位到这里,,那么sign,就是调用的sign函数生成的了。

image-20250712084845620

通过在控制他输出sign快速定位到这个函数,在这里下个断点调试看一下。

image-20250712085033915

跟到这里了,并没有看到有什么疑似密文的产生,那么大概率就是在这个函数中做的了,那么在跟到这个函数里面看一下。很明显看到了wasm的特点,那么接下来就是分析这个wsam是在哪里加载的。

image-20250712085202840

二、分析wasm

image-20250712085728494

通过关键字定位,我定位到了这里进行的赋值操作,同时看到了webpack3的特征值,那么这里就可以推测这实际上是一个webpack3打包的加载wasm的代码。

image-20250712085928864

这里通过定位加载器,也是顺利找到了wasm加载的位置。那么这里只需导出这个importObject到本地就行了。

image-20250712090112681

这里通过这个importObject也是定位到了这里,但是可以看到这里的对象里面每个key所对应的value实际上并不是真正的函数体,那么这里全局搜索关键字看一下能不能搜到,实际上就是本节一张图中的位置。

image-20250712183856679

那么这里直接将函数拿下来,然后这样导入这些函数到这个对象中。

image-20250712184013773

直接运行发现报错Window未定义,那么这里上代理补环境是不是就行了。最终补的环境如下:

window = global;Window = function (){};
window.__proto__ = Window.prototype;window.top = window;
window.self = window;document = {body:{},
};

剩下就是传入相同参数和浏览器对比一下得到的结果是否一致。

image-20250712184604893

可以看到得到的结果是一致的,那么封装发送请求,最终成功出值。

image-20250712185041659

三、分析wasm(2)

本节为记录另一种分析wasm的方式,通过追到这个函数里面,在这里分析sign的生成。

image-20250712194525118

这里传入的是两个地址,一个长度,那么在内存中对应的是什么呢?

image-20250712194401033

第二个参数就是传进来的这个content的在内存中的起始地址,第一参数现在所对应的地址是空的,那么继续向下跟。

image-20250712195046516

这里跟到了有一个sign的函数调用,同时穿的参数还是刚开始掉本自己的这三个参数,那么追进去看一下。

image-20250712195549186

最终定位到这里,那么在后面拼接了一个D#uqGdcw41pWeNXm,然后进行了hash,然后再往下就没有看到别的什么意思加密算法的了。

String.fromCharCode.apply(null,new Uint8Array(memories[0].buffer.slice(1114192,1114192+31)))  // 通过这种方式将内存中字符串提取出来

那这里将字符串拼接后的字符串进行hash,看一下得到的结果是否就是sign这个参数

image-20250712200458276

image-20250712200509539

发现是一样的,现在就多次测试,最终确定实际上就是在传入的字符串后面添加了那个盐值,然后进行的md5。再次请求测试,可以看到是没问题的。

oXM1-1752322205403)]

发现是一样的,现在就多次测试,最终确定实际上就是在传入的字符串后面添加了那个盐值,然后进行的md5。再次请求测试,可以看到是没问题的。

http://www.dtcms.com/a/276563.html

相关文章:

  • 关于赛灵思的petalinux zynqmp.dtsi文件的理解
  • 二叉树算法进阶
  • 《Spring 中上下文传递的那些事儿》Part 8:构建统一上下文框架设计与实现(实战篇)
  • 深入理解设计模式之工厂模式:创建对象的艺术
  • Pandas 模块之数据的读取
  • 暑期前端训练day6
  • 【人工智能99问】开篇!
  • 【leetcode】1757. 可回收且低脂的产品
  • FastAdmin项目开发三
  • Python数据容器-集合set
  • 什么是 Bootloader?怎么把它移植到 STM32 上?
  • 关于两种网络攻击方式XSS和CSRF
  • 车载操作系统 --- Linux实时化与硬实时RTOS综述
  • 格密码--数学基础--06对偶空间与对偶格
  • 建造者模式(Builder)
  • Python 实战:构建可扩展的命令行插件引擎
  • Java 方法重载与构造器
  • 【Python练习】039. 编写一个函数,反转一个单链表
  • CSP-S 模拟赛 10
  • pytest自动化测试框架实战
  • 【王树森推荐系统】行为序列01:用户历史行为序列建模
  • Java责任链模式实现方式与测试方法
  • Python爬虫实战:研究xlwt 和 xlrd 库相关技术
  • 【理念●体系】迁移复现篇:打造可复制、可复原的 AI 项目开发环境k
  • 笔试题库 | 亿纬锂能社招大易笔试测评题库考点分析及真题整理
  • 张量拼接操作
  • 【IT-Infra】从ITIL到CMDB,配置管理,资产管理,物理机与设备管理(含Infra系列说明)
  • QML与C++相互调用函数并获得返回值
  • 2025 年 4-6 月大模型备案情况分析
  • [ABC267F] Exactly K Steps