0

我已经获得了一个 SWF 来编辑 AS 代码中的链接。事实上,SWF 使用了一些由数据库中的 PHP 代码生成(实际检索)的 XML。

menuXML.load("/sub/page/dynamic.php?genre=" + genre); 

所以关键是我们可以使用相同的 SWF 'mainfraim' 并根据 dynamic.php?genre=### 中提供的链接用不同的动画/源填充它们

现在,我已经使用 Flash Decompiler Gold 提取了 SWF 中的所有文件,并且可以在 Adob​​e Flash 中再次打开它进行编辑。完成后,我输入 CTRL+ENTER 并立即出现 4 个编译器错误!!错误:1x < 遇到意外的“if”> 2x < 语句块必须由 '}' 终止 > 1x < Ecpected a field name after '.' 操作员。>

当原始 SWF 完美运行时,这些错误怎么会出现??!

如果我无法解决这个问题,我将不得不找出如何创建一个 SWF 尝试使用的 .php 文件,该文件可以选择适当的资源(我猜是从数据库中)来显示它们(使用 ?genre= ###)

谢谢!

4

1 回答 1

3

我不确定我是否理解您的问题,但您似乎需要更改传递给 load 方法的 url。您的 swf 似乎也是 Actionscript 2.0。

反编译器有点工作,但是您可以使用反编译器生成的 fla 文件很少用于生成相同的 swf。有时代码是非法的,而且几乎总是图形被搞砸了。

我曾经不得不对 swf 进行一些简单的代码更改(比如更改一些 url 和其他简单的东西),但我们没有源代码(它们丢失了,也没有备份......)。

我为此使用了 flasm,它工作得很好(也没有我最初想象的那么难)。

Flasm 不是反编译器,而是反汇编器。它需要您的 swf,解析 actionscript 字节码并生成一个带有类似汇编代码的文本文件。您可以编辑该代码并重新组装 swf。它不涉及图形和动画,所以这是我需要的,也许可以为你工作。

我做了一个小测试,效果很好。

我从 fla 中的这段代码开始:

var xml:XML = new XML();
xml.ignoreWhite = true;
xml.onLoad = function(ok:Boolean):Void {
    if(ok) {
        _debug_txt.text = "ok";
        _debug_txt.text = xml;
    } else {
        _debug_txt.text = "error";
    }
};

xml.load("/sub/page/dynamic.php");

接下来,我打开一个 cmd 提示符(我在 Windows 上),cd 到包含 swf 的目录并运行:

flasm -d test_flasm.swf > test_flasm.flm

这会将 swf 反汇编为文本文件 test_flasm.flm。我已将 flasm 添加到我的可执行文件路径中,但您可以改用 flasm.exe 的完整路径。

.flm 文件的相关部分如下所示:

setMember
push '/sub/page/dynamic.php', 1, 'xml'
getVariable
push 'load'
callMethod

您的可能会有所不同,但如果您查找 url,您会找到它。接下来,将该网址更改为:

setMember
push 'test.xml', 1, 'xml'
getVariable
push 'load'
callMethod

然后,我使用以下方法重新组装了 swf:

flasm -a test_flasm.flm

现在,test_flasm.swf 加载“test.xml”而不是“/sub/page/dynamic.php”。

希望这可以帮助。

于 2010-04-24T17:09:37.893 回答