WebAssembly逆向

发布时间 2023-04-02 17:59:03作者: eliwang

一、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