Frage

jedes c-Programm in Maschinencode umgewandelt, wenn diese binären verteilt wird. Da der Befehlssatz eines Computers bekannt ist, ist es möglich, die C ursprüngliche Programm zurück zu bekommen?

War es hilfreich?

Lösung

Sie können nie genau die gleiche Quelle zurück, da es keine Meta-Daten über den mit dem kompilierten Code gespeichert ist.

Sie können aber Code neu erstellen aus dem Assemblercode.

Überprüfen Sie dieses Buch, wenn Sie in diesen Dingen interessiert sind: Umkehren: Secrets of Reverse Engineering .

Bearbeiten

Einige Compiler-101 hier, wenn Sie einen Compiler mit einem anderen Wort zu definieren sind und nicht so technisch wie „Compiler“, was wäre es?

Antwort: Übersetzer

Ein Compiler übersetzt die Syntax / Phrasen, die Sie in einer anderen Sprache geschrieben haben, ein C-Compiler übersetzt Assembly oder sogar Maschinencode. C # -Code wird übersetzt IL und so weiter.

Die ausführbare Datei Sie haben, ist nur eine Übersetzung der ursprünglichen Text / Syntax und, wenn Sie wollen „umkehren“, also „es übersetzt zurück“ werden Sie wahrscheinlich nicht die gleiche Struktur erhalten, wie Sie beim Start hatten.

Ein richtiges Beispiel wäre, wenn Sie aus dem Englischen ins Deutsche übersetzen und die aus der deutschen zurück auf Englisch, wird die sentance Struktur höchstwahrscheinlich anders sein, könnte also verwendet werden, aber die Bedeutung der Kontext, wird höchstwahrscheinlich nicht haben sich geändert.

Das gleiche gilt für einen Compiler / Übersetzer geht, wenn Sie von C nach ASM gehen, ist die Logik das gleiche, es ist nur eine andere Art, es zu lesen (und natürlich auch seiner optimierten).

Andere Tipps

Es hängt davon ab, was Sie mit Original-C-Programm bedeuten. Dinge wie lokale Variablennamen, Kommentare, etc ... sind nicht im binären enthalten, so gibt es keine Möglichkeit, die exakt gleichen Quellcode zu erhalten, wie die, die binäre zu produzieren verwendet. Tools wie IDA Pro könnte Ihnen helfen, ein binäres zerlegen.

Ich würde die Conversion-Rate von einem wirklich erfahrenen Hacker guestimate bei etwa 1 Kilobyte von Maschinencode pro Tag. Bei gemeinsamen westlichen Gehälter, das setzt den Preis der, sagen wir, 100 KB ausführbare bei etwa $ 25.000. so viel Geld, nachdem er alles, was gewonnen hat ist ein Stück von C-Code, der genau das tut, was Ihr tut, minus der Nutzen von Kommentaren und so weiter. Es gibt keine Möglichkeit, im Wettbewerb mit Ihrer Version, können Sie Updates und Verbesserungen liefern, viel schneller. Reverse Engineering das Updates ist eine nicht triviale Anstrengung auch.

Wenn das Preisschild Sie nicht beeindrucken, können Sie willkürlich die Herstellungskosten erhöhen, indem mehr Code hinzufügen. Denken Sie daran, dass qualifizierte Hacker, die große Programme wie dieses haben etwas viel Besseres zu tun, bewältigen können. Sie schreiben ihren eigenen Code.

Eines der besten Arbeiten zu diesem Thema, dass ich über ist:

Schweine von Würstchen? Reengineering von Assembler nach C über Fermat .

Der Anspruch ist es, Sie ein angemessenes C-Programm zurück, auch wenn der ursprüngliche asm-Code nicht in C geschrieben wurde! Viele Einschränkungen gelten.

Die Hex-Rays Decompiler (Erweiterung IDA Pro) kann genau das tun, . Es ist immer noch ziemlich neu und kommende, aber vielversprechend. Es dauert ein wenig gewöhnungsbedürftig, aber kann möglicherweise den Umkehrprozess beschleunigen. Es ist kein „Königsweg“ - Nr. C Decompiler ist, aber es ist ein großer Gewinn

Der gemeinsame Name für dieses Verfahren wird als „Hamburger Weg zurück in die Kühe.“ Es ist möglich, Ingenieur Binärcode in ein funktionell äquivalentes C-Programm rückgängig zu machen, aber ob der C-Code eine starke Ähnlichkeit mit dem Original trägt, ist eine offene Frage.

Die Arbeit an Tools, die dies tun, ist eine Forschungstätigkeit. Das heißt, ist es möglich, etwas in den einfachen Fällen zu bekommen (Sie werden nicht auf lokalen Variablen-Namen wiederherstellen, es sei denn Debug-Symbole vorhanden, zum Beispiel sind). Es ist fast unmöglich in der Praxis für große Programme oder wenn der Programmierer es schwierig, entschieden hatte, zu machen.

Es gibt keine 1: 1-Zuordnung zwischen einem C-Programm und dem ASM / Maschinencode es produzieren wird - ein C-Programm zu einem anderen Ergebnis auf verschiedene Compiler oder mit unterschiedlichen Einstellungen kompilieren) und manchmal zwei verschiedene Bits von C konnte produziert den gleichen Maschinencode.

Sie auf jeden Fall können erzeugen C-Code aus einer kompilierten EXE. Sie können einfach nicht wissen, wie eine ähnliche Struktur in es auf den ursprünglichen Code sein wird -. Abgesehen von Variable / Funktionsnamen verloren, ich nehme an, es wird nicht die ursprüngliche Art und Weise kennen Sie den Code ein Split unter vielen Dateien war

Sie können hex-rays.com versuchen, es ein wirklich schönes Decompiler hat, die mit 99% Genauigkeit Assembler-Code in C dekompilieren kann.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top