Developer und Developerinnen kommen früher oder später mit dem Begriff Reverse Engineering in Kontakt. Diese Methode wird zum wichtigen Instrument, um fertige Produkte zu optimieren. In diesem Artikel zeigen wir Ihnen, was es mit Reverse Engineering auf sich hat, wozu es eingesetzt wird und welche weiteren Begriffe Sie in diesem Zusammenhang kennen sollten.

→ Praktische Vorlage für Ihren Projektplan [Kostenloser Download]

Einsatzgebiete von der rückwärts laufenden Implementierung

Ein Produkt ist die Summe seiner Teile: Nach diesem Prinzip wird beim Reverse Engineering ein Produkt oder System in seine einzelnen Komponenten zerlegt, um die Verbindungen und Funktionsweise zu verstehen. Als typisches Reverse-Engineering-Beispiel gilt der Maschinenbau. Entstanden ist die Methode hier, um Konkurrenzprodukte zu analysieren und die eigenen Entwürfe zu verbessern.

Unterdessen findet Reverse Engineering jedoch nicht mehr nur im Hardwarebereich Anwendung, sondern auch und vor allem in der Softwareentwicklung. Untersucht werden hier nicht immer Konkurrenzprodukte, sondern auch das eigene fertige System. Reverse Engineering bietet nämlich die Möglichkeit, das eigene Produkt stetig weiterzuentwickeln und dabei die Kontrolle über den Legacy Code zu behalten.

Ziele beim Reverse Engineering: Software effizient produzieren

Reverse Engineering im Softwarebereich verfolgt, anders als in der Hardwareanalyse, ganz unterschiedliche Ziele. Die Erschließung des Quellcodes wird vor allem eingesetzt, um:

  • vorhandene Software zu rekonstruieren und mit neuen Funktionsweisen zu kombinieren,
  • alte Systeme in eine neue, bessere Architektur umzuwandeln,
  • komplexe Zusammenhänge zu verstehen,
  • Fehler zu verbessern oder verlorene Informationen zu rekonstruieren,
  • Viren wie Trojaner ausfindig zu machen und zu bereinigen,
  • Qualitätsmanagement der eigenen Software durchzuführen.

Die Ziele beim Reverse Engineering hängen immer davon ab, ein komplexes System zu verstehen und es in alternative Produkte umzuwandeln. Teilweise werden dadurch auch neue Informationen gewonnen.

Bei der Konkurrenzanalyse kann außerdem eine Differenzanalyse durchgeführt werden, um das eigene Produkt vom Wettbewerb abzuheben. Das verschafft einen enormen Marktvorteil und ist die Voraussetzung, um ein widerstandsfähiges System zu implementieren.

Vorgehensweise: Wie funktioniert Reverse Engineering?

Idealerweise wird beim Reverse Engineering auf den Quellcode eines Systems zurückgegriffen. Dieser enthält den Programmcode, der wiederum in einer für Menschen lesbaren Programmiersprache verfasst ist. Liegt der Quellcode jedoch nicht vor, so besteht ein System erst einmal nur aus einem Binärcode aus Einsen und Nullen, der nur für Maschinen lesbar ist.

In diesem Fall muss der Code mit einem Assembler zurückgewandelt werden. Bisweilen beinhalten Tools auch einen Compiler, der den eigentlichen Quellcode in eine Hochsprache übersetzt. Zwar liegt bei diesem Vorgehen nicht der Originalcode vor, jedoch ist ein Entwurf fürs Reverse Engineering in der Regel ausreichend, da es nur darum geht, das System grob zu verstehen und nicht 1:1 zu kopieren.

Ist Reverse Engineering legal?

Obwohl viele Softwareanbieter in ihrem Protokoll Lizenzrechte schildern und Reverse Engineering unterbinden, ist dies rechtlich nicht gültig. Reverse Engineering ist immer dann zulässig, wenn ein Produkt öffentlich zugänglich ist. Damit ist die Untersuchung der meisten Produkte rechtlich erlaubt.

Ist ein Produkt oder Software nicht öffentlich zugänglich, so regelt das Gesetz zum Schutz von Geschäftsgeheimnissen (GeschGehG) die Rechtslage. Das Gesetz bewahrt vor der unrechten Erlangung, Nutzung sowie Offenlegung von Geschäftsgeheimnis. Grundsätzlich ist Reverse Engineering jedoch legal, da es an öffentlichen Produkten operiert.

Verwandte Begriffe: Reengineering, Forward Engineering und Design Recovery

Reverse Engineering wird häufig in Zusammenhang mit weiteren, artverwandten Begriffen genannt wie Forward Engineering, Reengineering, Refactoring, Redokumentation und Design Recovery. Für eine schärfere Begriffstrennung haben wir Ihnen die folgenden Definitionen einmal zusammengefasst:

Reverse Engineering dient dem Verständnis zur Funktionsweise und Design eines Systems oder Produktes. Es wird jedoch keinerlei Veränderung am Produkt selbst vorgenommen.

Reengineering meint die neue Gestaltung eines Systems. Die Software erhält eine vollkommen neue Form, teilweise sogar neue Funktionen und Produktmerkmale. Beim reinen Reengineering wird das System nur rekonstruiert. Beim erweiterten Reengineering hingegen wird die Software mit zusätzlichen Funktionen ausgestattet.

Refactoring bezeichnet die Änderung der Struktur eines Systems. Das äußere Verhalten sowie Erscheinungsbild wird hingegen nicht verändert.

Redokumentation ist ein Bereich des Reverse Engineerings, der sich hauptsächlich damit befasst, verlorene Informationen in einem System wiederzufinden. Die Methode ist besonders bei der Fehlersuche und bei Systemausfällen von entscheidender Bedeutung.

Forward Engineering ist so etwas wie das Gegenteil von Reverse Engineering. Während beim Reverse Engineering rückwärts gedacht wird, plant das Forward Engineering vorwärts. Bezeichnet wird so der Prozess, der von der Definition der Anforderungen über den Entwurf bis zur endgültigen Konstruktion des Systems reicht.

Design Recovery gehört als Teilbereich zum Reverse Engineering. Die Methode besteht darin, das System zu reproduzieren und die Funktionsweisen zu verstehen.

Fazit: Denken Sie rückwärts

Um fertige Systeme zu verstehen und Funktionsweisen für die Entwicklung eigener Produkte einzusetzen, ist es manchmal gar nicht verkehrt, rückwärts zu gehen. Das Reverse Engineering rollt das System von hinten auf, um die Komplexität zu reduzieren und Fehleroptimierung zu betreiben. Für jeden Developer und jede Developerin gehört die Methode daher zum Repertoire moderner Produktentwicklung.

New call-to-action

Titelbild: Thomas Barwick / iStock / Getty Images Plus

Ursprünglich veröffentlicht am 28. September 2022, aktualisiert am Januar 20 2023

Themen:

Produktmanagement