Ghidra / IDA Pro 对 WebAssembly 二进制的逆向分析:如何识别 Wasm 函数、数据段,并将其转换为伪代码?

各位同学,晚上好!今天咱们来聊聊 WebAssembly 的逆向分析,目标是用 Ghidra 或者 IDA Pro 这两个大杀器,把 Wasm 里的函数、数据段扒个精光,再把它们变成我们看得懂的伪代码。准备好了吗?Let’s rock! 第一部分:Wasm 基础回顾——温故而知新 在深入逆向分析之前,咱们先简单回顾一下 WebAssembly 的基本结构,省得一会儿对着一堆 0 和 1 抓瞎。 模块(Module): Wasm 的基本单元,相当于一个库或者一个程序。一个模块包含多个部分,比如类型定义、函数、表、内存、全局变量、导出和导入。 类型定义(Types): 定义了函数的签名,包括参数类型和返回值类型。 函数(Functions): 实际的代码逻辑。每个函数都有一个类型索引,指向类型定义中的函数签名。 表(Tables): 存储函数指针,用于实现函数调用。 内存(Memory): 线性内存,Wasm 程序可以读写这块内存。 全局变量(Globals): 存储全局数据。 导出(Exports): 声明哪些函数、内存等可以被外部访问。 导入(Imports): 声明需要从 …