📙WebAssembly(wasm)逆向记录
00 分钟
2024-9-3
2024-9-3
type
status
date
slug
summary
tags
category
icon
password
😀
在现代Web安全中,WebAssembly(WASM)因其高效性和跨平台特性被广泛应用于浏览器端的加密和数据处理。本文详细记录了逆向分析一个使用WebAssembly加密的登录接口的过程,目标是获取登录请求中关键的sign值。通过结合JavaScript和Python技术栈,我们不仅成功破解了加密逻辑,还总结了一套通用的逆向思路和方法,适用于类似的WASM逆向工程场景。

WebAssembly(wasm)逆向记录

notion image

前言

啥是WebAssembly就不多说了,自己去看吧。

目标网站

aHR0cHM6Ly93d3cud2FpbWFveGlhLm5ldC9sb2dpbg==

逆向目标

主要目标获取登录接口的sign值。

调试环境

python:版本3.9.13
node:版本v18.15.0
pip isntall pyexecjs

请求分析

notion image

0x0

网站无防护,很容易就找到加密点,这里就略过,这不是本文的重点,最终发现是window.sign进行加密的。直接在控制台敲window.sign,然后按住Ctrl键不放,鼠标点击一下输出的函数直接跳到加密代码位置(文件名wasm_exec_v2.js)。

0x1

wasm_exec_v2.js文件简单分析,没有加密,还做了浏览器和node环境的兼容,简直太nice了,也就是说node直接能跑通。关键代码分析下
找了一下,发下浏览器加载过一个main.wasm。那就直接在控制台重发一下请求,为了流文件粘贴复制,直接转一下格式,用到的时候代码还原一下
改一下wasm_exec_v2.js文件就直接能跑出结果了
直接跑上面的代码可得到结果node wasm_exec_v2.js

0x2

面临的问题是由于 WebAssembly.instantiate 是一个异步操作,而 pyexecjs 是同步执行的,因此在 WebAssembly.instantiate 完成之前,pyexecjs 就已经尝试调用 sign 方法了。为了解决这个问题,你可以通过使用 console.log 输出结果,然后在 Python 中捕获这个输出,从而达到获取结果的目的。操作如下:

解释

  1. 异步处理
    1. WebAssembly.instantiate 是异步的,因此需要使用 .then() 来确保在 WebAssembly 实例化完成后,再执行 sign 方法。
  1. 使用 console.log 输出结果
    1. 通过 console.log(JSON.stringify(["ok", sign(...)])),将结果输出为 JSON 格式。这样,Python 可以通过 pyexecjs 捕获 console.log 的输出,并进一步解析 JSON 来获取结果。
  1. Python 端捕获输出
    1. 在 Python 端,你可以通过 pyexecjs 来执行这个 JavaScript 代码,并获取 console.log 的输出,进而解析并获得 sign 方法的返回值。
搞定!

免责声明

本代码仅用于学习,下载后请勿用于商业用途,对于违反相关法律、造成危害的滥用行为,不负任何责任。
notion image
上一篇
Selenium无头模式 -多种语言设置方法
下一篇
从零到一通杀框架构造(一)

评论
Loading...