SWF ActionScript 字节码方法信息与 AVM2 规范不匹配

逆向工程 字节码 动作脚本 瑞士法郎
2021-06-30 03:51:02

我有一堆代表游戏中 UI 的 SWF 文件。它们中的大多数都包含 DoABC 标签,但是标签类型300不是82.

抛开这个麻烦,我根据官方的AVM2概述开始解析标签,发现结构有多个其他问题:

  1. 对于大多数方法flag值包含标志0x010x04(NEED_ARGUMENTSNEED_REST) 根据文档不能一起使用。
  2. 出于某种原因option_info.option_count总是大于param_count
  3. 如果我要忽略第 2 点并无论如何解析参数 - 大多数情况下的参数类型是不正确的(第 26 页)

这是示例字节码。0x2F表示方法计数。根据文档解析,在 0x12 处,您可以看到有 5 个参数,而 0x1b 告诉我们其中 7 个是可选的,这完全是无稽之谈,因为

[...] 可选参数的数量由 option_count 给出,它不能为零或大于 parameter_count [...]

在此处输入图片说明

我的猜测是300标签表示自定义标签,因此可以应用自定义解析规则,对于其他点,我会说字段的顺序发生了变化,并且标志以及参数计数和选项信息处于不同的偏移量。但是我怎么能确定某种解析方式是正确的呢?我不熟悉 ActionScript,也不知道方法名称、参数名称或参数类型是否有意义。

如果我们以上面的例子为例,根据文档解析它会导致0x01名为flash.events( 0x03)的第一个方法(地址)有 0 个参数(0x01),返回类型为fl.transitions.easing.Back0x02)和标志0x050x04

0个回答
没有发现任何回复~