2011-04-26 80 views
5

我有一個嵌入了SWF(它本身包含AS3)一些AS3代碼:swf嵌入時會發生什麼?

[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); 
... 

在尋找如何閃光反編譯器(Trillix,所以思考,等等)看到這一點,他們只是顯示:

//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」)。

我的問題是:當它嵌入爲ByteArray時,SWF會發生什麼?並且任何反編譯器都支持提取嵌入的ByteArray?

注意:我沒有嵌入此SWF以混淆(還有其他原因)。我只是對嵌入的反編譯後果感興趣。

+0

我很確定SWF是一個zip文件。如果您將SWF上的擴展名(包含嵌入的SWF)更改爲zip;並解壓縮它你發現了什麼?我預計所有嵌入式資產都在那裏;作爲SWF zip中的元素。 – JeffryHouser 2011-04-26 19:11:58

+5

不,a * SWC *是一個zip文件。 SWF是它自己的二進制格式。 – paleozogt 2011-04-26 19:18:54

+1

已確認。我猜他們是相似的。 ;) – JeffryHouser 2011-04-26 20:34:04

回答

2

嵌入數據存儲在SWF文件的DefineBinaryData標記中。然後SymbolClass標籤將數據綁定到其定義。 (SWF file format specification

如果您要適當地解壓縮SWF文件(壓縮的SWF以CWS開頭並在前8個字節後使用zlib壓縮),您可以在原始數據中看到CWS或FWS頭。

這並不是說反編譯器如何處理數據。

0

如果我沒有記錯,當你反編譯第一個swf時,應該有一個資產鏈接。資產中應該有一個大的二進制文件,這是你的第二個swf。

我得回家試試。

0

我發現了一篇文章here,它詳細介紹了嵌入式SWF。看起來我無法在十六進制編輯器中找到嵌入的SWF,因爲父SWF已被壓縮。 ('CWS'表頭意味着它的壓縮。)