我有一些嵌入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以进行混淆(还有其他原因)。我只对嵌入的反编译分支感兴趣。
答案 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'标题表示其压缩。)