Ist es möglich, eine Windows-EXE-Datei zu "dekompilieren"? Oder zumindest die Versammlung ansehen?

237

Ein Freund von mir hat Malware von Facebook heruntergeladen, und ich bin gespannt, was sie bewirkt, ohne mich selbst zu infizieren. Ich weiß, dass Sie eine EXE-Datei nicht wirklich dekompilieren können, aber kann ich sie zumindest in Assembly anzeigen oder einen Debugger anhängen?

Bearbeiten, um zu sagen, dass es sich nicht um eine ausführbare .NET-Datei oder einen CLI-Header handelt.

Swilliams
quelle
3
Malware von Facebook? Könnten Sie das erklären
Aditya Mukherji
Entschuldigung für die super späte Antwort ... aber ich denke, es ist passiert: Sie hat eine Malware ausgeführt, die irgendwann alle ihre Kontakte auf FB (mir) mit einem Link zu einem "Video", das Sie angefordert hat, als Spam versendet hat Laden Sie einen "neuen Codec" herunter. Ich gehe davon aus, dass es sich in diesem Sinne wie ein Wurm verhalten hat.
Swilliams

Antworten:

445

Mit einem Debugger können Sie die Programmassembly interaktiv durchlaufen.
Mit einem Disassembler können Sie die Programmassembly detaillierter anzeigen.
Mit einem Dekompiler können Sie ein Programm wieder in Teilquellcode umwandeln, vorausgesetzt, Sie wissen, in was es geschrieben wurde (was Sie mit kostenlosen Tools wie PEiD herausfinden können - wenn das Programm gepackt ist, müssen Sie es zuerst entpacken ODER Detect-it-Easy, wenn Sie PEiD nirgendwo finden können. DIE hat derzeit eine starke Entwickler-Community auf Github .

Debugger:

  • OllyDbg , kostenlos, ein guter 32-Bit-Debugger, für den Sie zahlreiche benutzerdefinierte Plugins und Skripte finden, um es noch nützlicher zu machen.
  • WinDbg , kostenlos, ein recht leistungsfähiger Debugger von Microsoft. WinDbg ist besonders nützlich, um die Windows-Interna zu betrachten, da es mehr über die Datenstrukturen weiß als andere Debugger.
  • SoftICE , SICE an Freunde. Werbung und Entwicklung wurden 2006 eingestellt. SoftICE ist eine Art Hardcore-Tool, das unter dem Betriebssystem ausgeführt wird (und das gesamte System beim Aufrufen anhält). SoftICE wird immer noch von vielen Fachleuten verwendet, ist jedoch möglicherweise schwer zu beschaffen und funktioniert möglicherweise nicht auf einer bestimmten Hardware (oder Software - dh es funktioniert nicht auf Vista oder NVIDIA gfx-Karten).

Disassembler:

  • IDA Pro (kommerziell) - Disassembler / Debugger der Spitzenklasse. Wird von den meisten Fachleuten wie Malware-Analysten usw. verwendet. Kostet zwar einiges Geld (es gibt eine kostenlose Version , die jedoch recht begrenzt ist).
  • W32Dasm (kostenlos) - etwas veraltet, erledigt aber die Arbeit. Ich glaube, W32Dasm ist heutzutage Abbruchware, und es gibt zahlreiche vom Benutzer erstellte Hacks, um einige sehr nützliche Funktionen hinzuzufügen. Sie müssen sich umschauen, um die beste Version zu finden.

Dekompilierer:

  • Visual Basic: VB Decompiler , kommerziell, erzeugt einen identifizierbaren Bytecode.
  • Delphi: DeDe , kostenlos, produziert qualitativ hochwertigen Quellcode.
  • C: HexRays , kommerziell, ein Plugin für IDA Pro von derselben Firma. Produziert großartige Ergebnisse, kostet aber viel Geld und wird nicht an irgendjemanden verkauft (oder wie ich höre).
  • .NET (C #): dotPeek , kostenlos, dekompiliert .NET 1.0-4.5-Assemblys in C #. Unterstützung für DLL-, EXE-, ZIP-, Vsix-, Nupkg- und WinMD-Dateien.

Einige verwandte Tools, die für Ihre Arbeit nützlich sein können, sind Ressourceneditoren wie ResourceHacker (kostenlos) und ein guter Hex-Editor wie Hex Workshop (kommerziell).

Wenn Sie eine Malware-Analyse durchführen (oder SICE verwenden) , empfehle ich außerdem von ganzem Herzen, alles in einer virtuellen Maschine auszuführen , nämlich VMware Workstation . Im Fall von SICE schützt es Ihr tatsächliches System vor BSODs, und im Fall von Malware schützt es Ihr tatsächliches System vor dem Zielprogramm. Informationen zur Malware-Analyse mit VMware finden Sie hier .

Persönlich rolle ich mit Olly, WinDbg & W32Dasm und einigen kleineren Hilfsprogrammen.

Denken Sie auch daran, dass das Zerlegen oder sogar Debuggen der Software anderer Leute normalerweise zumindest gegen die EULA verstößt :)

anon6439
quelle
16
Ich schätze den letzten Absatz in seiner Allgemeinheit, gute Ratschläge, aber er ist im Zusammenhang mit der Frage amüsant: Ich bezweifle, dass ein Virus mit einer EULA einhergeht! ;-)
PhiLho
4
Tatsächlich hatten einige Malware- und sogar Trojaner in letzter Zeit EULAs (oh, diese Russen ...). Natürlich können (und werden) sie von Forschungen ignoriert werden, da davon ausgegangen werden kann, dass sich niemand melden wird, um sie zu verklagen. Außerdem sind sie normalerweise zu schlecht geschrieben, um vor Gericht irgendetwas zu bedeuten.
anon6439
2
Beachten Sie, dass die vorherige Version von IDA Pro für den nichtkommerziellen Gebrauch kostenlos ist.
Simon Buchan
6
Beachten Sie, dass die meisten Malware heutzutage (zumindest kompilierte Malware) leicht erkennen können, ob sie in VMWare, Virtual PC, WINE, VirtualBox usw. ausgeführt wird
Mick
Wenn Sie in einer VM arbeiten, achten Sie auf den Blue Pill-Angriff.
Siqi Lin
44

psoul's exzellente Post-Antworten auf Ihre Frage, damit ich seine gute Arbeit nicht wiederholen kann, aber ich denke, es würde helfen zu erklären, warum dies sofort eine vollkommen gültige, aber auch schrecklich dumme Frage ist. Immerhin ist dies ein Ort zum Lernen, oder?

Moderne Computerprogramme werden durch eine Reihe von Konvertierungen erzeugt, beginnend mit der Eingabe eines für Menschen lesbaren Textinhalts (als "Quellcode" bezeichnet) und endend mit einem computerlesbaren Befehlskörper (alternativ als "binär" oder "Maschine" bezeichnet) Code").

Die Art und Weise, wie ein Computer eine Reihe von Maschinencode-Anweisungen ausführt, ist letztendlich sehr einfach. Jede Aktion, die ein Prozessor ausführen kann (z. B. aus dem Speicher lesen, zwei Werte hinzufügen), wird durch einen numerischen Code dargestellt. Wenn ich Ihnen sagen würde, dass die Nummer 1 Schreien und die Nummer 2 Kichern bedeutet und dann Karten mit 1 oder 2 hochhalten würde, die erwarten, dass Sie entsprechend schreien oder kichern, würde ich das gleiche System verwenden, das ein Computer verwendet zu bedienen.

Eine Binärdatei ist nur ein Satz dieser Codes (normalerweise "Op-Codes" genannt) und der Informationen ("Argumente"), auf die die Op-Codes einwirken.

Assemblersprache ist jetzt eine Computersprache, in der jedes Befehlswort in der Sprache genau einen Operationscode auf dem Prozessor darstellt. Es gibt eine direkte 1: 1-Übersetzung zwischen einem Assembler-Befehl und einem Prozessor-Op-Code. Aus diesem Grund unterscheidet sich die Codierungsbaugruppe für einen x386-Prozessor von der Codierungsbaugruppe für einen ARM-Prozessor.

Die Demontage ist einfach so: Ein Programm liest die Binärdatei (den Maschinencode) durch, ersetzt die Operationscodes durch die entsprechenden Assembler-Befehle und gibt das Ergebnis als Textdatei aus. Es ist wichtig, das zu verstehen; Wenn Ihr Computer die Binärdatei lesen kann, können Sie die Binärdatei auch lesen, entweder manuell mit einer Op-Code-Tabelle in der Hand (ick) oder über einen Disassembler.

Disassembler haben einige neue Tricks und alles, aber es ist wichtig zu verstehen, dass ein Disassembler letztendlich ein Such- und Ersetzungsmechanismus ist. Deshalb bläst jede EULA, die dies verbietet, letztendlich heiße Luft. Sie können nicht sofort zulassen, dass der Computer die Programmdaten liest, und Sie können dem Computer auch nicht verbieten, die Programmdaten zu lesen.

(Versteh mich nicht falsch, es gab Versuche, dies zu tun. Sie funktionieren genauso gut wie DRM für Songdateien.)

Der Demontageansatz weist jedoch einige Einschränkungen auf. Variablennamen sind nicht vorhanden. So etwas gibt es in Ihrer CPU nicht. Bibliotheksaufrufe sind höllisch verwirrend und erfordern oft das Zerlegen weiterer Binärdateien. Und Montage ist unter den besten Bedingungen schwer zu lesen.

Die meisten professionellen Programmierer können die Assemblersprache nicht ohne Kopfschmerzen lesen. Für einen Amateur wird es einfach nicht passieren.

Wie auch immer, dies ist eine etwas beschönigte Erklärung, aber ich hoffe, es hilft. Jeder kann meine falschen Angaben korrigieren. Es ist eine Weile her. ;)

Jason L.
quelle
1
Dies geht auf die Demontage ein, aber ich würde gerne eine Ausarbeitung auf die Dekompilierung hören. Ist es wahrscheinlich genauso fruchtlos? Was sind die Vorbehalte davon?
Prometheus
@has: Das Dekompilieren von nativem Code ist eine ziemlich schwierige Herausforderung, die oftmals unmöglich ist. Optimierer sind äußerst aggressiv und übersetzen häufig Quellcode in gar nichts. Sie können nichts dekompilieren.
Unsichtbarer
11

Jeder anständige Debugger kann dies tun. Versuchen Sie es mit OllyDbg . (edit: das hat einen großartigen Disassembler, der sogar die Parameter für WinAPI-Aufrufe dekodiert!)

utku_karatas
quelle
10

x64dbg ist ein guter und Open Source Debugger, der aktiv gewartet wird.

BullyWiiPlaza
quelle
6

Schauen Sie sich IDA Pro an . Sie bieten eine Evaluierungsversion an, damit Sie sie ausprobieren können.

Douglas Mayle
quelle
6

Wenn Sie nur herausfinden möchten, was eine Malware tut, ist es möglicherweise viel einfacher, sie unter dem kostenlosen Tool Process Monitor auszuführen das bei jedem Versuch, auf das Dateisystem, die Registrierung, die Ports usw. zuzugreifen, einen Bericht erstellt.

Die Verwendung einer virtuellen Maschine wie dem kostenlosen VMWare-Server ist für diese Art von Arbeit sehr hilfreich. Sie können ein "sauberes" Image erstellen und dann jedes Mal, wenn Sie die Malware ausführen, darauf zurückgreifen.

Joeld
quelle
4

Möglicherweise erhalten Sie einige Informationen, die in der Assembly angezeigt werden. Ich denke jedoch, dass es am einfachsten ist, eine virtuelle Maschine zu starten und zu sehen, was sie tut. Stellen Sie sicher, dass Sie keine offenen Freigaben oder ähnliches haben, durch die es springen kann;)

Rob Prouse
quelle
Ja, ich habe darüber nachgedacht, aber ich möchte lieber nicht die Mühe machen, eine VM einzurichten, nur um sie zu töten :)
swilliams
1
Es ist zwar ein Ärger für diesen einen Fall, aber ich finde es immer nützlich, eine VM zum Testen neuer Software oder ähnlicher Dinge in der Nähe zu halten. Ich kann dann tun, was ich will, und mich am Ende dafür entscheiden, den Status nicht zu speichern und für den nächsten Lauf zur sauberen VM zurückzukehren.
Rob Prouse
4

Boomerang kann auch einen Besuch wert sein.

Andru Luvisi
quelle
Nicht wirklich. Es stürzt ab und brennt für alles, was komplizierter ist als die trivialsten ausführbaren Dateien.
Shoosh
4

Was Sie wollen, ist eine Art von Software namens "Disassembler".

Schnelles Google liefert folgendes: Link

Corey Trager
quelle
Du hast das nicht erklärt
Scitronboy
3

Ich kann nicht glauben, dass noch niemand etwas über den Immunitäts-Debugger gesagt hat .

Der Immunitäts-Debugger ist ein leistungsstarkes Tool zum Schreiben von Exploits, Analysieren von Malware und Reverse Engineering von Binärdateien. Es basierte ursprünglich auf dem Quellcode von Ollydbg 1.0, aber der Fehler bei der Namensänderung wurde behoben. Es verfügt über eine gut unterstützte Python-API für eine einfache Erweiterbarkeit, sodass Sie Ihre Python-Skripte schreiben können, um die Analyse zu erleichtern.

Es gibt auch einen guten, den Peter vom Corelan-Team geschrieben hat und der übrigens mona.py heißt, ein exzellentes Tool.

jyz
quelle
2

Wenn Sie das Programm ausführen möchten, um zu sehen, was es tut, ohne Ihren Computer zu infizieren, verwenden Sie es mit einer virtuellen Maschine wie VMWare oder Microsoft VPC oder einem Programm, das das Programm wie SandboxIE sandboxen kann

Joel Lucsy
quelle
2

Sie können dotPeek verwenden, sehr gut zum Dekompilieren von exe-Dateien. Es ist frei.

https://www.jetbrains.com/decompiler/

Mach Nhu Vy
quelle
Warum wird Dotpeek, der meine Exe gibt, nicht unterstützt?
SarveshwarPM
2

Ich würde sagen, dass Ghidra ( https://ghidra-sre.org/ ) im Jahr 2019 einen Besuch wert ist. Es ist Open Source (und kostenlos) und verfügt über phänomenale Code-Analysefunktionen, einschließlich der Möglichkeit, den gesamten Weg zurück zu ziemlich lesbarem C-Code zu dekompilieren.

Dylan McNamee
quelle
0

Die Explorer-Suite kann tun, was Sie wollen.

FloatFish
quelle