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

前言
啥是WebAssembly就不多说了,自己去看吧。
目标网站
aHR0cHM6Ly93d3cud2FpbWFveGlhLm5ldC9sb2dpbg==
逆向目标
主要目标获取登录接口的
sign
值。调试环境
python:版本3.9.13node
:版本v18.15.0pip isntall pyexecjs
请求分析

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 中捕获这个输出,从而达到获取结果的目的。操作如下:解释:
- 异步处理:
WebAssembly.instantiate
是异步的,因此需要使用 .then()
来确保在 WebAssembly 实例化完成后,再执行 sign
方法。- 使用
console.log
输出结果:
通过
console.log(JSON.stringify(["ok", sign(...)]))
,将结果输出为 JSON 格式。这样,Python 可以通过 pyexecjs
捕获 console.log
的输出,并进一步解析 JSON 来获取结果。- Python 端捕获输出:
在 Python 端,你可以通过
pyexecjs
来执行这个 JavaScript 代码,并获取 console.log
的输出,进而解析并获得 sign
方法的返回值。搞定!
免责声明
本代码仅用于学习,下载后请勿用于商业用途,对于违反相关法律、造成危害的滥用行为,不负任何责任。

- 作者:猿榜编程
- 链接:https://www.yuanbang.lol//article/51a81d9a-0ff4-46a1-a622-b8c6ee84639d
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。