.exe Dateien disassembelieren/debuggen?

4 Antworten

WinDbg möchte ich noch hinzufügen. Ist das Standardtool unter Windows dafür. Gehört zu den Debugging Tools For Windows, enthalten im Windows SDK. Lezteres herunterladen und bei der Installation nur die Debugging Tools wählen. HxD wurde auch schon genannt.

Woher ich das weiß:Studium / Ausbildung – Datenverarbeitungs-Kfm, Hobby- und Profi-Programmierer

"exe" kann alles sein, da gibt es gewaltige Unterschiede.
Und Du solltest dich mit dem Unterschied von einem Disassembler und einem Decompiler beschäftigen.

Ein Disassembler gibt dir den Maschinencode als Assembler aus, das geht immer, einfach Mal nach "Disassembler" suchen.
Ein Decompiler versucht dir dein mehr oder weniger originalen Quellcode zu liefern und das geht nur in manchen Fällen.

Du brauchst vermutlich den Decompiler, der liefert dir nämlich nicht alle Strings (das können verdammt viele sein), sondern nur die, die tatsächlich im Quellcode definiert waren - sofern möglich.

Bei .NET ist es einfach, das wird nämlich nach CIL kompiliert und das wiederum wird erst zur Laufzeit in den Assembler-Code kompiliert.

Hier kenne ich folgende:

  • ILSpy - ein schlanker Decompiler, kann Projekte erstellen, doch diese Projekte brauchen meist noch etwas Nacharbeit, bevor sie lauffähig sind. Sehr cool finde ich, dass man jedes Feature einzeln an und aus schalten kann, sehr nützlich, wenn man wissen möchte, was der Compiler aus den Compiler-Zucker-Features macht.
  • DNSpy - ein an Visual Studio angelehnter Decompiler, der die Assemblies direkt bearbeiten und wieder kompilieren kann, außerdem kann er ausführen und debuggen. Geniales Teil, hat mir ein paar mal den Arsch gerettet :D
  • DotPeek - ebenfalls ein Decompiler (zumindest kenne ich nur diese Funktion). Er wirkt in einigen Fällen etwas besser durchdacht, als ILSpy, ist aber auch schwerfälliger.

Zum reinen Dekompilieren greife ich immer zu ILSpy, wenn ich etwas bearbeiten muss, kommt DNSpy zum Einsatz.

Bei Java gibt's vermutlich ein ähnliches Angebot, allerdings bin ich dafür nicht genug im Thema.
Bei C++ geht das auch, allerdings ist es eine Qual, das Ergebnis zu interpretieren. Im Gegensatz zu .NET und Java gibt's keine Zwischensprache, C++ wird direkt in den Maschinencode kompiliert, der Decompiler versucht also den C++-Code aus dem Maschinencode zu interpretieren und das klappt nur rudimentär.

Alternativ kannst Du auch einen Hex-Editor nutzen und die Strings auf diese Weise bearbeiten. Hier kenne ich nur HxD, es gibt aber auch noch Andere. Ob Du die Strings da findest, ist aber eine andere Sache und wenn die Strings erst zur Laufzeit zusammen gebaut werden, hast Du "Spaß" :D

Für strings ändern hxd sonst würde ich ghidra nehmen

Woher ich das weiß:Hobby – Programmiere seid 6 Jahren Modifikationen für Spiele