Ur­sprüng­lich stammt Reverse En­gi­nee­ring aus dem Ma­schi­nen­bau. Heute noch werden mit 3D-Scan-Verfahren, Computer-To­mo­gra­phie, Ul­tra­schall­ver­mes­sung und anderen Mög­lich­kei­ten In­for­ma­tio­nen gewonnen, um die Funk­ti­ons­wei­se einer Maschine oder eines me­cha­ni­schen Geräts zu verstehen. Wo beim En­gi­nee­ring die Be­stand­tei­le eines Produkts entworfen und so zu­sam­men­ge­setzt werden, dass ein funk­ti­ons­fä­hi­ges Gerät daraus entsteht, kehrt das Reverse En­gi­nee­ring diesen Prozess um.

Die Rück­ent­wick­lung soll Auf­schluss darüber geben, wie die einzelnen Be­stand­tei­le funk­tio­nie­ren und verhilft so zu einem kom­plet­ten Funk­ti­ons­ver­ständ­nis. Gerade deswegen wird die Technik auch gern bei Kon­kur­renz­pro­duk­ten an­ge­wen­det: Man ver­spricht sich so, sein eigenes Produkt ver­bes­sern oder anpassen zu können, um im Wett­be­werb am Markt zu bestehen. Reverse En­gi­nee­ring wird aber auch aus vielen weiteren Gründen ein­ge­setzt und ist nicht auf Hardware begrenzt. Wie und warum wird Reverse En­gi­nee­ring für Software ein­ge­setzt?

Die Rück­ent­wick­lung von Software

Das Reverse En­gi­nee­ring von Code erlaubt es Pro­gram­mie­rern, Ent­wick­lungs- und Pro­duk­ti­ons­pro­zes­se einer Software um­zu­keh­ren und so einen wert­vol­len Blick hinter die Kulissen eines Programms zu erhalten. Die De­kon­struk­ti­on und Rück­ent­wick­lung einer Software er­mög­licht 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 Ar­chi­tek­tur des Programms, die Funk­ti­ons­wei­se und die internen Struk­tu­ren zu verstehen, um­zu­schrei­ben oder nach­zu­bau­en. Das aus der Rück­ent­wick­lung von Software gewonnene Ver­ständ­nis über deren Prozesse erlaubt es zudem, Fehler im Programm zu beheben. Im Software-Bereich wird Reverse En­gi­nee­ring vor allem zur Ent­wick­lung neuer Produkte, Feh­ler­su­che oder Analyse von Kon­kur­renz­pro­duk­ten ein­ge­setzt.

De­fi­ni­ti­on: Reverse En­gi­nee­ring

Be­zeich­net die Nach­kon­struk­ti­on eines bereits exis­tie­ren­den Produktes – in diesem Fall einer Software. Dabei wird das Produkt „zerlegt“, um dessen Aufbau, Struktur und Funktion zu verstehen. Ziel des Reverse En­gi­nee­ring im Software-Bereich ist es, den Code eines be­stehen­den Programms nach­zu­bau­en. So können Software optimiert, Fehler in der Funk­ti­ons­wei­se behoben, Kon­kur­renz­pro­gram­me ana­ly­siert und neue Produkte ent­wi­ckelt werden.

Prozesse des Reverse En­gi­nee­ring einer Software

Reverse En­gi­nee­ring wird sowohl zur Un­ter­su­chung in­dus­tri­ell ge­fer­tig­ter Produkte als auch bei der Re­kon­struk­ti­on einer Software benötigt. Mit der Nach­kon­struk­ti­on einer Software wird üb­li­cher­wei­se einer der drei folgenden Prozesse be­schrie­ben:

  • Die Er­schlie­ßung des Quell­codes der Software
  • Das Nach­voll­zie­hen der Regeln eines Kom­mu­ni­ka­ti­ons­pro­to­kolls
  • Das nach­träg­li­che Erstellen eines Modells

Die Wie­der­her­stel­lung des Quell­codes einer Software

Bei einem Quellcode handelt es sich um den in einer Pro­gram­mier­spra­che ge­schrie­be­nen Text eines Com­pu­ter­pro­gramms. Diesen für Menschen lesbaren Text wandelt der Computer voll­stän­dig au­to­ma­tisch in eine für ihn lesbare Ma­schi­nen­spra­che um. Um den Quellcode einer Software er­schlie­ßen zu können, muss also die Über­set­zung der Ma­schi­nen­spra­chen rück­gän­gig gemacht werden. Dazu wird zum Beispiel ein De­com­pi­ler ein­ge­setzt. Das ist ein Com­pu­ter­pro­gramm, das aus dem binären Ma­schi­nen­code wieder einen für Menschen lesbaren Quelltext erzeugt. Dieser Vorgang der Rück­über­set­zung des ma­schi­nen­les­ba­ren Bi­när­codes in einen men­schen­les­ba­ren Quellcode erfolgt au­to­ma­tisch.

Ist der Binärcode nicht voll­stän­dig re­kon­stru­ier­bar, kann ein Dis­as­sem­bler verwendet werden. Dieses Programm wandelt die binär kodierte Ma­schi­nen­spra­che in eine für Menschen lesbare As­sem­bler­spra­che um, welche dann manuell ana­ly­siert wird. In den meisten Fällen ist es Pro­gram­mie­rern nicht möglich, den voll­stän­di­gen Quellcode zu re­kon­stru­ie­ren. Im Prinzip ist das nicht weiter schlimm, da es beim Reverse En­gi­nee­ring eines Codes eher darum geht, die Idee dahinter zu verstehen und weniger, den Ori­gi­nal­code komplett abbilden zu können. Selbst mit par­ti­el­len Codes lassen sich bereits Ver­hal­tens­ana­ly­sen der Software durch­füh­ren oder Fehler beheben. Vor allem Soft­ware­ent­wick­ler nutzen De­com­pi­ler und Dis­as­sem­bler.

Verstehen der Regeln eines Kom­mu­ni­ka­ti­ons­pro­to­kolls

Reverse En­gi­nee­ring kommt ebenso zum Einsatz, wenn Ent­wick­ler bei­spiels­wei­se Treiber für Be­triebs­sys­te­me schreiben wollen, das Wissen um die exakten Funk­ti­ons­wei­sen und den Aufbau des Be­triebs­sys­tems jedoch geheim ist. Mithilfe eines Sniffers werden dann die Regeln eines Kom­mu­ni­ka­ti­ons­pro­to­kolls er­schlos­sen. Der Sniffer ist ein Software-Tool zur Analyse des Da­ten­ver­kehrs in einem Netzwerk. Das Werkzeug stellt bei­spiels­wei­se Auf­fäl­lig­kei­ten im Da­ten­aus­tausch zwischen zwei Geräten fest. Die Aus­wer­tung solcher Kom­mu­ni­ka­ti­ons­wei­sen gibt Pro­gram­mie­rern Auf­schluss darüber, welche Regeln das ent­spre­chen­de Protokoll befolgt.

Nach­träg­li­che Er­stel­lung eines Modells einer Software

Bei dieser Art wird vielmehr von einer Code-Rück­füh­rung als von Reverse En­gi­nee­ring, also der Nach­kon­struk­ti­on ge­spro­chen. Der re­kon­stru­ier­te Quellcode einer Software wird hier mo­di­fi­ziert und in ein Modell über­tra­gen, um dort wei­ter­ver­ar­bei­tet werden zu können. So können Software-Projekte mit der gra­fi­schen Mo­del­lie­rungs­spra­che UML zur Spe­zi­fi­ka­ti­on, Kon­struk­ti­on und Do­ku­men­ta­ti­on von Software-Teilen ergänzt und nach­träg­lich erzeugt werden.

Wann kommt Reverse En­gi­nee­ring bei Software zum Einsatz?

Reverse En­gi­nee­ring für Code kann auf un­ter­schied­li­chen Gebieten ein­ge­setzt werden und so ganz ver­schie­de­ne Nutzen erfüllen:

  • Prüfung und Qua­li­täts­ma­nage­ment eigener Software auf deren Funktion
  • Wei­ter­ent­wick­lung von eigener Software
  • Un­ter­su­chung von Netz­werk­kom­mu­ni­ka­ti­ons­pro­to­kol­len
  • Aufspüren von Com­pu­ter­vi­ren, Trojanern, Er­pres­ser­soft­ware und sonstigen schäd­li­chen Pro­gram­men
  • Por­tie­rung oder In­stand­hal­tung von Ab­an­don­wa­re
  • Suche nach Soft­ware­feh­lern
  • Generelle Un­ter­su­chung eines Da­tei­for­mats für das eigene Ver­ständ­nis
  • Ver­bes­se­rung von Soft­ware­kom­pa­ti­bi­li­tä­ten mit Platt­for­men und Software von Dritt­an­bie­tern
  • Ver­wen­dung von un­do­ku­men­tier­ten Platt­form­funk­tio­nen

Darüber hinaus kann ein Reverse En­gi­nee­ring im Software-Bereich zur Analyse von Kon­kur­renz­pro­duk­ten genutzt werden. Obwohl viele Firmen das Reverse En­gi­nee­ring ihrer Produkte un­ter­sa­gen und das in ihren Li­zenz­be­din­gun­gen darlegen, ist die Analyse von Pro­to­kol­len davon rechtlich nicht betroffen. Das ist der Fall, weil die Software selbst gar nicht Ge­gen­stand der Un­ter­su­chung durch Reverse-En­gi­nee­ring-Tools ist. Zudem sind solche Li­zenz­klau­seln in vielen Ländern generell ungültig. Den Nutzern einer er­wor­be­nen Software steht ge­setz­lich das Recht zu, diese zur Über­prü­fung der An­wen­dungs­si­cher­heit sowie zur Feh­ler­be­he­bung einem Reverse En­gi­nee­ring zu un­ter­zie­hen.

Die Software-Rück­ent­wick­lung erlaubt Pro­gram­mie­rern und Ent­wick­lern wertvolle Einblicke in die Funk­ti­ons­wei­se von digitalen An­wen­dun­gen. Dies er­mög­licht gezielte Feh­ler­be­he­bun­gen und kann bei der (agile) Ent­wick­lung eigener Software hilf­rei­chen Input geben.

Zum Hauptmenü