
Заставляем Sothink SWF Decompiler понимать Stage3D
Привет всем! Для тех или иных целей, многие из нас пользуются Sothink SWF Decompiler для понимания структуры готовых swf роликов.
Сейчас, в виду роста популярности Stage3D — у меня есть потребность в понимании как устроена та или иная шейдерная программа сторонних разработчиков. Что же мы видим, когда запускаем готовый SWF ролик в Sothink SWF Decompiler, который использует аппаратное ускорение? Ничего!
На экране плеер выкидывает не хитрую ошибку Error #2044: Необработанный ErrorEvent:. text=Error #3702: Класс Context3D недоступен.
Это связано с тем, что в системе приложение использует Flash ActiveX, который надо настраивать на этапе создания программного обеспечения. О чем не позаботились ребята из Sothink. Значит, у нас есть шанс «поправить» вызов этого ActiveX простым хардкодным способом.
Для тех, кто еще не в теме — чтоб заставить Flash использовать аппаратное 3Д ускорение в HTML, нам надо прописывать параметр wmode равный direct.
В противном случае, мы увидим ошибку Класс Context3D недоступен. А что же касается встраиваемых ActiveX — в приложения, то они тоже могут иметь те же параметры. А некоторые просто обязаны иметь.
И так, нам понадобится:
1) Любой hex редактор или текстовый, который не искажает данные при сохранении. Для конкретного случая нам подойдет бесплатный notepad++ если у нас нет HEX редактора
2) Открываем в Notepad++ файл SWFDecompiler.exe который является самим приложением, требующим внесения нашей медицинской помощи
3) Опытным путем, я нашел место установки параметров для Flash Player ActiveX, который использует Sothink SWF Decompiler. Остается теперь банально поправить бинарный файл. Чтоб не путать и не рассказывать что да как — делаем простейшую инструкцию:
— Нажимаем ctrl+f и ищем строку gUfU. Нам повезло в том, что она там одна
— Переводим курсор клавиатурой вправо примерно на 40 символов и видим надпись NULWNULiNULnNULdNULoNULwNUL

Если присмотреться — мы видим Window
— На клавиатуре нажимаем insert для замены символа без добавления следующего и меняем Window на direct

Нам сильно повезло с тем, что Window и direct обладают одинаковым количеством букв и мне не приходится рассказывать как делать плохие вещи :)
В итоге, сохранив файл под старым имемем — мы можем запускать в декомпиляторе нашу флешку, которая ругалась на Класс Context3D недоступен и наблюдать как она работает.

Данный материал был подготовлен с использованием Sothink SWF Decompiler 7.2 сборки 4842, однако ничего не должно было поменяться в соотношении со старыми версиями. По-этому дерзайте и у Вас получится.
Так же Вы должны быть уверенны, что у Вас используется Flash Player ActiveX версии 11.2 и выше. Чтоб понять какой используется — просто запустите Sothink SWF Decompiler и нажмите правую кнопку мишки на области, где загружается флеш. Если там не 11.2, то обновите ActiveX
Копирование материалов на другие сайты разрешаю с предварительным согласованием через личные сообщения
Сейчас, в виду роста популярности Stage3D — у меня есть потребность в понимании как устроена та или иная шейдерная программа сторонних разработчиков. Что же мы видим, когда запускаем готовый SWF ролик в Sothink SWF Decompiler, который использует аппаратное ускорение? Ничего!
На экране плеер выкидывает не хитрую ошибку Error #2044: Необработанный ErrorEvent:. text=Error #3702: Класс Context3D недоступен.
Это связано с тем, что в системе приложение использует Flash ActiveX, который надо настраивать на этапе создания программного обеспечения. О чем не позаботились ребята из Sothink. Значит, у нас есть шанс «поправить» вызов этого ActiveX простым хардкодным способом.
Для тех, кто еще не в теме — чтоб заставить Flash использовать аппаратное 3Д ускорение в HTML, нам надо прописывать параметр wmode равный direct.
В противном случае, мы увидим ошибку Класс Context3D недоступен. А что же касается встраиваемых ActiveX — в приложения, то они тоже могут иметь те же параметры. А некоторые просто обязаны иметь.
И так, нам понадобится:
1) Любой hex редактор или текстовый, который не искажает данные при сохранении. Для конкретного случая нам подойдет бесплатный notepad++ если у нас нет HEX редактора
2) Открываем в Notepad++ файл SWFDecompiler.exe который является самим приложением, требующим внесения нашей медицинской помощи
3) Опытным путем, я нашел место установки параметров для Flash Player ActiveX, который использует Sothink SWF Decompiler. Остается теперь банально поправить бинарный файл. Чтоб не путать и не рассказывать что да как — делаем простейшую инструкцию:
— Нажимаем ctrl+f и ищем строку gUfU. Нам повезло в том, что она там одна
— Переводим курсор клавиатурой вправо примерно на 40 символов и видим надпись NULWNULiNULnNULdNULoNULwNUL

Если присмотреться — мы видим Window
— На клавиатуре нажимаем insert для замены символа без добавления следующего и меняем Window на direct

Нам сильно повезло с тем, что Window и direct обладают одинаковым количеством букв и мне не приходится рассказывать как делать плохие вещи :)
В итоге, сохранив файл под старым имемем — мы можем запускать в декомпиляторе нашу флешку, которая ругалась на Класс Context3D недоступен и наблюдать как она работает.

Данный материал был подготовлен с использованием Sothink SWF Decompiler 7.2 сборки 4842, однако ничего не должно было поменяться в соотношении со старыми версиями. По-этому дерзайте и у Вас получится.
Так же Вы должны быть уверенны, что у Вас используется Flash Player ActiveX версии 11.2 и выше. Чтоб понять какой используется — просто запустите Sothink SWF Decompiler и нажмите правую кнопку мишки на области, где загружается флеш. Если там не 11.2, то обновите ActiveX
Копирование материалов на другие сайты разрешаю с предварительным согласованием через личные сообщения
- +6
- TheRabbit
Комментарии (6)