Wieso aus exe kein Code extrahierbar?



  • Hi

    ich frage mich schon seit einiger zeit, wieso man aus einer fertigen exe datei, keinen c++ code mehr extrahieren kann?
    ich meine, es muss ja einen algorithmus geben, der das überstetzt, weiso kann man es dann nicht rückübersetzen? 😕

    Mfg
    eldairon



  • Eldarion schrieb:

    Hi

    ich frage mich schon seit einiger zeit, wieso man aus einer fertigen exe datei, keinen c++ code mehr extrahieren kann?
    ich meine, es muss ja einen algorithmus geben, der das überstetzt, weiso kann man es dann nicht rückübersetzen? 😕

    Mfg
    eldairon

    Weil es in Maschinensprache übersetzt wird. Es gibt zwar Decompiler, die erzeugen C/C++ code, der aber ganz anders aussieht wie der urspüngliche ocde.



  • Weil die Übersetzung keine injektive Abbildung ist. Besonders wenn dann noch ein Optimierer hinzukommt, der dir einzelne Assembler-Anweisungen umstellt oder zusammen fasst. Außerdem fallen viele Dinge auf Code-Ebene weg (zB Bezeichner, Klassen etc.).

    Es gibt natürlich Projekte, die so etwas versuchen. Aber du kannst das ungefähr damit vergleichen, wenn du eine Kuh aus Hackfleisch wieder zusammen setzen würdest.

    http://boomerang.sourceforge.net/

    Dekompilieren von Bytecode, wie Java oder das .NET-Zeugs, ist dagegen natürlich leichter, da der Bytecode eher den eigentlichen Code wiederspiegelt, als Maschinencode.



  • rüdiger schrieb:

    Es gibt natürlich Projekte, die so etwas versuchen. Aber du kannst das ungefähr damit vergleichen, wenn du eine Kuh aus Hackfleisch wieder zusammen setzen würdest.

    👍 😃



  • 4 + 2 = 6

    Und nun versuch mal von der 6 wieder auf die ursprünglische Form zu kommen.

    Wobei die Metzger Erklärung auch nicht übel ist 😃



  • danke, ich hatte eigentlich gedacht, das man das nur übersetzt und dann müsste es eine rückübersetzung möglich sein. aber anscheinend weren ja auch variablen umbenannt.

    Mfg
    eldarion



  • Naja, was heißt "umbenannt"?
    Sie werden durch Speicheraddressen ersetzt.



  • das ist ja soger das geringste Problem. Man erkennt ja oft noch, dass da wenigstens eine Variable war.



  • Eldarion schrieb:

    danke, ich hatte eigentlich gedacht, das man das nur übersetzt und dann müsste es eine rückübersetzung möglich sein. aber anscheinend weren ja auch variablen umbenannt.

    Es gibt eigentlich keine Variablen in der fertigen Executable mehr. Du musst dir Variablen eher als "virtuelle" Einheit vorstellen. Du, als Programmierer, legst irgendwann mal eine Variable mit dem Namen foo vom Typ int fest. Der Compiler kennt nun diese Variable und bildet diese physikalisch ab. Dazu sucht er eine freie Speicherstelle mit ausreichend Platz. Es wird im Programm aber nirgendwo vermerkt, dass genau an dieser Stelle die Variable foo liegt, ganz einfach, weil es auch gar nicht notwendig ist. Denn überall wo die Variable verwendet wird, wird einfach nur noch die Speicheradresse eingesetzt. Compiler sind zwar in der Lage Debug Informationen zu erzeugen, womit solche Sachen wiederherstellbar sind. Das ist aber alles andere als einheitlich und damit unportabel. Zudem werden Executables idR als Release Version ausgeliefert, da diese optimiert und somit bessere Performance haben. Dort fehlen dann aber sämtliche Debug Infos.


Anmelden zum Antworten