Reverse-engineering von C++ - die besten tools und Vorgehen
Es tut mir Leid - C++ - source-code gesehen werden kann, wie die Umsetzung einer gestalterischen und mit reverse-engineering ich meine immer das design zurück. Es scheint, die meisten von Ihnen es gelesen haben, als erste C++ - Quellcode von Binärdateien. Ich habe eine genauere Frage an Verständnis eine C++ - Codebasis durch die Generierung von UML - tools&methology
Ich denke, es gibt viele tools, die reverse-engineer C++ (source-code), aber in der Regel ist es nicht so einfach zu verstehen, was Sie bekommen.
Haben jemanden zu finden der eine gute Methode?
Ich glaube, eines der Dinge, die ich vielleicht sehen wollen, zum Beispiel, ist der GUI-Schicht und wie es getrennt wird (oder nicht aus der Ruhe). Denke die tools sollte irgendwie erkennen Pakete, und dann lassen Sie mich manuell organisieren.
Sie erwarten einen dissasembler oder decompiler zu erkennen Pakete, ziehen Sie Elemente der Benutzeroberfläche aus nicht-UI-code, oder irgendetwas in der Nähe?
InformationsquelleAutor Olav | 2010-11-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Meines Wissens gibt es keine zuverlässige Werkzeuge können das reverse-Engineering kompiliertes C++.
Außerdem denke ich, es sollte in der Nähe von unmöglich zu konstruieren, die so ein Gerät. Ein kompiliertes C++ Programm wird zu nichts mehr als Maschinensprache-Anweisungen. Um kn ow-how, abgebildet in C++ - Konstrukte, die Sie wissen müssen der compiler, compiler-Einstellungen, Bibliotheken, etc ad infinitum.
Warum willst du so ein Ding? Je nachdem, was Sie es wollen, gibt es andere Wege, das zu erreichen, was Sie wirklich nach.
Ziemlich vereinbart - auch Sie können nicht realistisch reverse engineer C++.
Sie Jungs sind, vorausgesetzt, das Ziel ist die Wiederherstellung der original-source-code. Es ist hypothetisch möglich, um wieder etwas funktional gleichwertig (auch wenn dies bedeutet, dass template-Instanziierungen Aussehen wird unabhängige Typen und Funktionen). Jedoch, es gibt kein tool, das dies tut gut im moment.
Teran: schauen Sie sich die Hex-Rays decompiler.
Naja, ich würde sagen, Hex-Rays übernimmt die Aufgabe, "immer wieder etwas funktional gleichwertiges" ziemlich gut (mit ein bisschen Hilfe von dem user"), und es ist nicht "hypothetisch".
InformationsquelleAutor John Dibling
Können Sie ziehen Ablaufsteuerung mit dissembly aber Sie werden nie wieder Daten-Typen zurück...
Gibt es nur ganze zahlen (und vielleicht ein paar shorts) in der Montage. Denke, über, Objekte, arrays, Strukturen, strings und Zeiger-Arithmetik alle der gleiche Typ!
Die Namen sind nicht da. Was bleibt, ist nur Speicher-Adressen.
Jessop: inline-Funktionen sind nicht wirklich ein Problem, das wird nur angezeigt "decompiler", wie die mehrere Funktionen mit sich wiederholenden code. Sicher, es wird nicht so Aussehen wie die ursprüngliche Quelle, aber es kann sein, funktional gleichwertig mit dem ist, was wirklich wichtig ist für das reverse-engineering.
OK, aber auf dieser Grundlage können Sie "reverse-Engineering" von C++ - code dekompilieren, es zu assembler oder C.
gut dann kommen wie
dlopen
funktioniert auf Programme? Ich meine nicht, dass die Namen sind in der vtable, nur, dass Sie wahrscheinlich in der Symboltabelle der ausführbaren Datei, um so die Adressen, die Sie Aussehen, können Sie Sie in umgekehrter. Die ausführbare Datei kann gehabt haben externe Symbole beraubt, natürlich.InformationsquelleAutor nate c
Während es nicht eine komplette Lösung. Sie sollten sich in IDA Pro und Hexrays.
Es ist mehr für das "reverse-engineering" im traditionellen Sinne des Wortes. Wie in, es wird Ihnen ein gut genug Idee wie der code Aussehen würde, wie in einer C-ähnlichen Sprache, aber nicht (kann nicht) voll funktionierenden Quellcode.
Was es gut ist, ist immer ein gutes Verständnis davon, wie ein bestimmtes segment (in der Regel eine Funktion) funktioniert. Es ist "user assisted", was bedeutet, dass es Häufig eine Menge dereferenziert des offsets, wenn es wirklich eine Struktur oder Klasse. An dem Punkt, Sie geben dem decompiler mit einer struct-definition (Klassen sind wirklich nur Strukturen mit zusätzlichen Dinge wie v-Tabellen und so) und es wird die Analyse des code mit den neuen Informationen.
Wie gesagt, es ist nicht perfekt, aber wenn Sie wollen, um ein "reverse engineering" ist es die beste Lösung, die ich mir bewusst bin. Wenn Sie wollen full "Dekompilierung" dann sind Sie ziemlich viel Pech.
InformationsquelleAutor Evan Teran
Den OovAide Projekt an http://sourceforge.net/projects/oovaide/ oder auf github
hat ein paar features, die helfen können. Es verwendet den CLang-compiler
für das abrufen von genauen Informationen aus dem source-code. Es scannt die
Verzeichnisse suchen-source-code, und speichert die Informationen in
ein kleiner Datensatz, der enthält die erforderlichen Informationen für die Analyse.
Einem Konzept wird als Zone-Diagramme. Es zeigt die Beziehungen zwischen den Klassen an
ein sehr hohes Niveau, da jede Klasse so dargestellt als Punkt im Diagramm, und
Beziehung Zeilen angezeigt werden, die diese miteinander verbindet. Dies ermöglicht
die Diagramme zeigen Hunderte oder Tausende von Klassen.
Die OovAide Programm zone Diagramm-display hat eine call option "Show Untergeordneten Zonen",
die Gruppen der Klassen, die innerhalb von Verzeichnissen näher zu einander.
Es gibt auch directory-Filter, die es erlauben, die Reduzierung der Anzahl der Klassen
dargestellt in einem Diagramm, für sehr große Projekte.
Ein Beispiel für zone Diagramme und wie Sie funktionieren, wird hier gezeigt:
http://oovaide.sourceforge.net/articles/ZoneDiagrams.html
Wenn die Verzeichnisse zugeordnet werden Komponenten-Typen in den build-Einstellungen, dann
das Komponentendiagramm zeigt die Abhängigkeiten zwischen den Komponenten. Diese
auch zeigt die Komponenten sind abhängig von externen Komponenten wie
GTK oder anderen externen Bibliotheken.
Die nächste Ebene nach unten zeigt, so etwas wie UML-Klassendiagramme, sondern zeigt alle
Beziehungen statt nur der aggregation und Vererbung. Es kann zeigen,
Klassen, die in Methoden oder Klassen, die übergegangen sind
Parameter für Methoden. Jede Klasse gewählt werden kann, als Ausgangspunkt, um dann vor
eine Klasse Hinzugefügt wird, das Diagramm, wird eine Liste angezeigt, der die Anzeige
die Klassen angezeigt werden, die von einer Beziehung geben.
Der untersten Ebene zeigt Sequenz-Diagramme. Dies ermöglicht das navigieren nach oben oder unten
die aufrufstruktur bei der Anzeige der Klassen, die die Methoden.
InformationsquelleAutor user3230547