Wie dekompiliere ich eine .NET EXE in lesbaren C # -Quellcode?

259

Ich habe vor ein paar Jahren eine C # -Anwendung für einen Client geschrieben, aber ich habe den Quellcode nicht mehr. Ich habe nur die EXE-Datei, die ich auf dem PC des Clients bereitgestellt habe. Gibt es eine Möglichkeit, C # -Quellcode aus der EXE-Datei zu generieren?

MusiGenesis
quelle
2
OK. Schauen Sie hier ... Teleriks JustDecompile hat tatsächlich die DLLs dekompiliert, die Red Gates Reflector komplett vermasselt hat ... es gab zahlreiche Probleme mit Reflector ... JustDecompile ... bisher fehlerfrei ...
Marc Johnston
1
Ich benutze JustDecompile schon ziemlich lange und es ist wirklich gut darin, die Quelldateien als kompilierfertiges csproject zu dekompilieren und zu verpacken. Es ist wirklich aktiv in der Entwicklung und es scheint keine offenen Fragen in ihrem Repo zu geben. Github.com/telerik/JustDecompileEngine
David Chelliah

Antworten:

194

Reflektor und sein Add-In FileDisassembler .

Mit Reflector kann der Quellcode angezeigt werden. Mit FileDisassembler können Sie es in eine VS-Lösung konvertieren.

GEOCHET
quelle
4
Meine Reflector-Kopie verfügt über die Option "Exportieren ..." und ich habe keine Plug-Ins installiert. Es wird ein VS-Projekt mit dem gesamten Quellcode und den Ressourcen erstellt. Warum schlagen alle FileDisassembler vor? Es ist besser?
Lucas
Lucas: Nach dem Auspacken habe ich keinen Reflektor gesehen, der dazu in der Lage ist. FileDisassembler war schon immer der einzige Weg. Dies mag sich in der jüngeren Geschichte geändert haben, obwohl ich denke. Ich werde es mir ansehen.
GEOCHET
LEBENSRETTER! dummer Arsch TFS hat mein Projekt gelöscht. Ich habe TFS zwar angewiesen, sich selbst zu löschen, aber nicht erwartet, dass es das Projekt aus dem lokalen Dateisystem entfernt. Trotzdem danke. x
Christo
Wo ist FileDisassembler? : /
Tom Stickel
Es funktioniert nur für das .NET-Framework. Gibt es ein Tool, das für .Net Core 3.0 Exe funktioniert?
Somnath Kadam
144

Als Red Gate sagte, dass es keine kostenlose Version von .Net Reflector mehr geben würde, begann ich, ILSpy und Teleriks JustDecompile zu verwenden . Ich habe festgestellt, dass ILSpy genauer dekompiliert als JustDecompile (das sich noch in der Beta befindet). Red Gate hat ihre Entscheidung geändert und hat immer noch eine kostenlose Version von .Net Reflector, aber jetzt mag ich ILSpy.

Von der ILSpy-Website ( https://github.com/icsharpcode/ILSpy/ ):

ILSpy ist der Open-Source-Browser und Dekompiler für .NET-Assemblys.

ILSpy-Funktionen

  • Durchsuchen von Baugruppen
  • IL Demontage
  • Dekompilierung nach C #
  • Unterstützt Lambdas und 'Yield Return'
  • Zeigt die XML-Dokumentation an
  • Ressourcen schonen
  • Suche nach Typen / Methoden / Eigenschaften (Teilzeichenfolge)
  • Hyperlink-basierte Typ- / Methoden- / Eigenschaftsnavigation
  • Navigation für Basis- / abgeleitete Typen
  • Navigationsverlauf
  • BAML zu XAML Dekompiler
  • Baugruppe als C # -Projekt speichern
  • Finden Sie die Verwendung von Feld / Methode
  • Erweiterbar über Plugins (MEF)

Aktualisieren:

Am 15. April 2012 wurde ILSpy 2.0 veröffentlicht. Neue Funktionen im Vergleich zu Version 1.0:

  • Montagelisten
  • Unterstützung für das Dekompilieren von Ausdrucksbäumen
  • Unterstützung für angehobene Operatoren auf Nullables
  • In Visual Basic dekompilieren
  • Suchen Sie nach mehreren durch Leerzeichen getrennten Zeichenfolgen (bei der Suche nach "Assembly Manager" in ILSpy.exe wird AssemblyListManager gefunden).
  • Durch Klicken auf eine lokale Variable werden alle anderen Vorkommen dieser Variablen hervorgehoben
  • Mit Strg + F können Sie in der dekompilierten Codeansicht suchen

Aktualisieren:

  • ILSpy 2.1 unterstützt die asynchrone / wartende Dekompilierung
Daniel
quelle
1
Ich verwende 2.2 und es unterstützt das Dekompilieren in IL, VB.NET und C #. Ich fand das sehr nützlich.
VoteCoffee
1
Es scheint, dass Telerik daran interessiert ist, fragwürdige Informationen von dem darauf laufenden Computer zu sammeln, und ILSpy kann nicht aus Quellen kompiliert werden. Auch ILSpy-Binärdateien verwechseln Variablennamen und fügen dem Quellcode einige seltsame Zeichen hinzu.
AaA
1
Beachten Sie, dass ILSpy ein Visual Studio-Add-In enthält. Für ILSpy 2.4 habe ich die Möglichkeit hinzugefügt, von Ihrem Visual Studio-Quellcode direkt zur dekompilierten Ausgabe zu navigieren. Leider gab es einige bahnbrechende Korrekturen, die jetzt mit der ILSpy-Hauptlinie zusammengeführt wurden, aber die Version 2.4 nicht veröffentlicht haben.
Jojo
Brillant! Es gibt eine Softwarefirma, die den Leuten 100 Pfund pro Zeit in Rechnung stellt, damit sie ein "spezielles" Tool auf Ihrem Server verwenden können, um Probleme zu beheben. Es ist gelungen, eine Kopie des Tools zu erhalten, das sie während der Verbindung verwendet haben, und es ist dann gelungen, ILSpy sehr einfach zu verwenden, um das Tool zum Entsperren des Tools zu erhalten. Nie mehr Kunden abzocken!
user2924019
ILSpy ist der beste
Pritam
65

Reflector ist im Allgemeinen nicht mehr kostenlos, wird jedoch Open Source-Entwicklern kostenlos angeboten: http://reflectorblog.red-gate.com/2013/07/open-source/

Einige Unternehmen wie DevExtras und JetBrains haben jedoch kostenlose Alternativen entwickelt:

DevExtras CodeReflect

JetBrains DotPeek

Bogen
quelle
5
Reflektor ist wie 35 $. Ich weiß, dass ich die Bank brechen muss, aber das ist das 10-fache wert.
StingyJack
7
Es lohnt sich auch, Telerik JustDecompile zur Liste der kostenlosen .NET-Assembly-Dekompilierer hinzuzufügen. telerik.com/justdecompile
Todd
3
@StingyJack: Großartig, sieht so aus, als hätten sie dich gehört! Es ist jetzt tatsächlich 10 der Preis bei 368 $, wenn Sie den VS2012 Disassembler wollen. : /
DeepSpace101
1
Ich halte es ihnen nicht vor, um Geld zu verdienen, aber ILSpy (erwähnt) in @ Daniels Antwort ist das, was ich jetzt benutze.
StingyJack
1
Die Standardversion kostet jetzt 100 US-Dollar und die in Visual Studios integrierte Version 200 US-Dollar. Das ist eine verdammt hohe Inflationsrate. Obwohl sie Open Source-Entwicklern kostenlose
Inhalte
35

Reflector und das File Disassembler Add-In von Denis Bauer. Es werden tatsächlich Quellprojekte aus Assemblys erstellt, wobei Reflector allein nur die zerlegte Quelle anzeigt.

HINZUGEFÜGT: Mein neuester Favorit ist dotBeins von JetBrains .

ProfK
quelle
Ich mag es, dass dotPeek das einfache Arbeiten mit einem ganzen Ordner ermöglicht, aber ab heute werden sie nur noch in c # dekompiliert. Die meisten anderen Dekompilierer machen auch vb und IL. Es unterstützt auch nur bis zu Net 4.5, während Telerik 4.5.1
VoteCoffee
DotPeek ist also völlig kostenlos oder es gibt Einschränkungen für die kostenpflichtige Version. Ich konnte keine Informationen auf der Jetbrains-Website dazu sehen.
Batmaci
29

Telerik JustDecompile ist kostenlos und bietet eine Funktion zum Erstellen von Projekten aus .NET-Assemblys.

Kodefuguru
quelle
Telerik bietet die Möglichkeit, in VB.NET, IL oder C # .NET zu dekompilieren, was ich nützlich fand. Es wählt auch das Framework automatisch aus und verfügt über ein Plug-In zur Deobfuscierung. Außerdem unterstützt es .NET 4.5.1. Scheint ziemlich gut zu sein.
VoteCoffee
1
Ich habe alle Lösungen hier in diesem Beitrag ausprobiert und JustDecompile war die einzige, die perfekt für mich funktioniert.
Alvaro Pereira
24

Ich bin überrascht, dass niemand das Iildasmus von Microsoft erwähnt hat . Es ist vielleicht nicht so hübsch wie ILSpy oder Reflector, aber es kommt mit Visual Studio, so viele Entwickler haben es bereits.

Um es auszuführen (vorausgesetzt, VS 2013 sollte für andere Versionen ähnlich sein):

  1. Wählen Sie Start> Alle Programme> Visual Studio 2013> Visual Studio Tools.
  2. Doppelklicken Sie auf Developer Command Prompt for VS2013.
  3. Führen Sie "ildasm" an der resultierenden Eingabeaufforderung aus.
  4. Wählen Sie im Tool Datei> Öffnen und öffnen Sie Ihre ausführbare Datei oder DLL.

Jetzt können Sie in der DLL-Struktur navigieren. Doppelklicken Sie auf Klassenmitglieder, um die IL anzuzeigen. Verwenden Sie Datei> Speicherauszug, um IL in eine Datei zu exportieren.

yoyo
quelle
Ich finde IL DASM etwas barbarisch. Es zeigt den Baum, aber wenn ein Rechtsklick nichts bewirkt, finde ich das verrückt. Außerdem ist der Speicherauszug des Exports in eine Datei im Grunde genommen Müll. Schau es dir an, wie es das auch nur aus der Ferne hilft?
Tom Stickel
4
Ich habe nie behauptet, dass ildasm die beste Option ist, nur dass es verfügbar ist und funktioniert. ¯_ (ツ) _ / ¯
yoyo
Nein, 'fraid nicht.
Yooy
Ich war wirklich überrascht, dass dotPeek mich nicht die gesamte Versammlung nach einer Zeichenfolge durchsuchen ließ, von der ich wusste, dass sie darin enthalten war. ildasm ist vielleicht nicht schön, aber es gibt zumindest eine Dump-Option, mit der ich die Klasse finden konnte, die die gesuchte Zeichenfolge enthielt.
Gabe Halsmer