WebAssembly逆向
一、WebAssembly
-
简介
- WebAssembly是一种可以使用非JavaScript编程语言编写代码,并且能在浏览器上运行的技术方案。借助Emscripten编译工具,能将C/C++文件转成wasm格式,JavaScript可以直接调用该文件并执行其中的方法。
-
好处
- 可以隐藏核心逻辑,增大逆向难度
- 提高执行效率(基于C/C++编写)
二、解决方案(模拟执行)
-
python模拟执行wasm库
- 一、pywasm:使用简单
- 二、wasmer:功能更强大
-
pywasm使用
-
安装
pip3 install pywasm
-
使用
import pywasm runtime = pywasm.load('./Wasm.wasm') # 加载wasm文件 result = runtime.exec('encrypt', [10,200]) # 通过runtime.exec()执行wasm文件中的方法,参数1:方法名,参数2:传入该方法的参数列表 print(result)
示例中Wasm.wasm文件下载地址:https://spa14.scrape.center/js/Wasm.wasm
-
-
wasmer使用
-
安装
pip3 install wasmer pip3 install wasmer-compiler-cranelift
-
使用
from wasmer import engine,Store,Module,Instance from wasmer_compiler_cranelift import Compiler store = Store(engine.JIT(Compiler)) # 声明一个Store对象 module = Module(store, open('./Wasm.wasm', 'rb').read()) # 将wasm转化为Module对象 instance = Instance(module) # 将其转化为Instance对象 result = instance.exports.encrypt(10, 200) # 调用encrypt方法,并传入参数 print(result)
-
更多API:
- 参考:https://wasmerio.github.io/wasmer-python/api/wasmer/wasmer.html
-