Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Flash, Flex, ActionScript > Компиляции декомплированного SWF файла


Автор: Харч 26.08.13, 14:18
Добрый день, уважаемые форумчане.
Моя система: Windows 8 x64.
Решил попробовать декомпилировать SWF файлы и изменять их.
Раньше я это делал flasm16win декомпилятором, смотрел код, состоящий из инструкция на уровне ассемблера (как я понял), и менял некоторые куски. Но этот декомпилятор декомпилировал не все SWF файлы. Я поискал и нашёл конвертеры SWF в FLA. А именно Trillix и Sothink SWF Decompiler (везде качал последние версии). Первый у меня не смог декомпилировать многие файлы (просто падал с ошибкой). Второй отлично конвертирует. Далее, я открываю полученный проект в Adobe Flash Professional CS6, а дальше начинаются проблемы. Первая такая: прямо с нуля ничего не компилируется, выдаются ошибки, надо подбирать правильную версию Flash и Action Script. Но это ладно, подбираю, не страшно, так же исправляю пару ошибок со скобками и синтаксисом. Всё компилируется нормально. Но далее - те проекты, где декомпилируется так, что Action Script сценарии лежат в отдельных файлах (а не в .fla файле), он компилирует, но при запуске либо повторят 5 начальных кадров, либо ничего не показывает. В самом .fla файле на таймлайне в данных проектах и находятся те 3 - 4 кадра, которые он показывает. Не очень понимаю, что делать в данном случае. Может, я что-то не так компилирую?
Помогите, пожалуйста. Спасибо!

P.S. сам я на флеше не программировал никогда, в этой среде не работал. Сами сценарии менять могу, так как более 8-ми лет занимаюсь программированием на таких языках, как C++, PHP, JavaScript.

Автор: focusnick 26.08.13, 14:39
У вас там явно Runtime ошибки. А вообще что вам надо в swf поменять? Если только код - то обычно без проблем можно обойтись без перекомпиляции.

Автор: Харч 26.08.13, 15:11
Мне, действительно, надо поменять только код. Но, если честно, я думал наоборот - для смены ресурсов перекомпиляция не нужна, а для смены кода - нужна. Если же нет - подскажите, пожалуйста, как можно менять код, не декомпилируя файл.
Так же не понял, где runtime ошибки, так как всё по сути декомпилируется и потом компилируется нормально. Другое дело, что не работает :(
А вот если нет файлов внешних со сценариями - компилируется нормально.

Автор: focusnick 26.08.13, 15:42
Runtime ошибки на то и Runtime - оно скомпилируется, но ошибки во время выполнения не дадут флешке нормально работать.
Если вам надо править as3 - RABCDAsm в руки и вперед - править байткод.

Автор: Харч 26.08.13, 15:45
Проблема в том, что в байт-коде надо копаться и искать с помощью отладчика, где и к чему какие инструкции. При декомпиляции же код виден полностью и его легко менять.
Неужели sothink decompiler неправильно декомпилирует?

Автор: focusnick 26.08.13, 16:05
Ну так пользуйтесь и декомпилятором и дизассемблером.
В декомпиляторе найдите код, который хотите изменить, и изменяйте его в дизассемблере на здоровье. Если вам надо поменять половину кода, то конечно такой метод не удобен, но если надо поправить небольшие участки, то вполне пригодный вариант.

Ну, либо восстанавливайте исходники и исправляйте ошибки декомпилятора, если они есть, чтобы оно нормально заработало. Для этого обычно требуются опеределнные знания и навыки работы с флешом.

Автор: Харч 26.08.13, 16:08
Дело в том, что при компиляции проекта сценарии из внешних файлов просто не вносятся в конечный результат. Если я потом декомпилирую результат компиляции декомпилированного - сценариев в нём уже нет. Вот я и спрашиваю, фактически это вопрос по среде компиляции - как сделать так, чтобы он видел эти файлы?

Автор: focusnick 26.08.13, 16:10
Проверить, прописан ли документ класс, проимпортированы ли нужные классы и т.д. - причин может быть много.

Автор: Харч 26.08.13, 16:20
Что значит прописан документ класс? все нужные классы импортированы, так как компиляция проходит успешно.
Могу кинуть пример проекта. Думаю, во всех таких случаях проблемы одни и те же.

Автор: focusnick 26.08.13, 16:24
Если вы не пропишете документ класс - оно будет компилиться, но только то, что в FLA.
Мне сейчас некогда будет смотерть, но лучше все равно выложить проблемный проект - может у кого-то найдется время, ну или я как освобожусь погляжу.

Автор: Харч 26.08.13, 16:34
Окей, выкладываю. И проект, и исходную флешку.
При декомпиляции sothink swf decompiler рекомендовал делать это в CS4 (я принял его рекомендацию). Конвертировал в FLA. Анализ точности движения высший.
Далее открыл в CS6 и изменил параметры публикации так (было: Flash Player 11.4, Action Script 3.0; стало: Flash Player 11.4, Action Script 1.0), чтобы компилировалось без ошибок. Результат публикации так же лежит в корне проекта.
P.S. открыл консоль разработчика ( F9 ) и там не нашёл ни одного сценария. Все сценарии лежат в файлах около .fla файла (ну и в подпапках).

Исходный SWF файл: user posted image
Его конвертация в FLA (плюс результат публикации около файла проекта): user posted image

После компиляции проекта он получается как ролик, не содержит сценариев. Я декомпилирую потом скомпилированный мною файл и получаю чисто FLA файл с ресурсами, БЕЗ файлов со сценариями.

Автор: focusnick 26.08.13, 17:03
Ага, а зачем AS 1.0 поставили? AS3 - координально отличается от 1-2. Если в swf изначально as3 - надо его и оставить в настройках паблиша.

Автор: Харч 26.08.13, 17:17
Дело в том, что при AS3 он не компилируется и выдаёт кучу ошибок. Причём вроде бы AS3 стоит по умолчанию на всех декомпилированных. На AS1 он спокойно компилирует. Аналогичная ситуация была с другим SWF файлом, который декомпилировался БЕЗ внешних сценариев, всё внутри FLA было. Там так же стоял AS2 и Flash 6. Он не компилировался. Поменял на AS1 - стал компилиться, но не работал. Поменял на Flash 5.0 и AS1 (точнее на AS1 он сам поменялся) - отлично скомпилировалось и заработало.

Автор: focusnick 26.08.13, 17:29
В этой SWF код на as3 - надо исправлять ошибки декомпилятора, и не забудьте про шрифты, если вам нужно восстанвоить флешку качественно.
Я посмотрел проект - восстановить его вполне можно, но у меня нет на это свободного времени. Либо обращайтесь к специалисту, кто сделает это платно, либо правьте байткод, если не весь код переписать вам там надо.
Ну или пытайтесь допилить все сами, если есть на это время и тяга к новым знаниям.

Автор: Харч 26.08.13, 17:38
Разумеется, я буду пилить всё сам :)
Но тогда я не понимаю - почему выскакивают ошибки на AS3, на AS1 всё отлично?
И при исправлении ошибок AS3 все файлы сами подключатся и проект скомпилируется с ними?

Автор: focusnick 26.08.13, 17:43
Потому, что ошибки в as1 и as2 никак не отображаются. Это, кстати, относится к окончанию последнего предложения.
Если проект настроен корректно (пути до классов прописаны нормально, документ класс указан и проч.), то после исправления ошибок (если все исправить как надо) оно должно скомпилироваться нормально, ну, если декомпилировалось более-менее корректно (декомпиляторы иногда такое выкидывают!).

Автор: Харч 26.08.13, 18:10
Гм, хорошо, попробую. Спасибо.

Автор: Psijic 04.08.16, 09:58
Приветствую. Не некропост, но новый виток темы: собираюсь использовать связку JPEXS + Intellij Idea. Очень неплох JPEXS, но хотелось бы ускориться в прогрессе с помощью Idea. Вопрос встал пока- как собрать разобранный файл, игнорируя ошибки.

Автор: Ludmilaon 18.09.18, 11:12
Просят в яндексе следующее “у флэша не прописан фон, его нужно прописать в обвязке swf-файла». Где это прописывается? Если можно поподробнее объясните, а то я новичок…

Автор: ErickWeeni 23.08.20, 15:12
Sothink SWF Decompiler служит для декомпиляции получения исходника не всегда сохраняющего работоспособность или извлечения ресурсов картинок, спрайтов, звуков. После декомпиляции получают файл формата флеш - fla. В нем меняют картинку на нужную и компилируют в среде разработки, т.е. FLASH MX, 8, CS3, CS4.

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)