ХОРОШЕГО ПОНЕМНОГУ...
FREEWARE программы размером не более 500 кб!
 
На главную
Гостевая книга

Программы Русификаторы Полезняшки Текстуры Мои ссылки

 

Как достать SWF из EXE

 

Что нам потребуется:
1. 16-ричный редактор, любой, наиболее удобный для вас...
2. Испытуемый файл
3. и /dev/hands, можно также прихватить /dev/brain...
Поближе к делу или к телу...

I. Как говориться: "Спрос рождает предложение", так, наверное, и я решил написать эту статью, в связи с тем, что кому-то эта информация очень нужна, для кого-то полезна, не знаю.., может, ещё для общего развития... У каждого свои соображения, почему и зачем нужно вытаскивать swf из exe.
Самые простые примеры: размер swf может достигать всего лишь 25кб, тогда, как в EXE он уже будет 800кб и более; другие операционные системы(Unix), под которыми бинарные файлы, т.е. exe, работают только через эмуляторы; может, кто-то хочет отредактировать SWF-ролик во Flash'e, поправить скрипт; или, к примеру, в прожектор ещё и вирусняк вшит или ещё какая-нибудь пакость и т.д., и т.п. Не будем вдаваться в нужды каждого, будем вдаваться в практику, но сначала немного теории:

II. Итак, начнём разбираться... Вот вопросы, на которых будет базироваться статья.
На что мы будем ориентироваться? Как найти и с уверенностью сказать, что это начальный хедер SWF'ки?
Во-первых, стоит разобраться какие, вообще, начальные хедеры бывают у SWF-файлов. Их всего 2. Познакомьтесь с ними, это: FWS и CWS.
Какая между ними существует разница?
Принципиальная разница лишь в том, что FWS хедер принадлежит обычным SWF-файлам, в которых отсутствовалась какая-либо компрессия. Такие файлы очень легко изменять, поправлять как во Flash'e, так и в других редакторах.
Напротив же CWS - хедер, который находится в файлах, которые были компрессированы при сохранении SWF. Не секрет, что Flash компрессирует файлы, но только если этого захотел сам автор файла. Поэтому первый символ хедера обычного файла заменяется на "C". Во-первых, и файл меньше получается, во-вторых, файл изменить будет труднее(так как используется шифрование, ну это сравнимо с архиватором), а в-третьих до него будет добраться сложнее, через несколько трюков (в этом-то и состоит главная особенность и различие между сжатыми и несжатыми роликами), но обо всём по-порядку и в своё время!
Мы открываем наш 16-ричный редактор, открываем exe-файл и... видим приблизительно следующее:

0000:0000 4D 5A 90 00 03 00 00 00 04 00 00 00 FF FF 00 00 MZ?.........yy..
0000:0010 B8 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 ?.......@.......
0000:0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0000:0030 00 00 00 00 00 00 00 00 00 00 00 00 D0 00 00 00 ............?...
0000:0040 0E 1F BA 0E 00 B4 09 CD 21 B8 01 4C CD 21 54 68 ..?..?.I!?.LI!Th
0000:0050 69 73 20 70 72 6F 67 72 61 6D 20 63 61 6E 6E 6F is program canno
0000:0060 74 20 62 65 20 72 75 6E 20 69 6E 20 44 4F 53 20 t be run in DOS
0000:0070 6D 6F 64 65 2E mode.

таб.1

Да, так выглядит, почти каждый виндовозовский бинарный файл, приложение, называйте, как хотите.. Но это-то как раз нам и не нужно. Вот почему: Дело в том, что любой другой ресурс любого приложения где-то, но всё-таки должен находиться. И как раз ресурс этого flash player'а (а точнее прожектора) далеко искать не надо, он находится внутри него.
Поэтому мы и будем искать наш ролик прямо в EXE. А самый главный ресурс (ролик), находится прямо, прямо по дороге и направо :), на самом деле в конце прожектора, если слово конец будем воспринимать, как конец файла, а не ролика.
Где, именно, "в конце"?
Поиски сокровища начинаем с истока файла. Выше я уже упомянул о хедерах swf-файлов.
Начнём, пожалуй, с несжатых роликов, а значит, нажимаем "поиск" в редакторе и отыскиваем, в файле символы "FWS" либо подряд байты: 46 57 53, и если (ВНИМАНИЕ!), при первом же поиске появится нечто вот такое:

0005:C000 46 57 53 05 0C ED 17 00 78 00 07 6C 00 00 11 F8 FWS..i..x..l...o
0005:C010 00 00 18 B2 02 43 02 33 33 33 00 06 3F 0C 3C 46 ...?.C.333..?.<F
0005:C020 00 00 01 00 98 00 07 56 65 72 64 61 6E 61 00 01 ....?..Verdana.

таб.2

то это означает, что истоки swf файла мы нашли! Браво! Именно так выглядит начало swf в exe'шке (это всего лишь пример), точно также и выглядит начало этого файла вне флэшевского прожектора. Значит, самое главное в этом деле это держать ориентир на "FWS".
Но и здесь есть один момент! Как я уже рассказывал выше, есть 2а типа flash-роликов: некомпрессированные(с хедером FWS) и компрессированные(с хедером CWS), то и в exe-файле дело будет обстоять несколько иначе. Если при первом поиске FWS на экран вылазит следующее:

000A:3B50 43 57 53 00 46 57 53 00 46 57 53 06 00 00 00 CWS.FWS.FWS....

таб.3

Cтоит обратить своё внимание на этот хедер: CWS, а точнее на эту последовательность. Хочу сразу сказать, что в прожекторе нет компрессированных swf файлов! При конвертации в прожектор, flash player автоматически распаковывает сжатый ролик и помещает его уже в несжатом виде в своё тело.
Значит файл или swf, который находится внутри этого прожектора, был декомпрессирован в обычный и хедер у него стал FWS. Поэтому последующие 2е комбинации этих букв - НЕ начальные хедеры нашей SWF. Т.е. комбинация байтов: 43 57 53 00 46 57 53 00 46 57 53 либо символов CWS.FWS.FWS говорит, о том что файл, содержащийся в этом прожекторе, был когда-то давно сжатым, а теперь он распакован.
Стало быть, flash-ролик всегда (если SWF был компрессирован) начинается после 3 нажатия по кнопке поиск. Жмём 3 раз, и... мы видим картину, похожую на нечто, расположенное выше (таб. 2). Это и есть настоящее начало SWF-файла, в прошлом компрессированного. Перед ним обычно находятся одни ноли, много, много ноликов.
NOTE! FWS справа налево - SWF.

III. Вот вроде бы и определились с истоком, а значит переходим к самому сладенькому: извлечению ролика из недр прожектора. Выделяем символ перед хедером FWS (там одни нолики) и до самого начала exe'шки удаляем. Это всё отходы и мусор. Теперь наш новый файл начинается сразу с "FWS", с чего и должен начинаться обычный, нормальный некомпрессированный swf-ролик.
В принципе всё! Можно сохранять и работать, проигрывать он будет запускаться нормально. Любопытным продолжение ниже, а именно, где же устье этого SWF.

IV. Находится, как правило, в конце файла прожектора и конец SWF. Конец SWF в exe'шке:

001D:AD00 3F 03 02 00 00 00 07 00 40 00 00 00 56 34 ?.......@...V4

таб.4

Т.е. в нашем сохранённом ролике ещё есть хлам, но так как он, к счастью, находится в конце файла, это просто отходы от бывшего прожектора, а значит, это никак не влияет на работу самого swf.
Об устье: ищем последний знак "@". Тут и самое интересное: конец swf файла обычно(как я замечал) заканчивается после 3 символа. Значит, придётся потрудиться с последними байтами: удалять пока не дойдем до "@". Может заканчиваться символом "V"(тоже встречается часто). Это ориентир на поиск конца swf-файла.
NOTE! Если файл после сохранения не запускается - вы сделали обрезание не там.

Et voila, сохраняем получившийся файл и swf пускается!!
NOTE! Необязательно искать настоящий конец SWF.
Какая разница: там пару байт осталось от EXE. Да, понимаю, что мусор, но это никак не должно повлиять на сам SWF. Поэтому можно оставить и так. Они прекрасно открываются и смотрятся.
Потому что это зависит от самого формата. Это можно сравнить приблизительно с таким мультимедийным форматом, как mp3, к примеру. Простой пример: MP3-файл (и формат его тоже mp3, не буду рассказывать, как делать mp3-файл с форматом PCM) находится в каком-то архиве(нешифрованном), паке, может, файл побит(недокачен, либо только восстановлен с убитого жёсткого), включаем его в проигрывателе(благо их сейчас много развелось). Что будет делать проигрыватель? Он будет рассматривать все байты в этом файле, пока не дойдёт до начального хедера mp3, это займёт времени, но, в конце концов, плеер начнёт воспроизведение mp3. Вот и схожесть! Главное найти начало, а конец, где-нибудь да будет. Так что желаю успехов в извлечении swf'шек из exe'шек. Кiнець.
Инфо.
Информация представленная выше является познавательной, так скажем, ради интереса. Я не преследовал цели крякера, но впоследствии из данной статьи может получиться неплохой лёгкий проект, написанный на любом языке программирования, для любой ОСи по извлечению SWF'шек...

 

Автор: AndrX aka Бориско Андрей ( andrx@km.ru )

Вверх


Доминирующую начинку моего Интернет-проекта - "Хорошего Понемногу..." составляют FREEWARE программы размером не более 500 кб (проект частный  и финансируется из семейного бюджета... и все программы размещены у меня на сайте).

Также у меня на сайте вы можете найти: Русификаторы (с возможностью поиска по сайту MsiLab.ru), Текстуры (22 страницы фоновых картинок для рабочего стола, Интернет страничек), Мои ссылки (Ссылки из моего "Избранного"), Полезняшки (Архивы полезных документов, справочников, каталогов, статей, иконок, смайликов, анекдотов, курсоров, фантомашек и т. п.).

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

Удачи всем нам!


Найти: на

D
esigned by Zormax © 2002 - 2004
Hosted by uCoz