.wasm 二进制文件本不是给人直接阅读的——但它可以被转换为 WAT(WebAssembly 的可读文本格式),并在指令流之外进行结构化分析。WASM 反编译器在浏览器中完全本地地完成这两件事。
先说清楚这个工具是什么、不是什么。 本工具不会恢复原始的 Rust、C 或 C++ 源代码——一旦编译器生成 WASM,那些信息就已经丢失了。它能够准确恢复的是:
- 完整的 WAT 反汇编,由
wabt(WebAssembly Binary Toolkit)生成,若模块带有 "name" 段则应用调试名称。 - 调用图,通过遍历每个函数的原始字节码寻找
call和call_indirect指令构建而成——而不是从 WAT 文本中猜测。call_indirect显示它所针对的函数类型签名,而绝不会显示一个猜测出的具体函数,因为真正的目标只有在运行时才能确定——这是代码本身的结构性事实,而不是本工具的局限。 - 每个函数的控制流结构:block/loop/if 的最大嵌套深度,以及各自的数量,无需完整的控制流图就能大致了解一个函数的结构复杂度。
- 基于证据的尽力而为的工具链推测——"很可能是 Rust"、"很可能是 Emscripten(C/C++)"或"很可能是 AssemblyScript"——都基于真实、可核实的证据:Rust 的名称修饰前缀、Emscripten 典型的运行时导入(
emscripten_*、__cxa_*、__wasm_call_ctors),或在模块数据段中找到的 AssemblyScript 标准库路径字符串~lib/。工具始终展示它找到的具体证据,并将结果表述为"很可能"——绝不断言确定,也绝不做毫无依据的猜测。
若某个函数的字节码使用了超出本工具建模范围的指令(SIMD、原子操作、批量内存操作),会被标记为"部分反汇编",而不是悄悄当作完整结果展示——对分析局限性的诚实比整洁的结果更重要。
适用于审计第三方 .wasm 模块的结构、理解其函数间如何相互调用,或在深入分析之前先对陌生的二进制文件有个初步了解。
Tiny Online Tools







