Aus EXE den C# Programmierung herauslesen

7 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

> das der Code in dem Exe File drinnen sein muss

Nein.

Bei Compiler-Sprachen wird der Code entweder in Bytecode oder direkt in Maschinencode übersetzt, um eine EXE-Datei zu erzeugen. Das sind Befehle, die aus Zahlen bestehen, die der Computer verstehen kann.

Es gibt so-genannte Disassembler, mit denen man diese Zahlen in ein einigermaßen lesbares Format (so-genannten Assembler-Code) bringen kann. Diese Tools können auch den Inhalt von Windows-EXE-Dateien anzeigen.

Ein einzelner Befehl in einer Programmiersprache besteht dabei aus mehreren Befehlen, die der Prozessor ausführen muss.

Beispielsweise könnte der Befehl:

meinObjekt.meineMethode(5+meineZahl);

...in der EXE-Datei in mit Zahlen gespeichert sein, die der Disassembler folgendermaßen darstellen würde:

mov eax, [ebp-24]
add eax, 5
push eax
mov eax, [ebp-28]
push eax
mov eax, [eax]
call dword ptr [eax+20]
add esp, 8

Jede Zeile entspricht dabei einer Zahl oder einer Kombination aus Zahlen, die für den Prozessor einen Befehl darstellen. "add" zum Beispiel ist die Addition aus "5+meineZahl".

Das Beispiel zeigt übrigens Maschinencode, während C# Bytecode (MSIL) erzeugt - ohne sich wirklich gut damit auszukennen, kann man aber beide Varianten nicht verstehen.

De8dSh0t  19.03.2015, 18:35

Erstmal Respekt, das hat jemmand mal geschafft eine korrekte Antwort zu verfassen (und sogar noch den Assembler Code dazu!).

Ich meine jedoch gibt es Reverse-Engineering Programme die bei Scripts die mit dem .NET Framework arbeiten den Quellcode anzeigen können.

1

Nun, da die .exe sowie DLL bereits kompiliert wurden, kannst du höchstens C#-Ressourcen, Properties oder Bibliotheken einsehen. Ich empfehle MS Visual Studio. Um DLLs zu öffnen, die ja überhaupt die Ausführung der .exe steuern bzw. dessen Elemente , benötigst du einen Decoder, ansonsten siehst du z.B. per Wordpad nur wirre Zeichenfolgen. Beachte jedoch, dass exexutable files zusammengesetzt aus Codesegmenten sind und ggf. auch durch Module auf C# - Basis gesteuert werden.

Die anderen Antworten - vor allem die von martin7812 - sind zwar nicht schlecht, aber da C# im Allgemeinen NICHT in Bytecode für eine besondere CPU-Architektur, sondern einfach nur in MSIL übersetzt wird kannst du solche Tools wie ILSpy benutzen, um aus deiner C#-EXE wieder C#-Quelltext zu erzeugen, der größtenteils (!) mit dem Original-Quelltext übereinstimmen sollte.

Du kannst auch mit einem .Net-Reflector arbeiten, um C#-Sourcecode zu erhalten.

Im Gegensatz zu "echtem" Maschinencode (wie dem aus martin7812s Beispiel) ist MSIL-Code wirklich sehr leicht zu reversen. Ich hatte bis jetzt fast noch nie die Anforderung, diesen wieder in C# zurück zu wandeln, da man ihn auch problemlos so lesen kann (und das gilt auch für "echten" Assembler Code), aber genau wie bei Java ist es verhältnismäßig leicht zu dekompilieren.

Es gibt genügend Programme und Tools dafür im Internet, und man kann ebenfalls selber etwas entwickeln und die Visual Studio Tools missbrauchen (bzw. skripten), sodass man einen relativ sauberen C#-Sourcecode erhält.

Viel Spaß beim Reversen! :)

Exe-Dateien sind doch nur ein Teil einer Windows-Software. Was ist mit den DLL's, die ebenfalls disassembliert werden müssten?

Außerdem fehlen die Bezeichner für Funktionen, Methoden und Variablen …

In der EXE ist nur der MSIL Code und kein C# Code.