C Reverse-Engineering von C in Plain Text möglich?

_anonymous0815_

Lt. Commander
Registriert
Aug. 2020
Beiträge
1.307
Hallo liebes Forum,

ich beschäftige mich schon seit geraumer Zeit mit einer PXE-Lösung mit Syslinux auf Debian Bullseye. Linux-Distributionen können mehr oder weniger leicht gestartet und installiert werden, Windows ist so eine Sache für sich. Für Windows gab es für Legacy BIOS den sog. memdisk-Bootloader mit dem man Windows-Isos booten konnte. Leider wurde dieser nie für UEFI portiert, sodass ein booten von Windows über Syslinux nicht ohne Umwege möglich ist.

Nun gibt es noch iPXE, eine weitere Open-Source-PXE-Umgebung, die mir allerdings aufgrund fehlender (konkreter) Anleitungen zu kompliziert war. Jedenfalls bietet iPXE in Form von wimboot einen eigenen Windows-Bootloader, der mit boot.wim-Images umgehen kann. Leider ist dieser nativ nicht mit Syslinux kompatibel, das habe ich selbst getestet und ausgeschlossen. Allerdings habe ich diesen PoC (Proof of Concept) bei Github entdeckt, welcher genau diese Funktionalität bietet. Leider hat der gute Herr nicht den Source-Code veröffentlicht, sondern nur eine prekompilierte Binary. Ich habe den Herrn auch angeschrieben und um Veröffentlichung des Source-Codes gebeten, jedoch noch keine Antwort erhalten, fraglich ist, ob diese jemals kommt. Da ich gerne wüsste, wie groß die Änderungen am Code sind, um Kompatibilität herzustellen, würde ich diesen gern miteinander vergleichen.

Nun zu der eigentlichen Frage:

Ist es konkret möglich, eine C-Binary (keine .exe) wieder in Plain-Text (C-Code, kein Assembler) zu übersetzen?

Ich möchte klarstellen, dass es mir nicht um eine Vermarktung fremden Eigentums geht, sondern rein interessehalber, um ggf. Kompatibilität mit späteren Versionen aufrechtzuerhalten.

Im Internet habe ich nur Anregungen gefunden, die C in Assembler "übersetzen" das ist für mich leider nicht hilfreich, da ich mit Assembler überhaupt nicht vertraut bin.

Vielen Dank für Anregungen und Antworten
 
Zuletzt bearbeitet:
_anonymous0815_ schrieb:
Ist es konkret möglich, eine C-Binary (keine .exe) wieder in Plain-Text (C-Code, kein Assembler) zu übersetzen?
nur wenn die autoren das zulassen. Sprich: Es muessen bspw debug informationen im binary eingebettet sein. Bin aber kein RE. Nur Spielkind.

Hier ist derzeit das angenehmste Tool um fertige binaries zu zerlegen
https://ghidra-sre.org/
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Arc Angeling und _anonymous0815_
Dissassembler. Sprungmaken, Label und Erläuterungen must Du per Hand eintragen.
Das ganze ist mehr für lange kalte Winterabende (andere puzzeln).
Trotzdem viel Spaß dabei.
 
  • Gefällt mir
Reaktionen: BeBur, madmax2010 und _anonymous0815_
Du suchst nach einem Decompiler. Empfehlen würde ich dir Ghidra, hat meiner Meinung nach den besten kostenlosen Decompiler, das verwende ich immer. Alternativ gibt es IDA mit einer sehr eingeschränkten Freeware Version, mit Cloud Decompiler.
 
  • Gefällt mir
Reaktionen: Ray519 und _anonymous0815_
_anonymous0815_ schrieb:
Ist es konkret möglich, eine C-Binary (keine .exe) wieder in Plain-Text (C-Code, kein Assembler) zu übersetzen?
Klar ist das möglich. Kann auch nicht wirklich verhindert werden außerhalb von Self-Modifying Code.
Die Frage ist wie bequem lesbar das Ergebniss in C ist. Das kann halt sehr unleserlich werden und an irgendeinem Punkt kann es durchaus hilfreich werden einfach direkt in den Assembler Code zu schauen.

Schließlich kann dir vermutlich niemand garantieren, dass es ursprünglich alles C-Code war. Es gibt dann doch schon so ein paar wenige Konstrukte die in Assembler einfacher zu erkennen sind als in C.
Auch gibt es gewisse Konstrukte, die zwar aus C-Code herauskommen, aber nur mit sehr aufwendigen Analysen wieder aus Assembler Code rekonstruiert werden können, wenn überhaupt.
(Wenn dein Decompiler nicht super ist und das für dich bequem macht).
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: _anonymous0815_
Ist der Source-Code den du suchst nicht in der README verlinkt?

https://github.com/Sporesirius/wimboot

Dieses Projekt hier? Hat nur einen Patch bzw. Commit abweichung von upstream wimboot vom iPXE-projekt.
 
  • Gefällt mir
Reaktionen: _anonymous0815_
Zurück
Oben