Reverse Engineering: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
|||
(3 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 4: | Zeile 4: | ||
Auf [[Software]] bezogen wird darunter meistens einer der drei folgenden Vorgänge verstanden: | Auf [[Software]] bezogen wird darunter meistens einer der drei folgenden Vorgänge verstanden: | ||
{| class="wikitable options" | |||
|- | |||
! Option !! Beschreibung | |||
|- | |||
| Rückgewinnung des [[Quellcode]]s || oder einer vergleichbaren Beschreibung aus [[Maschinensprache|Maschinencode]], z. B. von einem ausführbaren [[Computerprogramm|Programm]] oder einer [[Programmbibliothek]], etwa mit einem [[Disassembler]] (kann Teil eines [[Debugger]]s sein) oder einem [[Decompiler]] | |||
|- | |||
| Erschließung der Regeln eines [[Netzwerkprotokoll|Kommunikationsprotokolls]] || aus der Beobachtung der Kommunikation, z. B. mit einem [[Sniffer]] | |||
|- | |||
| Nachträgliche Erstellung eines Modells || ausgehend von bereits vorliegendem Quellcode, in der [[Objektorientierte Programmierung|objektorientierten Programmierung]] | |||
|} | |||
Im ersten Fall werden oft Decompiler eingesetzt, die den Quellcode eines Programms weitestgehend automatisch aus seinem Binärcode zurückgewinnen | == Rückgewinnung des Quellcodes == | ||
* Ist dieses nicht durchgehend möglich, so kann der aus dem Binärcode des Programms direkt mit einem [[Disassembler]] ermittelbare [[Maschinensprache|Maschinencode]] auch manuell analysiert werden, was allerdings eine merkliche Erschwernis bedeutet | Im ersten Fall werden oft Decompiler eingesetzt, die den Quellcode eines Programms weitestgehend automatisch aus seinem Binärcode zurückgewinnen | ||
* Es kann i. d. R. nicht der gesamte Programmquellcode ermittelt werden, da z. B. [[Kommentar (Programmierung)|Kommentare]] nie und lokale Objektnamen nur selten im verfügbaren [[Binärcode]] enthalten sind | * Ist dieses nicht durchgehend möglich, so kann der aus dem Binärcode des Programms direkt mit einem [[Disassembler]] ermittelbare [[Maschinensprache|Maschinencode]] auch manuell analysiert werden, was allerdings eine merkliche Erschwernis bedeutet | ||
* Oft ist das Ergebnis trotz allem für den jeweiligen Zweck ausreichend, z. B. zur Verhaltensanalyse eines Softwaresystems oder als Hilfe beim Beheben eines Fehlers | * Es kann i. d. R. nicht der gesamte Programmquellcode ermittelt werden, da z. B. [[Kommentar (Programmierung)|Kommentare]] nie und lokale Objektnamen nur selten im verfügbaren [[Binärcode]] enthalten sind | ||
* Oft ist das Ergebnis trotz allem für den jeweiligen Zweck ausreichend, z. B. zur Verhaltensanalyse eines Softwaresystems oder als Hilfe beim Beheben eines Fehlers | |||
Reverse Engineering ist oft auch notwendig, wenn etwa die Entwickler eines [[Betriebssystem]]s, welches [[freie Software]] ist, für ein bestimmtes Gerät einen [[Gerätetreiber]] schreiben wollen, denn das dafür notwendige Wissen ist in vielen Fällen geheim | Reverse Engineering ist oft auch notwendig, wenn etwa die Entwickler eines [[Betriebssystem]]s, welches [[freie Software]] ist, für ein bestimmtes Gerät einen [[Gerätetreiber]] schreiben wollen, denn das dafür notwendige Wissen ist in vielen Fällen geheim | ||
* Aber hier genügt oft das Sniffen der Kommunikation zu und von dem betreffenden Gerät, also die zweite Methode | * Aber hier genügt oft das Sniffen der Kommunikation zu und von dem betreffenden Gerät, also die zweite Methode | ||
* Disassemblieren oder Dekompilieren eines vorhandenen Gerätetreibers, etwa von einem nicht-freien Betriebssystem, ist in der Regel nicht notwendig | * Disassemblieren oder Dekompilieren eines vorhandenen Gerätetreibers, etwa von einem nicht-freien Betriebssystem, ist in der Regel nicht notwendig | ||
Ein weiteres Anwendungsfeld sind Quelltext-Rekonstruktionen von [[Abandonware]] gewordenen [[Computerspiel]]klassiker, wie z. B. [[Another World (Computerspiel)|Another World]], um u. a. Portierungen auf aktuelle Plattformen vornehmen zu können | Ein weiteres Anwendungsfeld sind Quelltext-Rekonstruktionen von [[Abandonware]] gewordenen [[Computerspiel]]klassiker, wie z. B. [[Another World (Computerspiel)|Another World]], um u. a. Portierungen auf aktuelle Plattformen vornehmen zu können | ||
''I spent two weeks reading and reverse engineering further the source code of Another World („Out Of This World“ in North America) | ''I spent two weeks reading and reverse engineering further the source code of Another World („Out Of This World“ in North America) | ||
* I based my work on Gregory Montoir’s „binary to C++“ initial reverse engineering from the DOS executable | * I based my work on Gregory Montoir’s „binary to C++“ initial reverse engineering from the DOS executable | ||
* I was amazed to discover an elegant system based on a virtual machine interpreting bytecode in realtime and generating fullscreen vectorial cinematic in order to produce one of the best game of all time.'' | * I was amazed to discover an elegant system based on a virtual machine interpreting bytecode in realtime and generating fullscreen vectorial cinematic in order to produce one of the best game of all time.'' | ||
Beim dritten Fall spricht man jedoch in Abgrenzung zum Reverse Engineering insbesondere während des Softwareentwicklungsprozesses von ''Code-Rückführung'', wenn aus einer Entwurfsspezifikation gewonnener Quellcode manuell modifiziert und der modifizierte Quellcode wieder in das Modell der Entwurfsspezifikation übernommen wird, um dort weiterverarbeitet werden zu können (vor allem bei Single Source [[Computer-aided software engineering|CASE]]-Werkzeugen) | == Erschließung der Regeln eines [[Netzwerkprotokoll|Kommunikationsprotokolls]] == | ||
Dies ist auch möglich, wenn bei bereits fortgeschrittenen und umfangreichen Software-Projekten gar keine Entwurfsspezifikation beispielsweise in [[Unified Modeling Language|UML]] existiert und nachträglich erzeugt werden soll | Beim dritten Fall spricht man jedoch in Abgrenzung zum Reverse Engineering insbesondere während des Softwareentwicklungsprozesses von ''Code-Rückführung'', wenn aus einer Entwurfsspezifikation gewonnener Quellcode manuell modifiziert und der modifizierte Quellcode wieder in das Modell der Entwurfsspezifikation übernommen wird, um dort weiterverarbeitet werden zu können (vor allem bei Single Source [[Computer-aided software engineering|CASE]]-Werkzeugen) | ||
Dies ist auch möglich, wenn bei bereits fortgeschrittenen und umfangreichen Software-Projekten gar keine Entwurfsspezifikation beispielsweise in [[Unified Modeling Language|UML]] existiert und nachträglich erzeugt werden soll | |||
<noinclude> | <noinclude> | ||
Zeile 35: | Zeile 44: | ||
# https://de.wikipedia.org/wiki/Reverse_Engineering | # https://de.wikipedia.org/wiki/Reverse_Engineering | ||
[[Kategorie:Programmierung]] | |||
</noinclude> | </noinclude> | ||
Aktuelle Version vom 29. Juli 2024, 09:27 Uhr
Reverse Engineering - Kurzbeschreibung
Beschreibung
Auf Software bezogen wird darunter meistens einer der drei folgenden Vorgänge verstanden:
Option | Beschreibung |
---|---|
Rückgewinnung des Quellcodes | oder einer vergleichbaren Beschreibung aus Maschinencode, z. B. von einem ausführbaren Programm oder einer Programmbibliothek, etwa mit einem Disassembler (kann Teil eines Debuggers sein) oder einem Decompiler |
Erschließung der Regeln eines Kommunikationsprotokolls | aus der Beobachtung der Kommunikation, z. B. mit einem Sniffer |
Nachträgliche Erstellung eines Modells | ausgehend von bereits vorliegendem Quellcode, in der objektorientierten Programmierung |
Rückgewinnung des Quellcodes
Im ersten Fall werden oft Decompiler eingesetzt, die den Quellcode eines Programms weitestgehend automatisch aus seinem Binärcode zurückgewinnen
- Ist dieses nicht durchgehend möglich, so kann der aus dem Binärcode des Programms direkt mit einem Disassembler ermittelbare Maschinencode auch manuell analysiert werden, was allerdings eine merkliche Erschwernis bedeutet
- Es kann i. d. R. nicht der gesamte Programmquellcode ermittelt werden, da z. B. Kommentare nie und lokale Objektnamen nur selten im verfügbaren Binärcode enthalten sind
- Oft ist das Ergebnis trotz allem für den jeweiligen Zweck ausreichend, z. B. zur Verhaltensanalyse eines Softwaresystems oder als Hilfe beim Beheben eines Fehlers
Reverse Engineering ist oft auch notwendig, wenn etwa die Entwickler eines Betriebssystems, welches freie Software ist, für ein bestimmtes Gerät einen Gerätetreiber schreiben wollen, denn das dafür notwendige Wissen ist in vielen Fällen geheim
- Aber hier genügt oft das Sniffen der Kommunikation zu und von dem betreffenden Gerät, also die zweite Methode
- Disassemblieren oder Dekompilieren eines vorhandenen Gerätetreibers, etwa von einem nicht-freien Betriebssystem, ist in der Regel nicht notwendig
Ein weiteres Anwendungsfeld sind Quelltext-Rekonstruktionen von Abandonware gewordenen Computerspielklassiker, wie z. B. Another World, um u. a. Portierungen auf aktuelle Plattformen vornehmen zu können
I spent two weeks reading and reverse engineering further the source code of Another World („Out Of This World“ in North America)
- I based my work on Gregory Montoir’s „binary to C++“ initial reverse engineering from the DOS executable
- I was amazed to discover an elegant system based on a virtual machine interpreting bytecode in realtime and generating fullscreen vectorial cinematic in order to produce one of the best game of all time.
Erschließung der Regeln eines Kommunikationsprotokolls
Beim dritten Fall spricht man jedoch in Abgrenzung zum Reverse Engineering insbesondere während des Softwareentwicklungsprozesses von Code-Rückführung, wenn aus einer Entwurfsspezifikation gewonnener Quellcode manuell modifiziert und der modifizierte Quellcode wieder in das Modell der Entwurfsspezifikation übernommen wird, um dort weiterverarbeitet werden zu können (vor allem bei Single Source CASE-Werkzeugen) Dies ist auch möglich, wenn bei bereits fortgeschrittenen und umfangreichen Software-Projekten gar keine Entwurfsspezifikation beispielsweise in UML existiert und nachträglich erzeugt werden soll
Anhang
Siehe auch
Links
Weblinks