Reverse Engineering ist das Auseinandernehmen eines Objekts, um zu sehen, wie es funktioniert, um das Objekt zu duplizieren oder zu verbessern. Die aus älteren Industrien übernommene Praxis wird heute häufig bei Computerhardware und -software angewendet. Beim Software-Reverse-Engineering wird der Maschinencode eines Programms (die Folge von 0en und 1en, die an den Logikprozessor gesendet werden) in den Quellcode zurückverwandelt, in dem es geschrieben wurde, wobei Anweisungen der Programmsprache verwendet werden.
Software-Reverse-Engineering wird durchgeführt, um den Quellcode eines Programms wiederherzustellen, weil der Quellcode verloren gegangen ist, um zu untersuchen, wie das Programm bestimmte Operationen ausführt, um die Leistung eines Programms zu verbessern, um einen Bug zu beheben (einen Fehler im Programm zu korrigieren, wenn der Quellcode nicht verfügbar ist), um bösartige Inhalte in einem Programm wie z. B. einen Virus zu identifizieren oder um ein Programm, das für die Verwendung mit einem Mikroprozessor geschrieben wurde, für die Verwendung mit einem anderen zu verwenden. Reverse Engineering zum Zwecke des Kopierens oder Vervielfältigens von Programmen kann eine Urheberrechtsverletzung darstellen. In einigen Fällen verbietet die lizenzierte Nutzung von Software ausdrücklich das Reverse Engineering.
Jemand, der Reverse Engineering an Software durchführt, kann verschiedene Werkzeuge verwenden, um ein Programm zu disassemblieren. Ein Werkzeug ist ein Hexadezimal-Dumper, der die Binärzahlen eines Programms im Hexadezimalformat ausgibt oder anzeigt (was einfacher zu lesen ist als ein Binärformat). Durch die Kenntnis der Bitmuster, die die Prozessorbefehle repräsentieren, sowie der Befehlslängen kann der Reverse Engineer bestimmte Teile eines Programms identifizieren, um zu sehen, wie sie funktionieren. Ein weiteres gängiges Werkzeug ist der Disassembler. Der Disassembler liest den Binärcode und zeigt dann jede ausführbare Anweisung in Textform an. Ein Disassembler kann nicht zwischen einer ausführbaren Anweisung und den vom Programm verwendeten Daten unterscheiden, daher wird ein Debugger verwendet, der es dem Disassembler ermöglicht, die Disassemblierung der Datenteile eines Programms zu vermeiden. Diese Werkzeuge könnten von einem Cracker verwendet werden, um ein Computersystem zu modifizieren und sich Zugang zu ihm zu verschaffen oder anderen Schaden anzurichten.
Hardware-Reverse-Engineering beinhaltet das Auseinandernehmen eines Geräts, um zu sehen, wie es funktioniert. Wenn zum Beispiel ein Prozessorhersteller sehen will, wie der Prozessor eines Konkurrenten funktioniert, kann er den Prozessor eines Konkurrenten kaufen, ihn auseinandernehmen und dann einen ähnlichen Prozessor herstellen. Dieser Vorgang ist jedoch in vielen Ländern illegal. Im Allgemeinen erfordert Hardware-Reverse-Engineering viel Fachwissen und ist recht teuer.
Eine andere Art von Reverse-Engineering besteht darin, 3-D-Bilder von hergestellten Teilen zu erstellen, wenn keine Blaupause verfügbar ist, um das Teil wiederherzustellen. Bei der Flächenrückführung wird das Bauteil mit einem Koordinatenmessgerät (KMG) vermessen. Während der Messung wird ein 3-D-Bild erzeugt und auf einem Monitor angezeigt. Nachdem die Messung abgeschlossen ist, wird das Bild bemaßt. Mit diesen Methoden kann jedes beliebige Teil rückgebaut werden.
Im Gegensatz zum Reverse Engineering wird manchmal auch der Begriff Forward Engineering verwendet.