Как декомпилировать программу


Декомпиляция EXE-файлов

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

Способы декомпиляции EXE-файлов

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

Способ 1: VB Decompiler

Первым рассмотрим VB Decompiler, который позволяет декомпилировть программы, написанные на Visual Basic 5.0 и 6.0.

Загрузить программу VB Decompiler

  1. Нажмите «Файл» и выберите пункт «Открыть программу» (Ctrl+O).
  2. Найдите и откройте программу.
  3. Декомпиляция должна сразу запуститься. Если этого не произошло, нажмите кнопку «Старт».
  4. По завершении внизу окна появится слово «Декомпилировано». В левой части расположено дерево объектов, а в центральной можно просматривать код.
  5. При необходимости, сохраните декомпилированные элементы. Для этого нажмите «Файл» и выберите подходящий вариант, например, «Сохранить декомпилированный проект», чтобы извлечь все объекты в папку на диске.

Способ 2: ReFox

В плане декомпиляции программ, скомпилированных через Visual FoxPro и FoxBASE+, неплохо себя зарекомендовал ReFox.

Загрузить программу ReFox

  1. Через встроенный обозреватель файлов найдите нужный EXE-файл. Если его выделить, то справа будет отображаться краткая информация о нём.
  2. Откройте контекстное меню и выберите пункт «Decompile».
  3. Откроется окно, где нужно указать папку для сохранения декомпилированных файлов. После нажмите «ОК».
  4. По окончании появится такое сообщение:

Можно просмотреть результат в указанной папке.

Способ 3: DeDe

А DeDe будет полезна для декомпиляции программ на Delphi.

Загрузить программу DeDe

  1. Нажмите кнопку «Добавление файла».
  2. Найдите файл EXE и откройте его.
  3. Для запуска декомпиляции нажмите кнопку «Процесс».
  4. При успешном завершении процедуры появится такое сообщение:
  5. В отдельные вкладки будет выведена информация о классах, объектах, формах и процедурах.

  6. Для сохранения всех этих данных откройте вкладку «Project», проставьте галочки рядом с типами объектов, которые нужно сохранить, выберите папку и нажмите «Сделать файлы».

Способ 4: EMS Source Rescuer

Декомпилятор EMS Source Rescuer позволяет работать с EXE-файлами, скомпилированными при помощи Delphi и C++ Builder.

Загрузить программу EMS Source Rescuer

  1. В блоке «Executable File» нужно указать нужную программу.
  2. В «Project name» пропишите имя проекта и нажмите «Next».
  3. Выберите необходимые объекты, укажите язык программирования и нажмите «Next».
  4. В следующем окне исходный код доступен в режиме предпросмотра. Осталось выбрать выходную папку и нажать кнопку «Save».

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

Помогла ли вам эта статья?

ДА НЕТ

Взлом Борландии: изящная декомпиляция Delphi - «Хакер»

Содержание статьи

Начинающие хакеры обычно испытывают большие трудности при взломе программ, написанных на Delphi и Builder, поскольку классические трюки, типа бряка на GetWindowTextA, не работают. И чтобы не пилить серпом по яйцам, требуется учитывать особенности библиотеки VCL, которая только с виду кажется неприступной, а в действительности ломается даже проще, чем чистые Си-программы! Не веришь? Убедись сам!

Два основных орудия хакера - это отладчик и дизассемблер, которые могут использоваться как по отдельности, так и совместно друг с другом. Первая (и самая сложная) фаза атаки — разведывательная. Прежде чем наносить основной удар по врагу, необходимо локализовать защитный механизм в мегабайтах мирного программного кода, после чего выстелить битхаком, поменяв JE на JNE, либо, разобравшись с алгоритмом процедуры регистрации, написать свой собственный генератор ключей/серийных номеров.

Ударная фаза практически не зависит от специфики ломаемого приложения и отрабатывается годами, представляя собой неромантичный кропотливый труд, а вот комплекс разведывательных мероприятий гораздо более интеллектуальное занятие, требующее хитрых мозгов и, конечно же, хвойно-новогодних опилок, которые мы будем настойчиво курить. И ожесточенно долбить. По клавиатуре! Ведь Новый год - семейный праздник, и всякий уважающий себя хакер проводит его наедине с самым близким ему существом - компьютером. Для создания атмосферы праздника нужно будет зажечь свечи (не те, что от геморроя), послать всех девушек в /dev/null, зарядить бурбулятор свежей порцией man'ов и начать маньячить. Ведь юзеры ждут подарков, а лучшего подарка, чем новый кряк, для компьютерщика, пожалуй, и не придумаешь!

Короче, надо хачить. Поехали!

DeDe – это такой декомпилятор программ, написанных на Delphi и Builder'е. Бесплатный и очень мощный. Мы будем использовать менее процента от его возможностей. Кто там говорит, что это расточительство? Нет, расточительство - это выбрасывать елку в мусор после праздника. Полная декомпиляция в наши задачи не входит. Наша цель — локализация дислокации штаб-квартиры защитного механизма, то есть определение адресов процедур, проверяющих введенный пользователем регистрационный номер. Вот для этого нам и нужен DeDe, а все остальное можно сделать и руками. То есть дизассемблером. Вообще-то, в состав DeDe входит интегрированный дизассемблер в духе WIN32DASM, однако по своему качеству он значительно уступает даже халявной версии IDA, не говоря уже о полном боекомплекте тяжелой артиллерии в виде IDA Pro + SoftICE. Это просто ужас какой-то! Это все равно что засунуть еловую ветку Стиву Б. в задницу, даже круче! Намного круче! 🙂

Последняя известная мне версия DeDe носит порядковый номер 3.50.02 и датируется серединой 2003 года. Похоже, что DaFixer полностью утратил интерес к своему детищу, решив похоронить DeDe на свалке истории. Полные исходные тексты версии 3.10b выложены в публичный доступ, однако желающих продолжить благородное дело что-то не наблюдается, и потому DeDe обречен на медленное и мучительное вымирание. Программы, собранные новыми компиляторами от Багдада, DeDe либо вообще не переваривает, либо декомпилирует неправильно (вот потому чуть позже мы рассмотрим, как ломать Борландию своими руками без посторонней помощи).

Архив DeDe.3.10b.realy.complete.src.zip (который, в частности, можно скачать с www.wasm.ru/baixado.php?mode=tool&id=55) на самом деле не совсем полон, в нем отсутствует пара компонентов: RxLib_v2.75 плюс VCLZip. И прежде чем DeDe удастся собрать, их необходимо найти в интернете. Если же ты не собираешься заниматься доработкой DeDe, то лучше скачать с www.xakep.ru/post/18513/default.asp архив без исходных текстов, который на два метра короче.

В общем, значит, ставим мы DeDe и втыкаем в его философию. А философия эта такова, что декомпиляции подвергается не сам исполняемый файл, а образ запущенного процесса в памяти, за счет чего удается раздавить упаковщики, даже не почувствовав их присутствия. Впрочем, против крутых протекторов, шифрующих защищенную программу в памяти и динамически расшифровывающих ее по мере исполнения, DeDe оказывается бессилен, и вряд ли стоит объяснять почему. Однако крутые протекторы на практике встречаются не так уж часто, что очень радует.

Ладно, не будем впадать в депрессию. Ведь Новый год на дворе! И пока остальные рвут петарды, мы будем рвать себе задницу, декомпилируя интересные программы :). Все очень просто! Берем прогу, загружаем ее в DeDe, давим на кнопку «Процесс» и сидим себе в ожидании, пока DeDe распотрошит дамп памяти. Лучше всего это делать под VMware, а то среди защищенных программ есть всякие твари, начиненные AdWare и прочей малварью.

Честно говоря, я поубивал бы тех, кто придумал механизм идентификации типов в рантайме, благодаря которому названия классов не уничтожаются при компиляции (как в классическом Паскале и Си), а попадают непосредственно в исполняемый файл (как в Visual Basic'е). Взлом упрощается настолько, что ломать становится скучно. Никакого тебе интеллектуального поединка. Все равно что ломом добивать попавшую в капкан мышь.

Но мы же не садисты и не маньяки какие-нибудь. Оставим мышь любоваться праздничным салютом, а сами вернемся к DeDe. Самая левая (можно даже сказать: радикально левая) вкладка с именами классов не содержит для нас ничего интересного. Вкладки Units Info и Forms также отправляются в /dev/null или куда поглубже. А вот вкладка Procedures - это уже то, что нужно.

Открываем ее и смотрим. Ага, здесь перечислены юниты со всеми процедурами в них содержащимися. Причем и сами юниты, и имена классов, и названия событий (events) даны в символьном виде. То есть если в программе есть диалоговое окно регистрации, то DeDe покажет что-то типа: fRegister ? TfrmRegister ? bOKClick. Как нетрудно догадаться, bOKClick - это и есть имя процедуры, получающей управление при нажатии на кнопку ОК и занимающейся проверкой валидности введенного юзером серийного номера. Тут же в колонке RVA DeDe показывает ее относительный виртуальный адрес, по которому функцию легко найти в файле.

А можно и не искать! Двойной щелчок по имени функции открывает окно с интегрированным дизассемблером, перемещая наш хвост непосредственно на зловредный защищенный код, что особенно полезно при анализе упакованных файлов, которые бессмысленно загружать в Иду. DeDe дизассемблирует дамп памяти, и потому упаковщики идут лесом. Как вариант - можно заюзать SoftICE, установив по заданному адресу аппаратную точку останова (команда «BPM адрес X»). Необходимо только помнить, что RVA – это относительный виртуальный адрес, а SoftICE требует абсолютный. Чтобы перевести относительный виртуальный адрес в абсолютный, достаточно загрузить файл в hiew, нажать (header), посмотреть на базовый адрес загрузки (base address) и сложить его с RVA-адресом, сообщенным DeDe.

Ураганный артиллерийский огонь декомпилятора DeDe накрывает практически весь Багдад, ставя моджахедов по стойке смирно, а всех несогласных отправляет на север, где они рубят пихтовый лес и гонят драп, чтобы у всех плановых жителей было по елке. В смысле ПО «Елки», программное обеспечение то есть :).

Недостатков у DeDe как минимум два. Первый: ломать автоматом - это не в кайф и вообще не по понятиям. Настоящие хакеры так не поступают, предпочитая во всем разбираться самостоятельно с помощью кедрового отвара из хрюнделя (в просторечии называемого hiew'ом) и топора. Второй: как уже говорилось, DeDe обречен на вымирание и скоро исчезнет с жестких дисков за ненадобностью, как в свое время исчезли динозавры и мамонты.

А потому во многих ситуациях ручной взлом оказывается намного предпочтительнее, а бывает так, что он становится вообще единственно возможным вариантом. Короче, кто как, а я сразу за демократию! Любовь и IDA Pro - во!

Берем, значит, Иду, переходим в начало сегмента данных (View\Open subviews\Segments или ) и прокручиваем его вниз до тех пор, пока не встретим текстовые названия элементов управления с прилегающими к ним ссылками. Дизассемблерный текст должен выглядеть так, как показано ниже.

Названия методов класса формы в исполняемом файле прямым текстом:

.data:0040E88B word_40E88B dw 0Bh ; DATA XREF: .data:0040E614^o .data:0040E88D dw 11h .data:0040E88F dd offset _TForm1_FormCreate .data:0040E893 db 10,'FormCreate' .data:0040E89E dw 12h .data:0040E8A0 dd offset _TForm1_FormDestroy .data:0040E8A4 db 11,'FormDestroy' .data:0040E8B0 dw 17h .data:0040E8B2 dd offset _TForm1_Comm1ReceiveData .data:0040E8B6 db 16,'Comm1ReceiveData' .data:0040E8C7 dw 13h .data:0040E8C9 dd offset _TForm1_Button1Click .data:0040E8CD db 12,'Button1Click' .data:0040E8DA dw 13h .data:0040E8DC dd offset _TForm1_Button4Click .data:0040E8E0 db 12,'Button4Click' .data:0040E8ED dw 13h .data:0040E8EF dd offset _TForm1_Button2Click .data:0040E8F3 db 12,'Button2Click' .data:0040E900 dw 12h .data:0040E902 dd offset _TForm1_Timer1Timer .data:0040E906 db 11,'Timer1Timer' .data:0040E912 dw 13h .data:0040E914 dd offset _TForm1_Button3Click .data:0040E918 db 12,'Button3Click' .data:0040E925 dw 13h .data:0040E927 dd offset _TForm1_Button5Click .data:0040E92B db 12,'Button5Click' .data:0040E938 dw 13h .data:0040E93A dd offset _TForm1_Button6Click .data:0040E93E db 12,'Button6Click' .data:0040E94B dw 13h .data:0040E94D dd offset _TForm1_Button7Click .data:0040E951 db 12,'Button7Click'

.data:0040E95E aTform1 db 6,'TForm1' ; DATA XREF: .data:0040E61C^o

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

Перемещаем курсор на название функции, автоматически назначенное Идой на основе текстовой строки (например, «_TForm1_Button3Click»), и нажимаем , переходя на ее тело, где мы видим) мы видим, что функция расположена по адресу, ну скажем, 040286Ch. Загружаем файл в hiew, нажимаем для перехода в шестнадцатеричный режим, давим (goto) и вводим адрес перехода (в данном случае «.040286C»). Точка в начале адреса сообщает hiew'у, что это действительно адрес, а не смещение (по умолчанию). Активируем режим редактирования по (Edit) и пишем CC – опкод точки останова, соответствующий машинной команде INT 03h. Сохраняем изменения по и выходим.

Запускаем программу, вызываем обозначенную форму и давим по очереди на все кнопки. Когда мы нажмем Button3, на экран выскочит системное сообщение о том, что у программы рвет крышу и она будет аварийно завершена в добровольно-принудительном порядке. Так и должно быть. В отсутствие отладчика команда INT 03h приводит к критической ошибке, что позволяет довольно быстро найти необходимые нам кнопки, после чего останется только хакнуть соответствующие им функции. Логично? Всенепременно!

Естественно, ручной просмотр секции данных непродуктивен и ненадежен. Так легко проглядеть нужные нам формы, особенно если программист обозвал методы классов короткими и невыразительными именами, особо не бросающимися в глаза, типа a, b, c. Как быть тогда? Очень просто! Указатель на вышеприведенную структуру передается библиотечной VCL-функции Forms::TApplication::CreateForm(System::TMetaClass *,void*) в качестве одного из аргументов. IDA распознает VCL-функции по сигнатурам, автоматически назначая им «неразмангленные» имена. Применительно к нашему случаю это будет @[email protected]@[email protected] Просто находим эту функцию и смотрим все перекрестные ссылки, ведущие к местам ее вызова из программного кода. Ни одна форма не уйдет незамеченной!

Хорошо, а как быть, если в нашем распоряжении нету Иды, а есть только hiew? Первая мысль - идти топиться - отметается как идеологически неправильная. Топиться в Новый год - это по меньшей мере негуманно. У всех людей праздник, настроение соответствующие, и тут бац - дохлый труп с порезанными венами в ванной. Неэстетично! Таким путем мы приходим ко второй мысли: бедность - это не порок, а естественное студенческое состояние; и все, что нас не убивает, делает нас сильнее. Хорошо подумав головой, мы сумеем обойтись одним hiew'ом. Хотя почему бы на Новый год не подарить себе любимому лицензионную Иду?

Ладно, hiew так hiew. Это только с виду кажется, что hiew - беспонтовая программа. На самом деле это очень даже мощный зверь типа «гепард». Сильный и шустрый. К тому же компактный. Правда, увы, с некоторых пор далеко не бесплатный. Но найти hiew намного проще, чем Иду. Да и стоит hiew несоизмеримо дешевле, чем IDA Pro (это при его-то возможностях).

Короче, пока над нашими головами разрываются петарды и прочая реактивная китайская пиротехника, залетающая через открытую форточку, мы загружаем ломаемую программу прямо в hiew, нажимаем для перехода в шестнадцатеричный режим, давим (Header), говорим (Import) и в списке импортируемых функций находим [email protected]@[email protected][email protected], поставляемую динамической библиотекой vclXX.bpl, где XX – номер версии, например 60. По переходим к таблице переходников на импортируемые функции, состоящей из множества команд jmp. Убедившись, что курсор стоит на функции [email protected]@[email protected]$q[email protected] (что вовсе не факт, поскольку тут у hiew'а глюк, и, чтобы его обойти, приходится выбирать соседнюю функцию, а потом поднимать курсор руками), нажимаем (Ref) для поиска перекрестных ссылок и видим код типа приведенного ниже. Соответственно, (NexRef) означает поиск следующей ссылки на процедуру создания формы. Вот мы и будем жать , пока не найдем все формы, какие только есть.

Поиск указателя на структуру формы в hiew'e:

.0040193A: 8B0DE01F4100 mov ecx,[00411FE0] .00401940: 8B15FCE54000 mov edx,[0040E5FC] .00401946: E8B9BF0000 call @[email protected]@[email protected]

.0040194B: A134B65900 mov eax,@[email protected] ;vcl60

Разумеется, это работает только с неупакованными программами, использующими статическую линковку, коих большинство. Если программа упакована, то, прежде чем мы доберемся до таблицы импорта, ее предстоит распаковать, а если разработчик задействовал динамическую компоновку, то один или несколько вызовов [email protected]@[email protected][email protected] останутся незамеченными (что плохо). В таких случаях выгоднее прибегнуть к отладчику, установив точку останова на [email protected]@[email protected][email protected], но об этом мы скажем позже, а пока разберемся с аргументами. Главным образом нас интересует аргумент, загружаемый в регистр EDX и указывающий на структуру, по смещению 18h от начала которой расположен указатель на уже знакомую тебе вложенную структуру.

Самые сложные случаи взлома - это упакованные программы, загружающие VCL-библиотеку на лету и не использующие никаких вразумительных имен в методах классов. Ломать такие защиты в дизассемблере - напрасно тратить время. Здесь лучше воспользоваться отладчиком, в роли которого может выступать не только тяжелая (SoftICE), но и легкая артиллерия в лице OllyDebbuger.

Загружаем программу в Olly, в списке модулей () находим VCLxx.bpl, давим на и, просматривая список импорта (), находим желаемое имя. Давим для установки программной точки останова или , , Breakpoint, «Hardware, on execution» для установки аппаратной точки останова соответственно. Аппаратные точки намного надежнее, но, увы, их всего четыре, а вот количество программных точек останова ничем не ограничено.

Остается только выбрать подходящие функции для бряканья. Краткий перечень наиболее важных из них (с точки зрения хакера) представлен ниже:

  • @[email protected]$qqrv ; TControl::GetText(void) - аналог API-функции GetWindowTextA - считывает текст из элемента управления в буфер.
  • @[email protected]@GetText$qqrv - еще одна функция для чтения текста в буфер (применяется довольно редко, но все-таки применяется).
  • @[email protected]@[email protected] - установка текста (то есть копирование текста из буфера в элемент управления).
  • @[email protected]@LStrCmp$qqrv ; System:: LStrCmp(void) - сравнение двух текстовых строк (например, расчетного серийного номера с эталонным; очень важная хакерская функция).
  • @[email protected]@LStrCopy$qqrv ; System::LStrCopy(void) - функция копирования строк.
  • @[email protected][email protected] ; Sysutils::StrToInt(System::AnsiString) - функция преобразования текстовой строки в число (достаточно часто используется защитами).

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

Декомпиляторы

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

В списке ниже есть несколько декомпиляторов, предназначенных для программ, созданных в разных средах программирования. VB Decompiler, например, обещает максимально точное восстановление кода программ, написанных на Visual Basic. DeDe (Delphi Decompiler) предназначен для декомпиляции программ, написанных на Delphi. В список включены также декомпиляторы для Flash роликов, но они выполняют совсем другую задачу. 

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

Процесс декомпиляции файлов с расширением EXE

Эта процедура подразумевает под собой воспроизведение кода утилиты языком, которым она изначально была создана. То есть это обратная процедура компиляции (преобразование кода в компьютерные команды). Выполнить эти действия можно воспользовавшись специальными программами.

Способы преобразования файлов EXE

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

Способ 1: Использование утилиты VB Decompiler

Данный софт используется для преобразования утилит, которые были созданы на Visual Basic 5.0 или 6.0.

  1. Активируем программу и в главном окне выбираем вкладку «Файл».
  2. В появившемся меню нажимаем на «Открыть программу». Выполнить ту же процедуру можно используя быстрые клавиши Ctrl+O.
  3. В «Проводнике» находим нужный файл.
  4. Процесс преобразования должен запуститься самостоятельно. Если по какой-либо причине это не произошло, выберите «Старт».
  5. По завершению процедуры высветится надпись «Декомпилировано».
  6. Основное поле программы будет поделено на два окна. В левом можно увидеть хронологию, а в правом отобразится исходный код.
  7. Есть возможность сохранить на компьютер преобразованные файлы. В верхнем меню выберите «Файл» и перейдите по вкладке «Сохранить декомпилированный проект».

Способ 2: Воспользоваться программой ReFox

Данная программа предназначена для преобразования утилит написанных на FoxPro или FoxBASE+.

  1. Откройте программу и воспользуйтесь интегрированным Проводником для поиска необходимого файла. При нажатии на него сразу можно увидеть некоторую информацию.
  2. Нажмите правой кнопкой мыши на файл и в появившемся меню кликните на «Decompile».
  3. В следующем окне определите место для хранения новых файлов.
  4. После нажатия на «ОК», процедура будет автоматически запущенна и по окончанию выдаст оповещение.

Способ 3: С помощью DeDe

Эта утилита используется при необходимости выполнить процедуру с программами, написанными на Delphi.

  1. Запустите софт, и найдите значок «Добавление файла».
  2. Выберете файл с необходимым расширением.
  3. Для запуска работы утилиты кликните на «Процесс».
  4. После завершения процедуры появится окно со следующим текстом: «Дампирование Выполнено».
  5. Теперь можно просмотреть всю полученную информацию.
  6. Для сохранения полученных данных перейдите на раздел «Project» и поставьте напротив необходимых объектов галочки.

Способ 4: Программа EMS Source Rescuer

Данная утилита может работать с файлами, написанными на двух языках Delphi и C++ Builder.

  1. Активируйте программу и в первой строке выставьте путь к нужному файлу.
  2. Пропишите имя нового объекта в графе «Project name».
  3. Определите нужные файлы и выберите, какой кодировкой они были созданы.
  4. Открывшееся окно показывает еще не сохраненный код. Для дублирования его на компьютер укажите необходимый каталог и нажмите на «Save».

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

VB Decompiler

In English

VB Decompiler - это декомпилятор программ (EXE, DLL, OCX), написанных на Visual Basic 5.0 и 6.0 и дизассемблер программ, написанных на любом из языков .NET технологии. Как известно, программы, разработанные на Visual Basic'е, могут быть скомпилированы либо в интерпретируемый p-code, либо в выполняемый native code. .NET сборки всегда компилируются в компилируемый в процессе запуска IL код.

Так как p-code представляет собой высокоуровневые команды, то появляется реальная возможность восстановить из этого кода исходный (правда имена переменных и некоторых функций само собой восстановить не удастся). VB Decompiler восстанавливает исходный код из псевдокода максимально близко к оригинальному, поэтому его при некоторых доработках реально довести до компилируемого.

Пример декомпиляции P-Code'а

Если программа была откомпилирована в native code, то о полном восстановлении исходника из машинных инструкций не может быть и речи. Но VB Decompiler и здесь поможет анализировать программу. В него встроен мощный дизассемблер и эмулятор команд, позволяющий насколько это возможно приблизить ассемблерный код к исходному. Естественно из-за сложности обработки всякого рода оптимизаций тут не обходится без ошибок сворачивания и вывода неверных инструкций, но для анализа данный метод декомпиляции и свертывания максимально полезен.

Пример декомпиляции Native Code'а

В случае если программа была создана в среде .NET декомпилятор полностью восстановит структуру таблиц сборки, а также будет полезен для дизассемблирования и анализа IL кода. Для декомпиляции не потребуется ни сама среда .NET Framework, ни поддерживаемая .NET операционная система. Декомпилятор работает в любой 32х битной операционной системе семейства Windows.

Пример декомпиляции .NET программы

VB Decompiler также декомпилирует все Формы и UserControl'ы, расположенные в файле. Для технических нужд декомпилятор помимо прочего отображает смещения каждого контрола на формах.

Пример декомпиляции Форм

В общем VB Decompiler идеальное средство для анализа программ и идеально подходит в случае потери исходных кодов и необходимости частично восстановить проект.

VB Decompiler представлен Lite, Personal, Business, Business with Tracing Features и Business with Analytic Features версиями

Возможности декомпилятора VBLitePersonalBusinessBusiness with Tracing FeaturesBusiness with Analytic Features
Универсальная распаковка пакованных приложений (поддерживаются UPX, NSPack и многие другие известные EXE упаковщики)
Декомпилирование форм (frm и frx) и usercontrol'ов (ctl)
Полная декомпиляция p-code в исходникоподобный код (включая декомпиляцию GUID объектов)
3 режима декомпиляции p-code (с обработкой стэка, без обработки и функция анализатора процедур с последующим упрощением кода и улучшением его читаемости)
Дазассемблирование native кода (используется мощный Pentium Pro дизассемблер, поддерживающий MMX и FPU наборы инструкций)
Подсветка синтаксиса в декомпилированном коде
Частичная декомпиляция Native Code'овых конструкций (используя уникальный движок эмуляции ассемблерного кода)
Индексирование строк, встречающихся в декомпилированном коде и функции быстрого поиск строк
Высокая скорость декомпиляции
Obfuscator для VB5/6 программ
Возможность патча для VB5/6 программ
Сохранение декомпилированного результата в базу данных
Дизассемблирование .NET кода
Сохранение имен процедур в MAP файл, IDC скрипт или файл HIEW Names
Использование VB Decompiler для декомпиляции коммерческого кода и/или использование результатов декомпиляции в работе над коммерческим проектом
Активация и использование VB Decompiler в компании (требуется отдельная лицензия на каждого разработчика, пользующегося декомпилятором)

Трассировка кода отдельных процедур и функций в Visual Basic 5.0/6.0 приложениях, скомпилированных в Native Code и P-Code. Код не запускается на процессоре, а исполняется эмулятором.

Генерация Аналитического отчета, содержащего детальную информацию об активности декомпилируемой программы на компьютере пользователя. Аналитик получает полный отчет об участках (процедурах и функциях) программы, производящих те или иные манипуляции с файлами, реестром, окнами, процессами, а также использующие служебнгые функции Visual Basic для вызовов функций по имени (CallByName) и прямого доступа к адресам памяти (VarPtr).

Цена 1 копии программы

Бесплатно

5990р

от 13740р

от $349

от $559

* Microsoft, Windows, and Visual Basic are registered trademarks of Microsoft Corporation.

Практикум кодера-исследователя: декомпилируем и изучаем Android-малварь - «Хакер»

Содержание статьи

Благодаря открытости и отсутствию встроенной системы защиты (а также легкомыслию пользователей, которые бездумно соглашаются устанавливать программы из сомнительных источников, требующие от них подозрительных полномочий) в Android очень легко заводится различная малварь. Ну а наше программерское дело простое — попробовать разобрать то, что написано злокодером. Посмотрим, как это делается.

Для исследования кода в APK-приложениях необходимо декомпилировать его, то есть извлечь все данные, которые в нем содержатся. Выполнить декомпиляцию APK-приложения можно с помощью программы Apktool. Для того чтобы она нормально заработала на винде, необходимо установить утилиту apktool-install-windows-r04-brut.

Рис. 1. Содержимое папки apktool Рис. 2. Декомпиляция приложения

Для примера рассмотрим приложение WhatsApp Messenger. В памяти подопытного мобильного устройства я нашел программу под названием «WhatsApp Messenger», которая (спойлер) на самом деле оказалась малварью под названием Android.Spy.230.origin (классификация Dr.Web).

Рис. 3. Содержимое папки WhatsApp после декомпиляции приложения Рис. 4. Обнаружение Android.Spy.230.origin — действительно, это малварь
Android.Spy: краткая справка

Android.Spy — семейство многофункциональных троянцев, поражающих мобильные устройства под управлением ОС Android. Распространяются на популярных сайтах (преимущественно китайских) в составе легитимных игр и приложений, которые модифицированы злоумышленниками.

Для извлечения данного приложения воспользуемся программой Android Debug Bridge. После успешного извлечения файла WhatsApp.apk его необходимо декомпилировать с помощью Apktool. Теперь перейдем к исследованию содержимого каталога приложения. Для получения основной информации (какие службы и компоненты использует приложение) изучим файл AndroidManifest.xml. Воспользуемся для этого Android Studio.

После запуска программы Android Studio необходимо выбрать Open an existing Android Studio project и указать путь к каталогу декомпилированного приложения. На рис. 5 показан пример открытия декомпилированного приложения.

Рис. 5. Открытие декомпилированного приложения

В меню Project File нужно выбрать AndroidManifest.xml. На рис. 6 представлено содержимое приложения WhatsApp.

Рис. 6. Содержимое приложения WhatsApp

Открыв AndroidManifest.xml, мы видим запросы, с помощью которых приложение запрашивает у мобильного устройства различные функции и права доступа. Рассмотрим их в деталях. Итак, здесь:

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score! Подробнее

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.

Я уже участник «Xakep.ru»

Смотрите также