Was ist ein Decompiler?

, , ,
AdobeStock 170546780 min

Ein Decompiler ist ein Computerprogramm, das aus Objekt- oder Maschinencodes einen erkennbaren Text in einer Hochsprache hervorbringt. So ist dieser Quelltext für den Menschen lesbar. Andere Bezeichnungen für den Decompiler sind Dekompilierer, Reverse Compiler oder Reverse Engineering Compiler. Beim Dekompilieren versucht das Programm, den Vorgang des Kompilierens rückgängig zu machen. Oft kommt es zu Verwechslungen zwischen Decompiler und Disassembler. Die Assemblersprache ist jedoch nur ein anderes Darstellungsformat des Maschinencodes.

Wie funktioniert ein Decompiler?

Für die Kompilierung gibt es häufig keine Wandlungsfunktion. Die Dekompilierung macht das mit der Reverse-Engineering-Technik möglich. Diese Technik erzeugt nachträglich einen Quellcode, der die Basis eines ausführbaren Programmes ist. Der wiederhergestellte Code ist dem Quellcode der ursprünglichen Fassung sehr ähnlich, der zur Bildung des durchführbaren Programmes angewendet wurde. Sind in dem Programm auch noch Debug-Informationen hinterlegt, dann sind die angewandten Funktionsnamen, Module und Variablennamen des ursprünglichen Autors erzeugbar. In der Regel gehen Formatierungen des Ursprungs sowie Kommentare verloren, weil diese Infos üblicherweise nicht im Kompilat einbezogen sind.

Das Dekompilieren von Bytecodes (zum Beispiel .NET- und Java-Programme) ist im Allgemeinen einfacher als das Dekompilieren von Maschinencodes. Das liegt daran, weil die Systeme eine Menge Informationen des basierten Quellcodes in die Objektdatei aufnehmen. Zu vergleichen ist das mit der Debug-Version eines C++- oder C-Programmes. Die Namen der öffentlichen Bezeichner sowie die Typinformationen bleiben bestehen. Die vom Decompiler erzeugten Programmcodes sind allerdings nur funktional deckungsgleich mit der Quelldatei des Ursprungs.

AdobeStock 139942915 min

Welche Einschränkungen bestehen beim Dekompilieren?

Der hergestellte Quellcode kann in einzelnen Fällen bis zur Unbenutzbarkeit verzerrt sein. Das ist der Fall, wenn keine Debug-Informationen enthalten sind und das Programm mit einer Optimierungsoption des Compilers übersetzt wurde. Wegen dieser Einschränkung ist das Dekompilieren dem Grunde nach ungeeignet, um verlorene Quelltexte wieder aufzuarbeiten. Die Quelltexte sollten deshalb in mehreren Sicherungen zur Verfügung stehen.

Im allgemeinen Gebrauch setzt ein Programmierer eher selten einen Decompiler ein. Hin und wieder kann es vorkommen, dass bei sehr alten Softwareversionen die ursprünglichen Quellen nicht mehr vorhanden oder auf Datenträgern gespeichert sind, für die kein geeignetes Lesegerät mehr vorhanden ist. Zu Beginn des elektronischen Datenverarbeitens war es zudem geläufig, kleinere Fehler durch Patchen der Objektdateien zu beseitigen. Diese Fälle sind neben der Rückentwicklung einer fremden Software die alleinigen Anwendungsgebiete, für die das Dekompilieren zur Anwendung kommt.

Mehr zum Thema:
Was ist eigentlich... ein Managed Server?

Welche rechtlichen Bestimmungen sind beim Anwenden der Decompiler zu beachten?

Softwareanbieter verweisen häufig in den Lizenzen darauf, dass die Dekompilierung der Produkte untersagt ist. Das Verbot soll auch für das Verändern der Software für den eigenen Gebrauch sowie für Studienzwecke gelten. Dem steht allerdings eine gesetzliche Regelung entgegen (§ 69e Urheberrechtsgesetz), die unter gewissen Voraussetzungen gestattet, ein Programm zu dekompilieren. Der Einsatz eines Decompilers ist nach dieser Regelung erlaubt, um die Kompatibilität mit einem unabhängig vom Ursprungsprogramm geschaffenen Computerprogramm zu erreichen. Die gesetzliche Bestimmung weicht somit die Lizenzvereinbarungen auf und macht diese ungültig.

Was ist ein Compiler?

Programmiersprachen wie JavaScript, Python oder Java sind so aufgebaut, dass diese vom Programmierer ohne Weiteres zu schreiben und zu lesen sind. Damit der Computer mit den jeweiligen Programmbefehlen etwas ausführen kann, muss der Code zuerst in eine begreifliche Sprache umgewandelt werden. Je nach Plattform und Programmiersprache erfolgt das Umwandeln von einem Interpreter oder Compiler. Ein Compiler ist das Gegenteil vom Decompiler, denn der Compiler ist eine Software, die Quellcodes in Maschinensprache umgestaltet. Beim Kompilieren übersetzt die Software das ganze Programm von einer Programmiersprache in eine Maschinensprache. Bevor das Computerprogramm ausgeführt werden kann, wird der Code in seiner Gesamtheit übersetzt.

Was ist ein Betriebssystem?

Das System stellt die Verbindung zwischen der Hardware und den Anwendungsprogrammen her. Ein Betriebssystem trägt auch die Bezeichnung OS (Operating System). Für die Vermittlung der Zugriffe auf die Hardware-Ressourcen ist das Betriebssystem zuständig. Das können Festplatten, Arbeitsspeicher, Drucker sowie USB-Ports sein. Auch Smartphones und Tablets benötigen ein Betriebssystem. Die gängigsten Systeme sind Linux, Android, Windows, Unix, iOS und Mac OS.

 

binary 155685 640

Die Verwaltung und Kontrolle der Hardware übernimmt das jeweilige Betriebssystem des Computers. Dazu zählen auch Geräte wie das DVD-Laufwerk, die Tastatur, der Drucker, die Maus und anderweitige Hardware-Schnittstellen, zum Beispiel USB-Ports. Eine Anwendungssoftware (beispielsweise MS Word) kann diese Tätigkeiten auch eigenständig durchführen. In diesem Fall müsste jedoch das Programm für die unterschiedlichen Hardwareausführungen eigene MS-Word-Versionen vorhalten. Ein Betriebssystem reduziert den Aufwand für die Programme und schafft zudem eine konforme Oberfläche, auf die eine Drittanbietersoftware ansetzen kann.

Was ist ein Server?

Ins Deutsche übersetzt steht das Wort Server für Diener. Der Begriff wird in der Informatik doppeldeutig gebraucht. Ein Server bezeichnet zum einen den Computer, der Ressourcen über ein Netzwerk bereitstellt. Zum anderen beschreibt ein Server das Programm, welches auf dem Computer läuft.

  1. Server (Hardware):
Mehr zum Thema:
Was ist C++?

Ein Server, der hardwarebasiert agiert, ist eine in ein Computernetz eingefasste physische Maschine. Auf dieser laufen neben dem Betriebssystem ein oder auch mehrere softwarebasierte Server. Eine andere Bezeichnung für einen Server, der auf Hardware basiert, ist Host.

 

  1. Server (Software):

Ein softwarebasierter Webserver ist ein Computerprogramm, welches einen speziellen Dienst zur Verfügung stellt. Dieser Dienst kann von anderen Programmen (= Clients) lokal oder über ein Netzwerk genutzt werden. Es ist abhängig von der Art der Server-Software, welcher Dienst verfügbar ist. Beim Austausch der Daten setzen dienstspezifische Übertragungsprotokolle ein.