что происходит с swf-файлом при его внедрении?

#apache-flex #flash

#apache-flex #flash

Вопрос:

У меня есть некоторый код AS3, который внедряет SWF-файл (который сам содержит 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-файл? Просматривая его с помощью шестнадцатеричного редактора, я даже не могу найти начальный заголовок («CWS») встроенного SWF-файла.

Мой вопрос: что происходит с SWF-файлом при его внедрении в виде ByteArray? И поддерживают ли какие-либо декомпиляторы извлечение встроенного ByteArray?

Примечание: Я внедряю этот SWF-файл не для того, чтобы запутать (есть другие причины). Меня просто интересуют последствия декомпиляции при внедрении.

Комментарии:

1. Я почти уверен, что SWF-это zip-файл. ЕСЛИ вы измените расширение вашего SWF-файла со встроенным SWF на zip; и распакуете его, что вы обнаружите? Я ожидал бы, что все встроенные ресурсы находятся там; в виде элементов внутри zip-файла SWF.

2. Нет, SWC — это zip-файл. SWF-файл является собственным двоичным форматом.

3. подтверждено. Я предположил, что они похожи. 😉

Ответ №1:

Внедренные данные хранятся в DefineBinaryData теге SWF-файла. SymbolClass Тег затем привязывает данные к своему определению. (Спецификация формата файла SWF)

Если бы вы соответствующим образом распаковали тело SWF-файла (сжатые SWF-файлы начинаются с CWS и используют сжатие zlib после первых 8 байт), вы бы увидели заголовок CWS или FWS в необработанных данных.

Ничто из этого не говорит о том, как декомпиляторы обрабатывают данные.

Ответ №2:

Если я правильно помню, при декомпиляции первого swf-файла должна быть привязка к ресурсу. Где-то в ресурсах должен быть большой двоичный файл, это ваш второй swf-файл.

Мне нужно будет попробовать это, когда я вернусь домой.

Ответ №3:

Здесь я нашел статью, в которой подробно рассказывается о встроенном SWF-файле. Кажется, я не смог найти встроенный SWF-файл в шестнадцатеричном редакторе, потому что родительский SWF-файл был сжат. (Заголовок ‘CWS’ означает, что он сжат.)