Kann man einen kompilierten Code zurückkompilieren?

6 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

ja, das ist eine komplizierte Angelegenheit.

In einer Programmiersprache wird mit Namen für Funktionen, Prozedure, Variablen, Werte-Definitionen ... gearbeitet, um den Code lesbar zu machen.
Das alles hat dann aber mit dem eigentlichen Programm nichts mehr zu tun und ist im Maschinencode, also dem compilierten Programm, weg.

Das ist dann vergleichbar mit einem Endbetrag einer Einkaufsrechnung. Den kann man auch nicht wieder auf z.B. 20 gekaufte Produkte aufteilen. Man weiß also nicht, ob damit 2 Brötchen für 30 Cent oder etwas für 60 Cent gekauft wurde.

Von Experten DasZitrone und guenterhalt bestätigt

Generell ist das möglich

https://de.wikipedia.org/wiki/Decompiler

Jedoch werden die diese Programme meist nur unlesbaren Code ausspucken.

Programmieren schreiben Anmerkungen / Kommentare in den Quellcode wie etwas funktioniert und halten eine gewisse Form ein die es evtl. anderen erleichtern soll Fehler zu suchen oder das Programm zu ändern und zu erweitern.

Beim Compilieren (übersetzen in Maschinencode) eines Programmes wird das nicht mit in den Maschinencode gegeben ebenso wenig wie etwaige Formatierungen. Auch können ggf. Unterschiede entstehen wenn etwas auf verschiedene Weise interpretiert werden kann. Z.B. können ggf. Unterroutinen mehrmals auftauchen usw.

In den meisten Fällen wirst du daher kein Ergebnis bekommen was wirklich zum weiterarbeiten animiert und auch 100% fehlerfrei ist.

Ja, das ist möglich und wird gemacht, das erste Beispiel, was mir gerade dazu einfällt, wäre das Mario 64 decompile project, bei dem man das Spiel dekompiliert, um heraus zu finden, was das Spiel intern macht und wie es funktioniert... oder auch um Mods wie Ray Tracing einzubauen.

Dass das funktioniert, kann man sich auch einfach herleiten. Ein Code wird kompiliert, muss dabei aber "gleich" bleiben, damit das Programm immernoch das macht, was es soll. Daher ist es, als würde man den Code ein eine andere Programmiersprache übersetzen, die ohne lustige englische Begriffe auskommt, was man natürlich auch rückgängig machen kann.


wimssimon 
Beitragsersteller
 29.04.2022, 14:43

Danke für die Antwort! Warum ist das Rückkompilieren dann eigentlich so schwierig und oft fehlerbehaftet wenn der Code ja eigentlich, wie du schon sagst, "gleich" bleibt?

0
NicolasHelbig  29.04.2022, 19:18
@wimssimon

Weil kompilierter Code halt ohne Englische Begriffe auskommt, weshalb das Übersetzen von Hand halt recht schwierig ist.

0

Hallo wimssimon,

komplett zurück zum Ursprungscode? Das kommt auf die Sprache an!

Einfach? Kommt auf die Sprache an.

Kompliziert? Je nach Sprache, Tools und Kenntnis JA/NEIN!

Wenn man z.B. VB6, VB.NET usw. benutzt und keine Tricks beim Programmieren/Kompilieren anwendet, kann man den Ursprungscode wieder mit "VB Decompiler" oder diversen "Net Decompilern" (.NET Reflector) wieder 1:1 sichtbar machen. Das geht auch mit diversen Delphi und Java Tools!

Bei komplexen Dingen, C++ Code usw. kann man den "reinen" Code nicht vollständig zurückkompilieren. Das ist auch der SInn der Sache.

Allerdings kann man mit IDA-Pro, diversen PlugIns und Fachwissen dies schon sehr gut umsetzen. Wer Ahnung hat, kann diverse Dinge schon ziemlich gut "rekonstruieren", aber dies setzt Fachwissen, diverse Programme und viel Arbeit voraus! Viele Dinge muss man auch nicht 1:1 "rekonstruieren", da diverse Dinge identischen Abläufen und der Logik folgen. Anhand ASM Code kann man sich auch diverse Dinge ableiten oder durch Beobachtung herausfinden.

Grüße, ein Analyst!

Woher ich das weiß:Berufserfahrung

Einen "einfachen" Weg gibts nicht, aber generell ist "reverse engineering" möglich