2017-06-22 20 views
1

我想根据webassembly的模块结构doc识别wasm二进制模块的每个部分。我已经做了那些recognizations的一部分,如下面所示:Webassembly的二进制代码结构混淆

screenshot

在红色代码被标记为“魔码”;

暗橙色的代码被标记为“版本号”;

淡黄色的代码被标记为第一部分的“id”;

深绿色的代码被标记为“有效载荷长度”,其为“varuint7”格式;

我不知道如何识别下面的部分,有点混淆哪部分是“有效载荷数据”? “最后一部分的结尾必须与模块的最后一个字节一致”的含义是什么?在官方文档中写道。

回答

1

我建议看看现有的WebAssembly二进制解析器来帮助理解。这里是the WebKit one

每个部分都以详细的​​的部分特定的方式解码。你看看idpayload_length,然后根据部分ID解码相应的部分。从该页面部分号码:

  1. 类型
  2. 进口
  3. 功能
  4. 内存
  5. 全球
  6. 出口
  7. 开始
  8. 代码
  9. 数据

另外,0是 “定制”。

转到每个部分的描述,以了解如何解码它们。 “

”最后一部分的结尾必须与模块的最后一个字节重合。“意味着如果你解码一个部分,并且解码后的长度与有效载荷数据不匹配,那么这是一个验证错误。

+0

是否可以从javascriptcore中提取所有这些解析逻辑,并将其构建为独立程序,重点分析wasm模块? – YHSPY

+0

是的。你必须使用它创建的'ModuleInformation',并且基于当前的CRTP方法实现你自己的'FunctionParser'(它已经被使用了两次:一次用于正常解析,一次用于不可达)。当然,搞清楚许可证也取决于你自己。 –

+0

谢谢!其实这对我来说真的很难实现,但值得做! ;) – YHSPY