PDA

Просмотр полной версии : [Обсуждение] Собственный декомпилятор swf на C#\VC++ .NET


CaptainAmerica
23.01.2011, 19:42
ТУТ ([Ссылки могут видеть только зарегистрированные и активированные пользователи]) нашел статью в блоге одного из забугорных программистов - Mike Swanson, в которой он приводит пример своей сборки для декомпиляции swf файлов. (к сожалению статья весьма старая)
Обращаюсь к тем, кто пишет на C# - возможно кто-то уже имел опыт работы с этой сборкой, возможно кто-либо захочет изучить ее. Мои попытки использовать эту сборку не дали вменяемого результата, поэтому прошу помощи. Возможно кто-либо поделится идеей реализации декомпилятора иным способом.

P.S. не нужно здесь писать о том, что существует множество коммерческих ломаных продуктов с необходимой функциональностью.

dickens011
23.01.2011, 20:49
К сожаления декомпилировать приложение и получить его исходный код - крайне сложно. И если не было создано программ реализующих это, то есть несколько причин, либо это никому не нужно, либо - это крайне сложное и в некоторой степени неблагодарное занятие, ибо воспроизвести рабочий (!) исходный код, на языке, на котором он был написан практически не возможно.

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

Еще отмечу, что для языка java существует декомпилятор, способный нормально декомпелировать классы и получать нормальный код.

В свое время я тоже искал достойные методы декомпиляции, но к сожалению безрезультатно. Так что мой совет: не заморачивайся с этим и лучше потрать это время на то, чтобы улучшить свои знания в том же С# или Flash.

CaptainAmerica
23.01.2011, 21:28
К сожаления декомпилировать приложение и получить его исходный код - крайне сложно. И если не было создано программ реализующих это, то есть несколько причин, либо это никому не нужно, либо - это крайне сложное и в некоторой степени неблагодарное занятие, ибо воспроизвести рабочий (!) исходный код, на языке, на котором он был написан практически не возможно.

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

Еще отмечу, что для языка java существует декомпилятор, способный нормально декомпелировать классы и получать нормальный код.

В свое время я тоже искал достойные методы декомпиляции, но к сожалению безрезультатно. Так что мой совет: не заморачивайся с этим и лучше потрать это время на то, чтобы улучшить свои знания в том же С# или Flash.

Вполне согласен, но для меня C# - лишь увлечение, по специальности я далек от программирования.
Тут моя оплошность -некорректно изложил суть вопроса.
Взять к примеру фласм - извлекает экшин скрипт, пусть не в оригинальном виде, но в том виде, который позволяет извлечь требуемые данные, swfmill - преобразует структуру swf файла в xml с соответствующими узлами, самое главное в данном случае - сохраняются значения переменных и сами переменные, а именно - якоря (ведь за ними-то и охотимся) ). Указанная мною сборка по описанию содержит методы для извлечения элементов, представляющих определенные типы данных, в нашем случае это string (но в экшн скрипт якоря являются элементами словаря(насчет того какой тут тип уместен я не знаю )), но при извлечении строки имеют формат "абра-кадабры", "игры" с кодировкой и распаковкой swf файлов ни к чему не привели, возможно дело в преобразовании byte to String, но кто знает.... возможно дело в обфускации, насчет этого информации нет.
В общем стоит задача не декомпилировать swf до исходного вида а извлечь лишь необходимые элементы экшн кода.

dickens011
23.01.2011, 23:34
Вот! Теперь-то практически понятно что требуется, хотя не совсем.
Нужны переменные или отрывки кода: т.е. функции, классы?

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

Но в любом случае должны существовать программы которые извлекают изображения, звуки и другие подобные ресурсы, т.к. сталкивался с подобными для извлечения из программ написанных на C, C# и т.д.

Для поиска и изменения переменных может подойти, скорее всего ArtMoney, CheatEngine или тот же WinHex, также на этом ([Ссылки могут видеть только зарегистрированные и активированные пользователи]*****lab.ru/) сайте можешь найти разные отладчики кода, и может еще что полезного.

CaptainAmerica
24.01.2011, 00:01
Для поиска и изменения переменных может подойти, скорее всего ArtMoney, CheatEngine или тот же WinHex, также на этом сайте можешь найти разные отладчики кода, и может еще что полезного.
С этим сайтом знаком хорошо ))

Если честно, не понял про якоря и словари, я думал основой там являются символы, в которые мы преобразовываем то, что нам необходимо, и в которых уже записываем экшн код.

Код из Sothink SWF Decompiler
насчет словарей:
объявление:

private var honeyBoxes: Dictionary;
.............
далее
honeyBoxes = new Dictionary();
...................
далее идут так называемые якоря (данные для игры DarkOrbit):

honeyBoxes["ozims"] = true;
honeyBoxes["1604u"] = true;
honeyBoxes["znmjs"] = true;
honeyBoxes["bu9m9"] = true;
honeyBoxes["zel71"] = true;
honeyBoxes["q4knx"] = true;
honeyBoxes["ci7m0"] = true;
honeyBoxes["1ukl6"] = true;
honeyBoxes["1gtlm"] = true;
honeyBoxes["180fk"] = true;
.................................................. ..
Вот именно этот массив и нужно извлечь, не более не менее.
Должен ведь быть способ добраться до кода программными методами.

dickens011
24.01.2011, 00:29
Спасибо за объяснение, но к сожалению программными методами туда врядли доберешся.

Здесь нужен отладчик и знание хотя бы одного из значений и тут нужны знания ассемблера, точно можно сказать, что true будет выглядеть как "1", false - как "0" в hex и в отладчике там будет меняться флаг переноса С (carry), если не ошибаюсь.

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

Так что подумай стоит ли тебе тратить на это время.

Regbist11
14.02.2011, 13:09
[Ссылки могут видеть только зарегистрированные и активированные пользователи] - я думаю тебе это пригодится!