用途:还原 .wasm 模块逻辑,如网页前端加密/校验、浏览器插件、游戏、恶意网页或供应链 JS 加载的 wasm 载荷;wasm 与 JS 胶水需一体分析。非 wasm 样本(native、.NET、Java、纯 JS)不适用;若模块可读性尚可,直接 wasm2wat 读 WAT 即可。
主要能力:识别 wasm 魔数 \0asm(00 61 73 6D)与版本 01 00 00 00;解析 Type/Import/Function/Table/Memory/Global/Export/Code/Data 等 section;反编译为类 C 伪码;浏览器 DevTools 下断点、单步、查看 JS↔wasm 调用栈;wasmtime/wasm3 动态调用导出函数并做黑盒差分。
工具与用法:WABT 提供 wasm2wat、wasm-decompile、wasm-objdump,安装如 apt install wabt、brew install wabt、choco install wabt;wasmtime 用 curl https://wasmtime.dev/install.sh -sSf | bash 或 brew install wasmtime、winget install BytecodeAlliance.Wasmtime;wasm3 可 brew install wasm3 或源码构建;binaryen 提供 wasm-opt、wasm-dis。常用命令:wasm-objdump -x sample.wasm、wasm2wat sample.wasm -o sample.wat、wasm-decompile sample.wasm -o sample.c、wasmtime run --invoke checkPassword sample.wasm '"test"'、wasm3 sample.wasm checkPassword test。浏览器侧可 python3 -m http.server 8000 起服务,F12 在 Sources 展开 .wasm。
限制与注意:动态运行默认沙箱,至少断网;字符串常量在 Data 段,代码中只见 i32.const 偏移;import 由宿主 JS 注入,敏感逻辑常在 JS 侧,需先还原 JS 胶水;i64 参数在 JS 边界须用 BigInt,wasmtime --invoke 不支持 BigInt;WASI 程序需显式授权 --dir、--env,浏览器与运行时行为可能不同;混淆样本可先用 wasm-opt 多轮优化还原。资料未提供收费、价格与效果信息。