Reverse Engineering (aus ; für umgekehrt entwickeln, rekonstruieren; Kürzel: RE; auch Nachkonstruktion) bezeichnet den Vorgang, aus einem bestehenden fertigen System oder einem meistens industriell gefertigten Produkt durch Untersuchung der Strukturen, Zustände und Verhaltensweisen die Konstruktionselemente zu extrahieren. Aus dem fertigen Objekt wird somit wieder ein Plan erstellt.

Im Gegensatz zu einer funktionellen Nachempfindung, die ebenso auf Analysen nach dem Black-Box-Prinzip aufbauen kann, wird durch Reverse Engineering angestrebt, das vorliegende Objekt weitgehend exakt abzubilden.

Oft wird versucht, zur Verifikation der gewonnenen Einsichten eine 1:1-Kopie des Objekts anzufertigen, auf deren Basis es grundsätzlich möglich ist, Weiterentwicklung zu betreiben.

Einsatzbereiche Hardware Um Hardware zwecks Nachbau zu untersuchen, wurden z. B. in der DDR Methoden entwickelt, bei denen ein Chip-Die lagenweise abgetragen wurde (durch Schleifen oder selektives Ätzen) und dann die Ebenen per Mikroskop untersucht wurden, um die Funktionalität und ihre Hardwarebasis herauszufinden. Auf diese Weise entstand ein Z80-Nachbau als U880. Diese Berichte sind glaubhaft, da einige Firmen noch heute solche Dienste anbieten und erfolgreich erbringen.

Software Speziell bezogen auf Software wird darunter meistens einer der folgenden Vorgänge verstanden:

Die Rückgewinnung des Quellcodes oder einer vergleichbaren Beschreibung aus Maschinencode, z. B. von einem ausführbaren Programm oder einer Programmbibliothek, etwa mit einem Disassembler (kann Teil eines Debuggers sein) oder einem Decompiler. Die Untersuchung des Programmablaufs und seiner Kommunikation mit der Systemumgebung in einem Debugger. Die Erschließung der Regeln eines Kommunikationsprotokolls aus der Beobachtung der Kommunikation, z. B. mit einem Sniffer. Die nachträgliche Erstellung eines Modells, ausgehend von bereits vorliegendem Quellcode, in der objektorientierten Programmierung.

Im ersten Fall werden oft Decompiler eingesetzt, die den Quellcode eines Programms weitestgehend automatisch aus seinem Binärcode zurückgewinnen. Ist dieses nicht durchgehend möglich, so kann der aus dem Binärcode des Programms direkt mit einem Disassembler ermittelbare Maschinencode auch manuell analysiert werden, was allerdings eine merkliche Erschwernis bedeutet. Es kann i. d. R. nicht der gesamte Programmquellcode ermittelt werden, da z. B. Kommentare niemals und lokale Objektnamen nur selten im verfügbaren Binärcode enthalten sind. Gelegentlich finden Rückentwickler aber auch die dafür erforderlichen Debug-Symbole im fertigen Produkt wieder, so zum Beispiel im Spiel Super Mario 64. Oft ist das Ergebnis trotz allem für den jeweiligen Zweck ausreichend, z. B. zur Verhaltensanalyse eines Softwaresystems oder als Hilfe beim Beheben eines Fehlers. Manche Debugger erlauben die Vergabe eigener Namen für Symbole und Objekte, wobei dies nur dem Benutzerkomfort dient und keinen Einfluss auf das Programm hat.

Reverse Engineering ist oft auch notwendig, wenn etwa die Entwickler eines Betriebssystems, welches freie Software ist, für ein bestimmtes Gerät einen Gerätetreiber schreiben wollen. Die Konstruktion des Gerätes ist ein Herstellergeheimnis. Zu den gängigen Herangehensweisen gehören die Öffnung und Untersuchung des Gerätes und das Abhören seiner Kommunikation bei seiner Bedienung. Das Internet bietet außerdem Quellen und Plattform für den Austausch mit anderen Entwicklern oder für die Suche nach technischen Informationen, etwa weil sie von Fachhändlern veröffentlicht worden sind oder weil beteiligte Unternehmen diese Informationen wissentlich oder unwissentlich im Internet veröffentlicht haben. Disassemblieren oder Dekompilieren eines vorhandenen Gerätetreibers, etwa von einem nicht-freien Betriebssystem, ist in der Regel nicht notwendig.

Ein weiteres Anwendungsfeld sind Quelltext-Rekonstruktionen von Abandonware gewordenen Computerspielklassiker, wie z. B. Another World, um u. a. Portierungen auf aktuelle Plattformen vornehmen zu können.

Inzwischen sind auch Hersteller auf das Reverse Engineering ihrer eigenen Produkte angewiesen, wenn zum Beispiel ein Produkt so lange am Markt ist, dass Originale nicht mehr erhalten sind, aber Gewährleistungsansprüche erfüllt werden müssen. So hat der Softwarehersteller Microsoft eine Sicherheitslücke in dem zu Office gehörenden Formeleditor entfernt, indem die binäre Programmdatei gepatcht wurde. Das normale Verfahren wäre, das Programm aus bearbeitetem Quellcode noch einmal zu erstellen. Ein Patch der binären Programmdatei wird nur vorgenommen, wenn der Quellcode nicht zur Verfügung steht. Der Reverse Engineer hatte hierbei zu beachten, dass wegen der digitalen Signatur die Größe des Programms nicht geändert werden durfte. Um die Integrität der Datei nicht zu stören, musste er außerdem die Adressen der Funktionen beibehalten. Trotz der neu hinzugefügten Sicherheitsfunktionen war das Programm nach dem Patch jedoch 14 Bytes zu kurz, sodass der Reverse Engineer den Leerraum mit neutralen Bytes auffüllen musste. Die übliche Vorgehensweise für Patches ist dagegen, eine neue Ausgabe des Programms aus vorhandenem Quellcode zu generieren.

Im Fall des Modellbaus nach der Entwicklung spricht man jedoch in Abgrenzung zum Reverse Engineering insbesondere während des Softwareentwicklungsprozesses von Code-Rückführung, wenn aus einer Entwurfsspezifikation gewonnener Quellcode manuell modifiziert und der modifizierte Quellcode wieder in das Modell der Entwurfsspezifikation übernommen wird, um dort weiterverarbeitet werden zu können (vor allem bei Single Source CASE-Werkzeugen). Dies ist auch möglich, wenn bei bereits fortgeschrittenen und umfangreichen Software-Projekten gar keine Entwurfsspezifikation beispielsweise in UML existiert und nachträglich erzeugt werden soll.P. Lempp, R. J. Torick: Software Reverse Engineering: An Approach to Recapturing Reliable Software. 4th Annual Joint Conference On Software Quality and Productivity, Crystal City, VA; 1.–3. März 1988.

In neueren Forschungsansätzen werden klassische Verfahren durch KI-basierte Methoden ergänzt. Dabei werden große Mengen an Quell- oder Binärcode genutzt, um Modelle zu trainieren, die typische Muster, wiederkehrende Strukturen oder funktionale Gemeinsamkeiten automatisch erkennen können. Solche datengetriebenen Verfahren dienen zunehmend dazu, komplexe Systeme zu charakterisieren, Entwicklungsstile zu vergleichen oder aus bestehenden Softwareartefakten abstrahierte Konstruktionsprinzipien abzuleiten. Damit eignen sie sich zur Optimierung von Prototypen oder, um zu Best Cases zu finden – von F&E bis zu Projektmanagement oder Vertrieb.

Anmerkungen

Maschinenbau Im Maschinenbau wird das Reverse-Engineering für verschiedene Aufgaben eingesetzt. Das ist eine direkte Folge der Verfügbarkeit von preisgünstigen 3D-Scannern mit hoher Auflösung – gepaart mit Software, die das Reverse Engineering immer enger mit den CAD-Systemen verzahnt. Gleichzeitig sind heute Computer-Systeme verfügbar, die über ausreichend Rechenleistung und Speicher verfügen, um die bei der Digitalisierung anfallenden Datenmengen zu verarbeiten.

Prozesse des Reverse-Engineering – Zielfindung Beim Reverse-Engineering kann man verschiedene Prozesse unterscheiden.

Allen gemeinsam ist, dass das Ziel den Weg bestimmt und in technische und fertigungstechnische Ziele unterteilt wird.

Technische Anforderungen Das Bauteil oder die Baugruppe steht dem Prozess in der Regel als physikalisches Objekt zur Verfügung. Bei historischen Systemen nutzt man alte Skizzen und Fotos. Wichtig ist zu verstehen, wie das Bauteil funktioniert und welche technischen Anforderungen gestellt werden. Zu den technischen Anforderungen gehören, welche Kräfte über das Bauteil übertragen werden, unter welchen Temperaturen das Bauteil eingesetzt wird, welchem Abrieb es unterliegt etc. Die Summe dieser Anforderungen ergibt das Ziel, an dem sich das Ergebnis des Reverse-Engineerings messen muss.

Fertigungstechnische Anforderungen Den zweiten Aspekt stellen die fertigungstechnischen Anforderungen dar. Es ist nicht immer wirtschaftlich, das neue Bauteil mit demselben Fertigungsprozess herzustellen wie das Original. Häufig lohnt es sich nicht, bei geringen Stückzahlen, eine Gussform zu erstellen, wenn die technischen Anforderungen es erlauben dieses Bauteil als Fräsbauteil zu fertigen.

Alle weiteren Prozesse folgen diesem ersten Prozess der technischen und fertigungstechnischen Zieldefinition.

Scan to Print mini|Einfacher Stopfen für ein Profil Nach der Zieldefinition, die bestimmt, mit welchem Material das Bauteil gedruckt wird, muss das Bauteil mit einem 3D-Scanner oder einem industriellen Computer-Tomographen (iCT) vollständig erfasst werden. Nacharbeit am so erstellten 3D-Modell ist in der Regel notwendig, bevor es gedruckt werden kann. Nicht gescannte Bereiche, wie beispielsweise die aufliegende Seite eines Modells oder andere nicht einsehbare Details, müssen gegebenenfalls ergänzt werden. Auch muss Sorge dafür getragen werden, dass das Flächenmodell „wasserdicht“ ist, dass also alle Kanten verknüpft sind, alle Flächenorientierungen homogenisiert sind und sich keine Löcher in der Oberfläche befinden. Abschließend sind noch druckprozessspezifische Anpassungen wie Stützstrukturen zu ergänzen. Ist diese Aufarbeitung abgeschlossen kann das Modell auf einem geeigneten 3D-Drucker reproduziert werden.

Mit diesem Verfahren lassen sich nur einfache Bauteile mit geringen Anforderungen herstellen. Das Verändern der Daten, die man aus dem 3D-Scan erhält, ist sehr zeit- und arbeitsintensiv. Damit ist dieses Verfahren nicht für alle Bauteile ökonomisch. Es bietet sich beispielsweise zur Herstellung nicht mehr verfügbarer Ersatzteile an.

Reverse-Engineering für die Reparatur Bei diesem Prozess geht es darum ein Bauteil mit komplexen technischen Anforderungen herzustellen. Bei Investitionsgütern, wie einem Kraftwerk, einem Walzwerk oder einem Verdichter, findet man noch heute Systeme im Einsatz, die 30 Jahre und älter sind. Zudem nehmen die Hersteller dieser Sondermaschinen teilweise nicht mehr am Markt teil.

In diesem Fall werden die Bauteile vermessen und oft mit einem 3D-Scanner erfasst. Diese Daten werden dann in einer geeigneten Software in ein parametrisches CAD-Model umgewandelt. Durch die Abnutzung des Bauteils wie Verschleiß und Verzunderung, ist es eine kleine Kunst zu erkennen, wie die Abmaße am Originalteil gewesen sind. Im Speziellen bei den Profilen von Turbinenschaufeln und den Kanälen von Pumpen und Turbinen findet dieses Verfahren häufig Anwendung, da diese Profile über mehrere Spline-Querschnitte definiert sind.

Mit diesem Prozess lassen sich beliebig komplexe Systeme herstellen, die durch den Einsatz von modernen Materialien, Beschichtungen und Bearbeitungsverfahren besser als das Original sein können.

Dieser Prozess ist perfekt für die Reparatur von teuren Maschinen geeignet, bei denen die Ersatzteile nur wenige Male benötigt werden.

Wenn man diesen Prozess in einem regulierten Bereich wie der Luftfahrt-, der Pharma- oder der Lebensmittel-Industrie einsetzt, müssen die Produkte nach dem Reverse-Engineering von der zuständigen Behörde zugelassen werden.

Reverse-Engineering für eine Serienproduktion mini|RE Serienproduktion Dieser Prozess durchläuft die Schritte des Reverse-Engineerings für die Reparatur. Nachdem das CAD-Model mit der spezialisierten Software erstellt wurde, wird dieses als natives Teil in das CAD-System des Herstellers übertragen. Damit wird gewährleistet, dass die Bauteile ohne besondere Kenntnisse in einer spezialisierten Software von einem Konstrukteur weiterentwickelt werden können.

Reverse-Forward Engineering mini|Reverse-Forward Engineering