Извлечение ресурсов из flash-файлов

SWF unpacking

Наверное, многие программисты сталкивались с такой ситуацией, когда программа написана и отлажена, а ее исходный код утерян. Т.е., готовая программа есть, а вот исходник её, блин, взял и потерялся. Вообщем, когда надо раздербанить чей-то код восстановить внезапно утерянный исходник программы, творимой месяцами и годами. В случае программ, написанных на флеше, существует несколько коммерческих решений для выдирания различных ресурсов (изображения и звук) из swf-файлов. Так же существует бесплатный пакет swftools кроссплатформенных консольных утилит, предназначенный как для создания флеш-элементов, так и для их декомпилирования.

В частности в этот пакет входят утилиты swfextract и swfdump,позволяющие извлекать отдельные ресурсы из swf-файла и декомпилировать файлы, получая листинг их содержимого с дампом. Недостатком этих утилит является то, что первая из них не умеет автоматически извлекать сразу все ресурсы из файла (хотя, где-то в Сети мне попадался патч, который добавляет эту возможность, но наложить его на последнюю версию swftools у меня не получилось), а вторая не умеет сохранять дамп в двоичный файл.

Для устранения этих недостатков был написан скрипт на питоне, который

  1. используя swfextract получает список всех подресурсов в swf-файле
  2. проходится по этому списку и извлекает все подфайлы с этими ресурсами (опять используя swfextract)
  3. проходится по всем извлеченым файлам, натравливает на них swfdump, и извлекает ресурсы (jpg и mp3 - файлы)

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

Синтаксис вызова команды следующий:

В Linux:

swf-extract.py <filename.swf> [<outdir>]

В Windows:

python swf-extract.py <filename.swf> [<outdir>]

Где первый аргумент filename.swf определяет имя распаковываемого файла swf, а второй необязательный параметр outdir определяет путь к директории, в которую будут сложены найденные файлы ресурсов. Если этот путь не указан, извлеченные файлы будут сложены в один каталог с распаковываемым файлом.

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

Скрипт можно скачать по ссылке ниже.
Пакет swftools ищется тут.
А среда Python живёт здесь.


Файлы:

Downloadswf-extract.py
Рейтинг: 
0
Голосов еще нет