Ingenium Reverse Engineering

Speziell bezogen auf Computer-Software, wird darunter meistens einer der drei folgenden Vorgänge verstanden:

* Die Rückgewinnung des Quellcodes oder einer vergleichbaren Beschreibung aus Binärcode. Z. B. von einem ausführbaren Programm oder einer Programmbibliothek, etwa mit einem Disassembler (kann Teil eines Debuggers sein) oder einem Decompiler.
* 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 nie und lokale Objektnamen nur selten im verfügbaren Binärcode enthalten sind. 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.

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, denn das dafür notwendige Wissen ist in vielen Fällen geheim. Aber hier genügt oft das Sniffen der Kommunikation zu und von dem betreffenden Gerät, also die zweite Methode. Disassemblieren oder Decompilieren eines vorhandenen Gerätetreibers, etwa von einem nicht-freien Betriebssystem, ist in der Regel nicht notwendig.

Beim dritten Fall 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.

Reverse Engineering (engl., bedeutet: umgekehrt entwickeln, rekonstruieren, Kürzel: RE) 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 gemacht. Im Gegensatz zu einer funktionellen Nachempfindung, die ebenso auf Analysen nach dem Black-Box-Prinzip aufbauen kann, versucht das Reverse Engineering, das vorliegende Objekt weitgehend exakt abzubilden. Häufig 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.

Naturwissenschaften
In den Naturwissenschaften ist Reverse Engineering eine übliche Analysemethode:

* Ein Genetiker versucht, den genetischen Bauplan der Zelle, die DNA-Sequenz zu entschlüsseln.
* Ein Biologe versucht, bestimmte Vorgänge in der Natur zu verstehen.
* Ein Physiker untersucht den Aufbau von Teilchen.
* Ein Chemiker betreibt Retrosynthese (zur Strukturaufklärung).

Sie alle betreiben also im weiteren Sinne ebenfalls Reverse Engineering.