Reverse Engineering einer Software
Ursprünglich stammt Reverse Engineering aus dem Maschinenbau. Heute noch werden mit 3D-Scan-Verfahren, Computer-Tomographie, Ultraschallvermessung und anderen Möglichkeiten Informationen gewonnen, um die Funktionsweise einer Maschine oder eines mechanischen Geräts zu verstehen. Wo beim Engineering die Bestandteile eines Produkts entworfen und so zusammengesetzt werden, dass ein funktionsfähiges Gerät daraus entsteht, kehrt das Reverse Engineering diesen Prozess um.
Die Rückentwicklung soll Aufschluss darüber geben, wie die einzelnen Bestandteile funktionieren und verhilft so zu einem kompletten Funktionsverständnis. Gerade deswegen wird die Technik auch gern bei Konkurrenzprodukten angewendet: Man verspricht sich so, sein eigenes Produkt verbessern oder anpassen zu können, um im Wettbewerb am Markt zu bestehen. Reverse Engineering wird aber auch aus vielen weiteren Gründen eingesetzt und ist nicht auf Hardware begrenzt. Wie und warum wird Reverse Engineering für Software eingesetzt?
Die Rückentwicklung von Software
Das Reverse Engineering von Code erlaubt es Programmierern, Entwicklungs- und Produktionsprozesse einer Software umzukehren und so einen wertvollen Blick hinter die Kulissen eines Programms zu erhalten. Die Dekonstruktion und Rückentwicklung einer Software ermöglicht einen Einblick in den Quellcode einer Anwendung. Ist der Code bekannt, kann eine Software von Experten wie ein offenes Buch gelesen werden. Es ist ihnen dann möglich, die Architektur des Programms, die Funktionsweise und die internen Strukturen zu verstehen, umzuschreiben oder nachzubauen. Das aus der Rückentwicklung von Software gewonnene Verständnis über deren Prozesse erlaubt es zudem, Fehler im Programm zu beheben. Im Software-Bereich wird Reverse Engineering vor allem zur Entwicklung neuer Produkte, Fehlersuche oder Analyse von Konkurrenzprodukten eingesetzt.
Bezeichnet die Nachkonstruktion eines bereits existierenden Produktes – in diesem Fall einer Software. Dabei wird das Produkt „zerlegt“, um dessen Aufbau, Struktur und Funktion zu verstehen. Ziel des Reverse Engineering im Software-Bereich ist es, den Code eines bestehenden Programms nachzubauen. So können Software optimiert, Fehler in der Funktionsweise behoben, Konkurrenzprogramme analysiert und neue Produkte entwickelt werden.
Prozesse des Reverse Engineering einer Software
Reverse Engineering wird sowohl zur Untersuchung industriell gefertigter Produkte als auch bei der Rekonstruktion einer Software benötigt. Mit der Nachkonstruktion einer Software wird üblicherweise einer der drei folgenden Prozesse beschrieben:
Die Wiederherstellung des Quellcodes einer Software
Bei einem Quellcode handelt es sich um den in einer Programmiersprache geschriebenen Text eines Computerprogramms. Diesen für Menschen lesbaren Text wandelt der Computer vollständig automatisch in eine für ihn lesbare Maschinensprache um. Um den Quellcode einer Software erschließen zu können, muss also die Übersetzung der Maschinensprachen rückgängig gemacht werden. Dazu wird zum Beispiel ein Decompiler eingesetzt. Das ist ein Computerprogramm, das aus dem binären Maschinencode wieder einen für Menschen lesbaren Quelltext erzeugt. Dieser Vorgang der Rückübersetzung des maschinenlesbaren Binärcodes in einen menschenlesbaren Quellcode erfolgt automatisch.
Ist der Binärcode nicht vollständig rekonstruierbar, kann ein Disassembler verwendet werden. Dieses Programm wandelt die binär kodierte Maschinensprache in eine für Menschen lesbare Assemblersprache um, welche dann manuell analysiert wird. In den meisten Fällen ist es Programmierern nicht möglich, den vollständigen Quellcode zu rekonstruieren. Im Prinzip ist das nicht weiter schlimm, da es beim Reverse Engineering eines Codes eher darum geht, die Idee dahinter zu verstehen und weniger, den Originalcode komplett abbilden zu können. Selbst mit partiellen Codes lassen sich bereits Verhaltensanalysen der Software durchführen oder Fehler beheben. Vor allem Softwareentwickler nutzen Decompiler und Disassembler.
Verstehen der Regeln eines Kommunikationsprotokolls
Reverse Engineering kommt ebenso zum Einsatz, wenn Entwickler beispielsweise Treiber für Betriebssysteme schreiben wollen, das Wissen um die exakten Funktionsweisen und den Aufbau des Betriebssystems jedoch geheim ist. Mithilfe eines Sniffers werden dann die Regeln eines Kommunikationsprotokolls erschlossen. Der Sniffer ist ein Software-Tool zur Analyse des Datenverkehrs in einem Netzwerk. Das Werkzeug stellt beispielsweise Auffälligkeiten im Datenaustausch zwischen zwei Geräten fest. Die Auswertung solcher Kommunikationsweisen gibt Programmierern Aufschluss darüber, welche Regeln das entsprechende Protokoll befolgt.
Nachträgliche Erstellung eines Modells einer Software
Bei dieser Art wird vielmehr von einer Code-Rückführung als von Reverse Engineering, also der Nachkonstruktion gesprochen. Der rekonstruierte Quellcode einer Software wird hier modifiziert und in ein Modell übertragen, um dort weiterverarbeitet werden zu können. So können Software-Projekte mit der grafischen Modellierungssprache UML zur Spezifikation, Konstruktion und Dokumentation von Software-Teilen ergänzt und nachträglich erzeugt werden.
Wann kommt Reverse Engineering bei Software zum Einsatz?
Reverse Engineering für Code kann auf unterschiedlichen Gebieten eingesetzt werden und so ganz verschiedene Nutzen erfüllen:
- Prüfung und Qualitätsmanagement eigener Software auf deren Funktion
- Weiterentwicklung von eigener Software
- Untersuchung von Netzwerkkommunikationsprotokollen
- Aufspüren von Computerviren, Trojanern, Erpressersoftware und sonstigen schädlichen Programmen
- Portierung oder Instandhaltung von Abandonware
- Suche nach Softwarefehlern
- Generelle Untersuchung eines Dateiformats für das eigene Verständnis
- Verbesserung von Softwarekompatibilitäten mit Plattformen und Software von Drittanbietern
- Verwendung von undokumentierten Plattformfunktionen
Darüber hinaus kann ein Reverse Engineering im Software-Bereich zur Analyse von Konkurrenzprodukten genutzt werden. Obwohl viele Firmen das Reverse Engineering ihrer Produkte untersagen und das in ihren Lizenzbedingungen darlegen, ist die Analyse von Protokollen davon rechtlich nicht betroffen. Das ist der Fall, weil die Software selbst gar nicht Gegenstand der Untersuchung durch Reverse-Engineering-Tools ist. Zudem sind solche Lizenzklauseln in vielen Ländern generell ungültig. Den Nutzern einer erworbenen Software steht gesetzlich das Recht zu, diese zur Überprüfung der Anwendungssicherheit sowie zur Fehlerbehebung einem Reverse Engineering zu unterziehen.
Die Software-Rückentwicklung erlaubt Programmierern und Entwicklern wertvolle Einblicke in die Funktionsweise von digitalen Anwendungen. Dies ermöglicht gezielte Fehlerbehebungen und kann bei der (agile) Entwicklung eigener Software hilfreichen Input geben.