Ich habe dies gegoogelt, aber abgesehen von einigen Artikeln konnte ich kein Reverse Engineering-Tool finden, das mit maschinellem Lernen erstellt wurde.
Ich bin kein Experte für maschinelles Lernen und tiefes Lernen, aber es scheint vernünftig zu denken, dass wir angesichts der Tatsache, dass wir Milliarden von Open-Source-Codezeilen haben, diese verwenden können, damit unsere "Maschine" lernen kann, wie diese zusammengesetzt und ausführbar ist Code sieht so aus und studiert sie einfach, beherrscht die Kunst des Umkehrens und erstellt daher auf diese Weise ein Tool, mit dem jedes Programm mit großer Genauigkeit rückgängig gemacht werden kann.
Ist das jetzt machbar oder fehlt mir hier etwas? Gibt es ein Werkzeug, das auf diese Weise oder auf dem Weg zum Herauskommen gebaut wurde? Was denkst du darüber? Wird überhaupt ein besseres Umkehrwerkzeug benötigt oder gibt es bereits ein großartiges Umkehrwerkzeug, das die Arbeit mit der bestmöglichen Genauigkeit erledigen kann?
quelle
Antworten:
KI im Allgemeinen, einschließlich maschinelles Lernen, verspricht signifikante Verbesserungen bei Reverse Engineering-Werkzeugen. Disassembler sind ziemlich dumm. Wenn Symbole nicht aus der ausführbaren Datei entfernt werden, kann aus einer ausführbaren Datei eine Datei erstellt werden, die ähnlich wie der Quellassemblierungscode formatiert ist. Bibliotheksdateien wie .a, .so oder .dll-Dateien können ebenfalls in Assembly wiederhergestellt werden. Im Fall von Java kann Bytecode in der Sprache der virtuellen Maschine wiederhergestellt werden.
Das Wiederherstellen von Code höherer Ebene in C oder Java ist schwieriger. Höhere Strukturen in C ++ oder Scala verursachen größere Schwierigkeiten. Das Problem besteht darin, dass mehr als eine übergeordnete Struktur zu einer einzelnen Maschine, einem Bytecode oder einem Programm auf Assemblyebene kompiliert wird. Das Kompilieren ist für jede Compiler- und Optomisierungsstufe nahezu eine Eins-zu-Eins-Beziehung. Das Dekompilieren ist eine Eins-zu-Viele-Beziehung, und die Optimierung verschlechtert die Situation nur. Der Code in einer vorgetäuschten kompilierten Sprache
kann mit einem hohen Grad an Optimierung zu demselben Code wie dieser Code in derselben vorgetäuschten Sprache kompiliert werden.
So wie AI bei der Optimierung verwendet werden kann (um den kleinsten und schnellsten Satz von Maschinenanweisungen zum Ausführen des Algorithmus zu finden), kann AI auch entwickelt werden, um der Dekompilierung von Assembly-, Maschinen- oder Bytecode einen höheren Programmierstil zuzuweisen. Ein paar Dinge wären nötig.
Beim Dekompilieren von Dateien, aus denen Symbolinformationen entfernt wurden, kann AI Variablen, Konstanten und Funktionen möglicherweise sinnvolle Namen zuweisen, indem die Variablen im Programm und das domänenspezifische Vokabular aus jedem über die Programme geschriebenen Text extrahiert werden .
Dies mag ein Bereich sein, der etwas über dem neuesten Stand der Technik liegt, aber nicht unmöglich ist.
quelle
Derzeit ist die Dekompilierung lediglich ein Prozess zum Erzeugen eines Hochsprachencodes aus einer bestimmten Binärdatei (Maschinen-, Bytecode usw.), der auf denselben Code zurückgeführt werden kann.
Dieser Prozess wird mehr oder weniger für die Sprachen durchgeführt, die wichtig sind.
Ich glaube nicht, dass es dringend notwendig ist, bessere Dekompilierungswerkzeuge zu generieren, da ich mir nicht einmal sicher bin, wie das helfen würde. Ja, Sie könnten ML anwenden, um mehr menschlich aussehenden Code mit potenziell variablen Namen und Kommentaren zu erhalten, aber das war es auch schon.
Mit zwei Worten: Die aktuellen Bedürfnisse werden erfüllt und eine weitere Entwicklung in diesem Bereich ist nicht gerechtfertigt.
quelle