#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’ означает, что он сжат.)