Reverse Engineering
Reverse Engineering bezeichnet den Vorgang, aus einem bestehenden, fertigen System oder Produkt durch Untersuchung der sichtbaren Strukturen oder beobachtbaren Verhaltensweisen die Konstruktionspläne zu extrahieren.
Insbesondere bezogen auf Software ist damit meistens eine der beiden folgenden Bedeutungen gemeint:
- Die Rückgewinnung des Quellcodes aus dem Binärcode eines ausführbaren Programmes oder einer Programmbibliothek
- Die Erschließung eines Kommunikationsprotokolls aus der Beobachtung der Kommunikation
Im ersten Falle werden oft Decompiler eingesetzt, die den Quellcode eines Programms automatisch aus seinem Binärcode extrahieren. Ist dies nicht möglich, kann auch der aus dem Binärcode des Programms direkt ermittelbare Maschinencode manuell analysiert werden, was allerdings mit erheblichem Aufwand verbunden ist. In beiden Fällen kann i. d. R. nicht der komplette Programmquellcode ermittelt werden, weil Kommentare und lokale Objektnamen in den meisten Fällen nicht im Binärcode enthalten sind. Oft ist das Ergebnis jedoch trotzdem für den jeweiligen Zweck ausreichend, z. B. zum Beheben eines Fehlers oder zur Verhaltensanalyse eines Softwaresystems.
Viele Softwarefirmen verbieten in ihren Lizenzbedingungen, ihre Produkte einem Reverse Engineering zu unterziehen. Davon ist rechtlich jedoch nur die erste Form betroffen, da die zweite Form nicht direkt die Analyse eines Softwaresystems zum Gegenstand hat. Anstatt dessen wird die Kommunikation des Systems mit der Außenwelt analysiert, so dass diese Art des Reverse-Engineering nicht unter die jeweiligen Lizenzklauseln fällt. Zudem sind diese Lizenzklauseln in vielen Ländern ungültig, da den Nutzern der Software hier zur Überprüfung der Anwendungssicherheit oder zur Fehlerbehebung vom Gesetzgeber das Recht zugestanden wird, ein von Ihnen erworbenens Softwareprodukt einem Reverse-Engineering zu unterziehen.