Можно ли «декомпилировать» Windows .exe? Или хотя бы посмотреть сборку?


237

Мой друг скачал вредоносное ПО с Facebook, и мне любопытно посмотреть, что он делает, не заражая себя. Я знаю, что вы не можете декомпилировать .exe, но я могу хотя бы просмотреть его в Assembly или прикрепить отладчик?

Изменить, чтобы сказать, что это не исполняемый файл .NET, нет заголовка CLI.


3
вредоносное ПО из фейсбука ?? не могли бы вы объяснить это
Адитья Мукерджи

Извините за супер поздний ответ ... но я думаю, что это произошло так: она запустила вредоносную программу, которая в какой-то момент спамила все ее контакты на FB (я) со ссылкой на «видео», которое вас просило скачать "новый кодек". Я предполагаю, что в этом смысле он вел себя как червь.
swilliams

Ответы:


448

С помощью отладчика вы можете интерактивно выполнять сборку программы.
С дизассемблером вы можете просмотреть сборку программы более подробно.
С помощью декомпилятора вы можете превратить программу обратно в частичный исходный код, предполагая, что вы знаете, в чем она написана (что можно узнать с помощью бесплатных инструментов, таких как PEiD - если программа упакована, вам придется сначала ее распаковать). ИЛИ Обнаружить это легко, если вы нигде не можете найти PEiD. У DIE в настоящее время сильное сообщество разработчиков на github ).

Debuggers:

  • OllyDbg , бесплатный, прекрасный 32-битный отладчик, для которого вы можете найти множество пользовательских плагинов и скриптов, которые сделают его еще более полезным.
  • WinDbg , бесплатный, вполне способный отладчик от Microsoft. WinDbg особенно полезен для просмотра внутренних компонентов Windows, поскольку он знает больше о структурах данных, чем другие отладчики.
  • SoftICE , SICE друзьям. Коммерческое развитие и разработка прекратились в 2006 году. SoftICE является своего рода хардкорным инструментом, который работает под операционной системой (и останавливает всю систему при вызове). SoftICE по-прежнему используется многими профессионалами, хотя его может быть сложно получить, и он может не работать на некоторых аппаратных средствах (или программном обеспечении, а именно, он не будет работать на картах Vista или NVIDIA gfx).

Дизассемблеры:

  • IDA Pro (коммерческий) - вершина дизассемблера / отладчика. Используется большинством профессионалов, например, аналитиками вредоносных программ и т. Д. Хотя стоит довольно много долларов (существует бесплатная версия , но она довольно ограничена)
  • W32Dasm (бесплатно) - немного устаревший, но выполняет свою работу. Я считаю, что в наши дни W32Dasm заброшен, и существует множество хаков, созданных пользователями, для добавления некоторых очень полезных функций. Вам придется осмотреться, чтобы найти лучшую версию.

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

  • Visual Basic: VB Decompiler , коммерческий, производит несколько идентифицируемый байт-код.
  • Delphi: DeDe , бесплатно, производит исходный код хорошего качества.
  • C: HexRays , коммерческий, плагин для IDA Pro той же компании. Дает отличные результаты, но стоит больших денег и не будет продан никому (или, как я слышал).
  • .NET (C #): бесплатно dotPeek , декомпилирует сборки .NET 1.0-4.5 в C #. Поддержка файлов .dll, .exe, .zip, .vsix, .nupkg и .winmd.

Некоторые связанные инструменты, которые могут пригодиться во всех ваших действиях, - это редакторы ресурсов, такие как ResourceHacker (бесплатно) и хороший шестнадцатеричный редактор, такой как Hex Workshop (коммерческий).

Кроме того, если вы проводите анализ вредоносных программ (или используете SICE) , я искренне рекомендую запускать все на виртуальной машине, а именно на VMware Workstation . В случае SICE, это защитит вашу реальную систему от BSOD, а в случае вредоносного ПО защитит вашу реальную систему от целевой программы. Вы можете прочитать об анализе вредоносных программ с помощью VMware здесь .

Лично я работаю с Olly, WinDbg & W32Dasm и некоторыми небольшими утилитами.

Кроме того, помните, что дизассемблирование или даже отладка программного обеспечения других людей обычно, по крайней мере, противоречит лицензионному соглашению :)


16
Я ценю последний абзац в его общности, полезный совет, но он забавен в контексте вопроса: я сомневаюсь, что вирус приходит с EULA! ;-)
PhiLho

4
На самом деле, некоторые вредоносные программы и даже трояны в последнее время содержат EULA (о, эти русские ...). Конечно, они могут быть проигнорированы (и проигнорированы) исследованиями, потому что можно предположить, что никто не подаст на них в суд. Кроме того, они, как правило, слишком плохо написаны, чтобы что-то значить в суде в любом случае.
anon6439

2
Обратите внимание, что предыдущая версия IDA Pro бесплатна для некоммерческого использования.
Саймон Бьюкен

6
Обратите внимание, что большинство вредоносных программ в наши дни (по крайней мере, скомпилированные вредоносные программы) могут легко обнаружить, работает ли оно в VMWare, Virtual PC, WINE, VirtualBox и т. Д.
Мик

Если вы работаете на виртуальной машине, следите за атакой Blue Pill.
Сики Лин

44

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

Современные компьютерные программы производятся путем серии преобразований, начиная с ввода понятного человеку текста текстовых инструкций (называемого «исходным кодом») и заканчивая машиночитаемым набором инструкций (называемых альтернативно «двоичным» или «машинным»). код").

Способ, которым компьютер выполняет набор инструкций машинного кода, в конечном итоге очень прост. Каждое действие, которое может выполнить процессор (например, чтение из памяти, добавление двух значений), представлено числовым кодом. Если бы я сказал вам, что цифра 1 означала крик, а цифра 2 означала хихиканье, а затем поднял карты с цифрами 1 или 2, ожидая, что вы будете кричать или хихикать соответственно, я бы использовал ту же систему, что и компьютер. работать.

Бинарный файл - это просто набор этих кодов (обычно называемых «кодами операций») и информацией («аргументами»), на которые действуют коды операций.

Теперь ассемблер - это компьютерный язык, где каждое командное слово в языке представляет ровно один код операции на процессоре. Существует прямая трансляция 1: 1 между командой на языке ассемблера и кодом операции процессора. Вот почему сборка кодирования для процессора x386 отличается от сборки кодирования для процессора ARM.

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

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

(Не поймите меня неправильно, были попытки сделать это. Они работают так же, как DRM для файлов песен.)

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

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

Во всяком случае, это несколько затуманенное объяснение, но я надеюсь, что это поможет. Каждый может смело исправлять любые искажения с моей стороны; Прошло много времени. ;)


1
Это касается разборки, но я бы хотел услышать подробности о декомпиляции. Это может быть так же бесплодно? Каковы предостережения от этого?
Прометей

@has: декомпиляция нативного кода - довольно сложная задача, часто невозможная. Оптимизаторы чрезвычайно агрессивны, часто переводят исходный код в ничто. Вы не можете ничего декомпилировать.
18:04


11

Любой приличный отладчик может сделать это. Попробуйте OllyDbg . (edit: у которого есть отличный дизассемблер, который даже декодирует параметры для вызовов WinAPI!)


10

x64dbg хороший отладчик с открытым исходным кодом, который активно поддерживается.



6

Если вы просто пытаетесь выяснить, что делает вредоносная программа, возможно, будет гораздо проще запустить ее под чем-то вроде бесплатного инструмента Process Monitor, который будет сообщать всякий раз, когда он пытается получить доступ к файловой системе, реестру, портам и т. Д.

Кроме того, использование виртуальной машины, такой как бесплатный сервер VMWare, очень полезно для такой работы. Вы можете создать «чистое» изображение, а затем просто возвращаться к нему при каждом запуске вредоносной программы.


4

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


Да, я думал об этом, но я бы предпочел не
испытывать

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



3

Я не могу поверить, что никто еще ничего не сказал об Immunity Debugger .

Immunity Debugger - это мощный инструмент для написания эксплойтов, анализа вредоносных программ и анализа бинарных файлов. Первоначально он был основан на исходном коде Ollydbg 1.0, но с исправленной ошибкой восстановления имен. Он имеет хорошо поддерживаемый Python API для легкой расширяемости, поэтому вы можете написать свои скрипты Python, которые помогут вам в анализе.

Кроме того, есть хороший Питер из команды Corelan , который называется mona.py , отличный инструмент, кстати.


2

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




2

Я бы сказал, что в 2019 году Гидру ( https://ghidra-sre.org/ ) стоит проверить. Он имеет открытый исходный код (и бесплатный) и обладает феноменальными возможностями анализа кода, включая возможность декомпиляции вплоть до довольно читабельного кода на языке Си.


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.