根据 Flash 反编译器的结果确定 ActionScript 版本

Determining ActionScript version based on results of a flash decompiler

我需要从应用程序中确定 SWF 文件的 ActionScript 版本,而不是使用另一个 SWF 来获取信息,并且在为此进行研究时,我遇到了 this flash 反编译器。

我用这个工具反编译了几个我已经知道的 ActionScript 版本的 flash 文件,我注意到 ActionScript 2 文件和 ActionScript 3 文件之间的区别。在这个截图中:(unfortunately I cannot post images yet),你可以看到名为 Cardio Sequence.swf 的底部 SWF 是一个 ActionScript 3 文件,在 scripts 文件夹中有一个名为 MainTimeline.

的文件

在我测试的所有文件中,ActionScript 3 文件都有这个 MainTimeline 文件,而 ActionScript 2 文件没有。有什么方法可以使此信息在另一个应用程序中以字符串的形式可读(即 if (scripttext.MainTimeline != null) {doSomething})?还是这甚至是确定 ActionScript 版本的可行方法?

SWF 文件中的 FileAttributes 标签包含一个标志,指示 SWF 使用 AVM1 (ActionScript 1.0/2.0) 还是 AVM2 (ActionScript 3.0)。如果省略此标记,则 SWF 用于 Flash Player 7 或更早版本并且只能是 AVM1。更多信息在 SWF specs.

您可以使用您选择的任何 SWF 解析库或反编译器来查找此标记。特定的 JPEXS 反编译器支持 command line options 将 SWF 标签列表、AS2、and/or AS3 脚本输出到文件。这包括 -dumpSWF-dumpAS2-dumpAS3 命令行参数。例如:

ffdec.bat -dumpSWF myfile.swf