Извлечение SWF дает ошибки компилятора в Adobe Flash CS4

Мне дали SWF для редактирования ссылки в коде AS. Дело в том, что SWF использует некоторый XML, который генерируется (фактически извлекается) кодом PHP из базы данных.

menuXML.load("/sub/page/dynamic.php?genre=" + genre); 

Таким образом, дело в том, что мы можем использовать один и тот же SWF-файл "mainfraim" и заполнять их различными анимациями / источниками на основе ссылки, представленной в dynamic.php?genre=###

Теперь я использовал Flash Decompiler Gold для извлечения всех файлов в SWF и могу снова открыть его в Adobe Flash для редактирования. Когда я закончу, я ввожу CTRL+ENTER, и сразу появляются 4 ошибки компилятора!! Ошибки: 1x <неожиданное 'если' встречено>2x <блок операторов должен завершаться '}'>1x <обнаружил имя поля после '.' оператор. >

Как могут присутствовать эти ошибки, когда оригинальный SWF работает отлично??!

Если мне не удастся решить эту проблему, мне придется выяснить, как создать файл.php, который SWF пытается использовать, который может выбрать подходящие ресурсы (из базы данных, я полагаю) для их отображения (используя? Genre=###)

Спасибо!

1 ответ

Решение

Я не уверен, что понимаю вашу проблему, но, похоже, вам нужно изменить URL, переданный методу load. Также кажется, что ваш swf - это Actionscript 2.0.

Декомпиляторы работают, но FLA-файл, который вы можете сгенерировать с помощью декомпилятора, редко будет полезен для генерации того же SWF-файла. Иногда код является незаконным, и почти всегда графика испорчена.

Однажды мне пришлось внести некоторые простые изменения кода (например, изменить несколько URL-адресов и другие простые вещи) в SWF, для которого у нас не было источников (они были потеряны и не было резервной копии...).

Я использовал для этого вспышку, и она работала нормально (к тому же это было не так сложно, как я сначала предполагал).

Flasm не декомпилятор, а дизассемблер. Он берет ваш swf, анализирует байт-код actionscript и генерирует текстовый файл с кодом, похожим на сборку. Вы можете отредактировать этот код и заново собрать SWF. Это не касается графики и анимации, поэтому это было то, что мне было нужно, и, возможно, могло бы сработать для вас.

Я сделал небольшой тест, и он работал нормально.

Я начал с этого кода в FLA:

var xml:XML = new XML();
xml.ignoreWhite = true;
xml.onLoad = function(ok:Boolean):Void {
    if(ok) {
        _debug_txt.text = "ok";
        _debug_txt.text = xml;
    } else {
        _debug_txt.text = "error";
    }
};

xml.load("/sub/page/dynamic.php");

Затем я открыл приглашение cmd (я на Windows), перейдите в каталог, содержащий swf, и запустите:

flasm -d test_flasm.swf > test_flasm.flm

Это разбирает swf в текстовый файл test_flasm.flm. Я добавил флэш в мой путь к исполняемым файлам, но вместо этого вы можете использовать полный путь к flashm.exe.

Соответствующая часть файла.flm выглядит так:

setMember
push '/sub/page/dynamic.php', 1, 'xml'
getVariable
push 'load'
callMethod

Ваш может отличаться, но если вы посмотрите на URL, вы найдете его. Затем изменил этот URL:

setMember
push 'test.xml', 1, 'xml'
getVariable
push 'load'
callMethod

Затем я снова собрал SWF, используя:

flasm -a test_flasm.flm

И теперь test_flasm.swf загружает "test.xml" вместо "/sub/page/dynamic.php".

Надеюсь это поможет.

Другие вопросы по тегам