swf嵌入时会发生什么?

时间:2011-04-26 19:01:14

标签: flex flash

我有一些嵌入SWF的AS3代码(它本身包含AS3):

[Embed(source="/assets/myas3libswf.swf", mimeType="application/octet-stream")]
protected static const MyAs3LibSwfClass : Class;  
...
var loader:Loader= new Loader();
loader.loadBytes(new MySwfClass() as ByteArray);
...

在查看Flash反编译器(Trillix,So-Think等)如何看待它时,它们只显示:

//MyClass_MyAs3LibSwfClass
package mypackage 
{
    import mx.core.*;

    public class MyClass_MyAs3LibSwfClass extends mx.core.ByteArrayAsset
    {
        public function MyClass_MyAs3LibSwfClass()
        {
            super();
            return;
        }
    }
}

他们似乎也没有提供任何方法来提取ByteArray。

当然,混淆AS3代码并不容易。但SWF去了哪里?使用十六进制编辑器查看它,我甚至找不到嵌入式SWF的起始标题(“CWS”)。

我的问题是:当SWF作为ByteArray嵌入时会发生什么?并且任何反编译器都支持提取嵌入的ByteArray吗?

注意:我没有嵌入此SWF以进行混淆(还有其他原因)。我只对嵌入的反编译分支感兴趣。

3 个答案:

答案 0 :(得分:2)

嵌入数据存储在SWF文件的DefineBinaryData标记中。然后SymbolClass标记将数据绑定到其定义。 (SWF file format specification

如果您要适当地解压缩SWF主体(压缩的SWF以CWS开头并在前8个字节后使用zlib压缩),您将在原始数据中看到CWS或FWS标头。

这些都没有说明反编译器如何处理数据。

答案 1 :(得分:0)

如果我没记错的话,当您反编译第一个swf时,应该存在与资产的链接。资产中应该有一个大的二进制文件,这是你的第二个swf。

当我回到家时,我将不得不尝试这个。

答案 2 :(得分:0)

我发现了一篇文章here,其中详细介绍了嵌入式SWF。我似乎无法在十六进制编辑器中找到嵌入式SWF,因为父SWF已被压缩。 ('CWS'标题表示其压缩。)