浅谈wasm逆向

浅谈wasm逆向
dreamlandwasm初识
WASM 是 WebAssembly 的缩写,是一种低级的类汇编语言,旨在为 Web 浏览器提供高效、可移植的执行环境。它被设计为一种高性能的编译目标,允许开发者使用多种编程语言(如 C、C++、Rust 等)编写代码,然后将其编译为 WASM,在浏览器或支持 WebAssembly 的运行时(如 Node.js)中运行。
wasm逆向
案例网站:https://spa14.scrape.center/
加密参数确定
我们发现这个是sign值可能是加密的,再次翻页发现sign值不一样了
看下调用堆栈
是异步站跟的时候要细心点
发现sign出现了
1 | var n = (this.page - 1) * this.limit |
我们发现n值是页数-1和每页条数的乘积,e值是调用wasm的encrypt方法生成的
进入wasm里寻找encrypt方法
发现代码的颗粒度很大,这是汇编语言的特点之一由于我选的例子相对来说简单点,所以看起来比较清晰,实际上是比较复杂的
1 | (func $encrypt (;4;) (export "encrypt") (param $var0 i32) (param $var1 i32) (result i32) |
js算法还原
1 | function encrypt(var0, var1) { |
总结
wasm逆向的难度在于汇编语言的阅读和理解,需要一定的汇编基础和耐心
还是要熟悉汇编语言,才能更好的理解wasm代码
理解栈的工作原理(栈是先进后出),栈顶操作
下期我讲下ida来理解汇编语言







