2010-12-04 20 views
1

Ich habe einen PPC-Code, den ich zurück in seinen ursprünglichen C-Code konvertieren möchte, gibt es eine Möglichkeit, dies zu tun? Möglicherweise eine Person (wie jemand, der PPC kennt, um den C-Code zu rekonstruieren?) Oder ein Programm?Ist es möglich, PPC Assembly in C zu konvertieren?

+0

PPC wie in PowerPC? – ruslik

+0

Ja, PowerPC-Baugruppe. – user330416

+5

Sie können das * Original * C nicht erhalten, da das Kompilieren zu Maschinencode ein verlustreicher Prozess ist. Es gibt keine 1 zu 1 Korrespondenz. Ein Disassembler/Decompiler für Power liegt jedoch außerhalb meiner Kenntnisse. – SingleNegationElimination

Antwort

0

Boomerang behauptet, PPC-Dekompilierung zu unterstützen.

+0

IDA unterstützt seine Disassemblierung. Es ist ein langer Weg zur Dekompilierung in C-Code. – ruslik

+0

Ah, ok - ich entferne diesen Anspruch dann. –

+0

Boomerang sieht ziemlich cool aus.Ihr Artikel über die Wiederherstellung von Quellcode ist lesenswert. – RBerteig

1

Ja und nein.

Es ist prinzipiell möglich, ein Programm in einer beliebigen Sprache in eine andere Sprache zu übersetzen. Die Ergebnisse werden nicht schön sein.

Wenn der vorhandene Code wirklich das Ergebnis einer Kompilierung ohne zu viel clevere Optimierung ist, dann ist es wahrscheinlich, dass ein ziemlich rarer Prozess es wieder zu C machen kann. Dies ist oft einfach für kleine Mengen von Code von Hand zu erledigen , aber langwierig und fehleranfällig für große Codebasen.

Es gibt einige Reverse-Engineering-Tools in der Natur, die Behauptungen über die Dekompilierung machen. Es ist kein einfaches Problem im allgemeinen Fall.

Ein Ansatz zur Automatisierung des Problems besteht darin, ein PPC-Assembly (oder sogar binäres) Front-End für einen Compiler zu erstellen, der bereits ein C-Sprachen-Back-End unterstützt. Das Ergebnis ist ein Cross-Compiler, der PPC-Code liest und hoch verschleierten C-Code erzeugt. Ich weiß, dass es beispielsweise ein C-Backend für GCC gibt.

Unabhängig davon, wie Sie vorgehen, ist es wahrscheinlich von entscheidender Bedeutung, dass Sie eine gute Testsuite (und die Möglichkeit zum Ausführen) für die vorhandene Binärdatei haben, damit Sie nachweisen können, dass die Übersetzung äquivalent ist.

Bearbeiten: Beachten Sie, dass Sie die ursprünglichen Kommentare nie zurück erhalten werden und nur Zugriff auf ursprüngliche Variablen- und Funktionsnamen haben werden, die es in eine Symboltabelle oder ähnliche Debuginformationen verwandelt haben.

+0

Ich versuche, die ursprünglich in der ausführbaren Datei gespeicherten Verschlüsselungsschlüssel wiederherzustellen. mit IDA habe ich es auf den PPC und es gibt Funktionen in PPC, die direkt entschlüsseln und sie angeblich auch die Verschlüsselungsschlüssel speichern. Wenn das irgendeinen Sinn ergibt. – user330416

+0

@user: Sie müssen nicht die ganze ausführbare Datei nur dafür "auf C" dekompilieren. Bitte aktualisieren Sie Ihre Frage. – ruslik

+0

Dann stehen Sie vor einer größeren Herausforderung. Ich, das war mein Code, würde diese Funktionen von Hand schreiben, mit jedem Trick, den ich finden oder erfinden könnte, um eine einfache Offenlegung der Schlüssel zu vermeiden. Sie werden nicht leicht zu dekompilieren sein. Ihre beste Wette kann die Simulation von ihnen in Betrieb sein, und die Schlussfolgerung der Schlüsselwerte als Ergebnis des Durchschreitens des Live-Codes. – RBerteig

0

Nein. Nicht immer. Das Dekompilieren ist nicht dasselbe wie das Zurückholen von c. Du kannst nie zurückkommen. Sie können versuchen, es zu rekonstruieren, versuchen, zu verstehen, was es tut, aber einige Informationen sind dauerhaft verloren.

Dies ist aus Bumerang Projekt:

jedoch ein allgemeiner Decompiler nicht versucht, jede Aktion des Decompiler zu umkehren, sondern wandelt sie das Eingabeprogramm wiederholt, bis das Ergebnis Quelle hohe Code. Es wird die ursprüngliche Quelldatei daher nicht neu erstellen; wahrscheinlich nichts dergleichen.

So schafft es einige C-Code, dass sein könnte (aber wird nie wissen) die Quelle C.

+0

Natürlich ist dies in vielen Fällen ausreichend. Es kann zum Beispiel verwendet werden, um eine Legacy-Binärdatei auf eine neue Plattform zu verschieben. Obwohl ein Simulator der Legacy-Plattform oft eine bessere Wahl ist .... – RBerteig