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

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

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

Ответы [ 15 ]

395 голосов
/ 07 ноября 2008

С помощью отладчика вы можете интерактивно выполнять сборку программы.
С дизассемблером вы можете просмотреть сборку программы более подробно.
С помощью декомпилятора вы можете превратить программу обратно в частичный исходный код, предполагая, что вы знаете, в чем он написан (что можно узнать с помощью бесплатных инструментов, таких как PEiD - если программа запакована, вам придется сначала ее распаковать, ИЛИ Detect-it-Easy , если вы нигде не можете найти 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 и некоторыми небольшими утилитами.

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

40 голосов
/ 08 ноября 2008
Отличный пост

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

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

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

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

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

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

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

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

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

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

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

14 голосов
/ 07 ноября 2008

Хорошие новости. IDA Pro теперь бесплатна для своих старых версий: http://www.hex -rays.com / выручить IDAPro / idadownfreeware.htm

11 голосов
/ 07 ноября 2008

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

10 голосов
/ 16 сентября 2016

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

6 голосов
/ 07 ноября 2008

Конечно, посмотрите на IDA Pro . Они предлагают версию eval, так что вы можете попробовать ее.

5 голосов
/ 07 ноября 2008

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

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

5 голосов
/ 07 ноября 2008

То, что вы хотите, - это тип программного обеспечения, называемый «дизассемблер».

Быстрый Google дает это: http://www.geocities.com/~sangcho/disasm.html

4 голосов
/ 08 ноября 2008

Бумеранг также стоит проверить.

4 голосов
/ 07 ноября 2008

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

...