Der Martin: Eigene, kleine, gratis app veröffentlichen: Anleitung gesucht

Beitrag lesen

Hallo,

Es gibt keine Möglichkeit, aus einem C-Programm zumindest teilweise wieder Quellcode zu machen?
Mir ist da nichts bekannt. Und selbst wenn es möglich wäre, dann nur mit extrem viel Aufwand – anders als bei C#.

sagen wir's mal so: Es ist theoretisch möglich, aus fertigem, ablauffähigem Maschinencode wieder sowas wie C-Code zu generieren, der dem fertigen Programm entspricht. Nur wird der kaum noch irgendwas mit dem ursprünglichen Quellcode gemeinsam haben.

Angefangen damit, dass die Bezeichner (also Namen von Funktionen und Variablen) allesamt weg sind - ausgenommen die exportierten Namen bei Shared Libraries (DLLs). Der zurückgewonnene C-Code wird also von schematisch generierten Bezeichnern wimmeln, die keine Aussagekraft mehr haben. Kommentare sowie andere Dinge, die beim Lesen helfen, etwa Einrückungen oder Leerzeilen, sind natürlich auch weg.

Ein anderes Problem ist, dass es in C viele Code-Varianten gibt, die ungefähr denselben Maschinencode ergeben. Man sieht einer Schleife beispielsweise nachher nicht mehr an, ob sie mit for oder mit while im Schleifenkopf formuliert war.

Benannte Konstanten: Wenn im fertigen Code etwa steht

   MOV   EAX,0281  
   CALL  malloc

dann weiß keiner mehr, dass die Konstante 0x0281 im Original-Code eigentlich als sizeof(foo)+1 formuliert war.

Ergo: Auch wenn man ein Programm formal betrachtet nach C zurück konvertieren ("decompilieren") kann, hat das keinen wirklichen praktischen Wert.

So long,
 Martin

--
Letztlich basiert alles auf dem Feuer, dem Rad, der Eins und der Null.
  (Gernot Back)
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(