Decompiler

Ein Dekompilierer (englisch Decompiler oder auch Reverse Compiler, Reverse Engineering Compiler) ist ein Computerprogramm, das aus Maschinen- oder Objektcode für den Menschen wieder lesbaren Quelltext in einer Hochsprache erzeugt. Er versucht, den Vorgang des Kompilierens umzukehren.

Ein Dekompilierer ist nicht zu verwechseln mit einem Disassembler, da die Assemblersprache nur eine alternative Darstellungsform des Maschinencodes ist.

Funktionsweise

Da es für die Kompilierung meist keine Umkehrfunktion gibt, ist eine Dekompilierung eine Reverse-Engineering-Technik. Sie wird zum erneuten nachträglichen Erzeugen von Quellcode benutzt, der auf einem ausführbaren Programm basiert. Der gewonnene Quellcode hat in gewissen Grenzen Ähnlichkeit mit der Ursprungsfassung des Quellcodes, der zur Erzeugung des ausführbaren Programms benutzt wurde. Wenn in diesem ausführbaren Programm zusätzlich noch Debuginformationen gespeichert sind, dann können oft sogar die vom ursprünglichen Autor verwendeten Variablennamen, Funktionsnamen und Module wieder zurückgewonnen werden. Verlorengegangen sind üblicherweise Kommentare sowie die ursprüngliche Formatierung, da beide Informationen typischerweise nicht mehr im Kompilat enthalten sind.

Die Dekompilierung von Bytecode, wie z. B. Java- und .Net-Framework-Programmen, ist in der Regel unkomplizierter als die Dekompilierung von Maschinencode, da diese Systeme relativ viele Informationen des Originalquellcodes mit in die Objektdatei übernehmen, vergleichbar mit der Debug-Version eines C- oder C++-Programms. Insbesondere die Typinformation und die Namen von öffentlichen Bezeichnern bleiben erhalten. Der dekompilierte Programmcode ist jedoch nur funktional identisch mit der ursprünglichen Quelldatei.

Einschränkungen

Wurde das Programm mit einer Optimierungsoption des Compilers übersetzt und sind keine Debuginformationen enthalten, oder es wurde gar mit einem Obfuscator verschleiert, dann kann der zurückgewonnene Quelltext in Einzelfällen bis zur Unbenutzbarkeit entstellt sein.

Aufgrund der genannten Einschränkungen eignet sich Dekompilierung normalerweise nicht, um verlorengegangene Quelltexte zu restaurieren. Diese sollten ohnehin immer in vielfachen Sicherungen vorhanden sein. Unter normalen Umständen wird ein Programmierer selten einen Decompiler einsetzen. Bei sehr alter Software kommt es jedoch hin und wieder vor, dass die Ursprungsquellen verloren wurden oder sich auf Datenträgern befinden, für die keine passenden Lesegeräte mehr verfügbar sind. In den Anfangszeiten der elektronischen Datenverarbeitung war es außerdem üblich, kleine Fehler durch patchen der Objektdateien zu beheben. Diese Fälle sind neben dem Rückentwickeln fremder Software die einzigen Anwendungsfälle, für die Decompiler zum Einsatz kommen.

Rechtliches

Kommerzielle Softwareanbieter weisen in ihren Lizenzen oft darauf hin, dass das Dekompilieren ihrer Produkte verboten sei (sei es auch nur zu Studienzwecken oder um die Software für den Eigengebrauch zu verändern).

Allerdings ist es im Recht Deutschlands nach § 69e UrhG unter bestimmten Bedingungen erlaubt, ein Programm zu dekompilieren, soweit dies notwendig ist, um die „Interoperabilität“ mit einem unabhängig vom ursprünglichen Programm geschaffenen Computerprogramm zu erhalten. Lizenzvereinbarungen, die dem widersprechen, sind nichtig.

Siehe auch

  • http://www.program-transformation.org/Transform/DeCompilation - Das DeCompilation Wiki diskutiert verschiedene Aspekte der Dekompilierung: Geschichte, Forschung, Mustersuche, die generelle Herangehensweise, Java-Decompiler (und warum diese so viel besser als Binary-Decompiler funktionieren) usw.
  • Nicolas Harrand, César Soto-Valero, Martin Monperrus, Benoit, Baudry: The Strengths and Behavioral Quirks of Java Bytecode Decompilers. In: IEEE (Hrsg.): 19th IEEE International Working Conference on Source Code Analysis and Manipulation. 2019, ISBN 978-1-7281-4938-7, doi:10.1109/SCAM.2019.00019 (englisch, researchgate.net [PDF; abgerufen am 18. November 2020]).

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.