用idawasm IDA Pro逆向WebAssembly模块

简介本文介绍idawasm,为WebAssembly提供加载器和处理器的IDA Pro插件。Idawasm可以允许在所有支持IDA Pro的操作系统上,下载地址为https://www.github.…

介绍 本文介绍了idawasm,这是为WebAssembly提供加载器和处理器的IDA Pro插件。 Idawasm适用于支持IDA Pro的所有操作系统,网址为https://www.github.com/fireeye/idawasm。 今年的Flare-On挑战中出现了一种新的文件格式:WebAssembly(“wasm”)模块。因此,需要颠倒基于WebAssembly堆栈的虚拟机中的二进制文件中包含的关键逻辑。所以首先你需要知道wasm: WASM是WebAssembly的全名,是一种技术解决方案,可以用非Java编程语言编写并在浏览器上运行。它也是自Web以来的第一个Java本机替代品。 虽然WebAssembly是一个新标准,但也有一些分析工具: WebAssembly Binary Toolkit:提供命令行工具wasm2wat,它将.wasm文件转换为更易读的.wat格式。 基于Web的WebAssembly Studio IDE:可以提取.wasm文件中的功能并将其转换为其他格式,包括x86-64翻译。 Radare2:指令可以分解,但控制流图不能重建。 但这些工具并不常用或熟悉。如果您可以在IDA Pro中分析.wasm文件,则可以更好地应对通过WebAssembly传播的恶意软件。 idawasm IDA Pro插件是一个加载器和处理器模块,允许分析人员使用熟悉的界面检查WebAssembly模块。 Idawasm 从对等方接收数据时失败 帧)。当函数开始执行时,前几条指令在全局堆栈中分配帧,然后在返回之前清除它们。 Idawasm将自动找到对全局帧堆栈指针的引用,并重建每个函数的帧布局。利用该信息,处理器更新IDA的堆栈帧结构,并且在这些结构中,偏移被标记为立即。 不变。这意味着更多的指令操作数实际上是可以注释和重命名的符号(标记),如图4所示。

图4:自动重建功能框架 WebAssembly编译器省略了引用单一静态分配(SSA)表单中的变量的指令。这对浏览器引擎很有用,因为SSA表单中的代码更容易输入到分析系统中。使用SSA表单是因为最简单的函数还具有数十到数百个局部变量。 但对于分析师来说,SSA格式难以分析。因此,idawasm包含一个WebAssembly模拟器,可以在符号级别跟踪符号。这允许分析人员将简单但相关的指令序列拆分为复杂表达式。 您还需要在单个基本块中选择命令区域并运行wasm_emu.py脚本。脚本模拟指令,简化效果,渲染全局变量,局部变量,内存和堆栈效果。图5显示了简化为全局变量更新的函数:

图5: wasm_emu.py表达式功能帧分配效果 当有许多算术运算时,wasm_emu.py被简化为表达式。例如,图6显示了32个指令通过2个输入字节变为XOR的过程:

图6: wasm_emu.py将多个简单指令简化为一个复杂指令 结论 Idawasm是一个IDA Pro插件,通过加载器和处理器支持WebAssembly模块。因此,分析师使用熟悉的界面来反转.wasm文件。 Wasm_emu.py可以帮助理解WebAssembly指令流的效果。现在处理这种新的文件格式和架构要容易得多。 作者:angel010,转载自:https://xz.aliyun.com/t/2854 英文原文:https://www.fireeye.com/blog/threat-research/2018/10/reverse-engineering-webassembly-modules-using-the-idawasm-ida-pro-plugin.html