Movatterモバイル変換


[0]ホーム

URL:


Zum Inhalt springen
WikipediaDie freie Enzyklopädie
Suche

Obfuskation (Software)

aus Wikipedia, der freien Enzyklopädie

Obfuskation (engl.obfuscate „vernebeln“, „unklar machen“, „verwirren“, „verschleiern“) ist ein Begriff aus derSoftwaretechnik und beschreibt die absichtliche Veränderung vonProgrammcode, so dass derQuelltext für Menschen schwer verständlich oder schwer rückgewinnbar wird. Ziel ist es, den Aufwand fürReverse Engineering stark zu erhöhen, um Veränderung, unerwünschtes Kopieren von Programmteilen oder Diebstahl von geistigem Eigentum zu erschweren oder um die Funktionalität z. B. von Schadsoftware zu verschleiern.

BeiInterpreter- oderSkriptsprachen, sofern derQuelltext ausgeliefert wird, bedeutet das, die ausgelieferte Kopie des Quelltextes unkenntlich und (für Menschen) schwerer lesbar zu machen.Bei einemkompilierten Programmverwürfelt und verschleiert ein Obfuskator nicht den Quellcode, sondern das Kompilat oder eine Kopie des Quellcodes unmittelbar vor dem Kompilieren. Hier soll vor allem das (maschinelle)Dekompilieren verhindert werden bzw. das Dekompilat soll möglichst unverständlich werden.[1]

Eigenschaften

[Bearbeiten |Quelltext bearbeiten]

Obfuskation verändert ausführbaren Programm-Code ohne Änderung der Programmfunktion. Zum Beispiel werden Variablen- und Funktionsnamen umbenannt, sofern sie aus dem Programm rückgewinnbar wären. Ebenfalls kann (bei einem kompilierten Programm) derMaschinen- oderBytecode so verwürfelt werden, dass die Befehlsabschnitte, die einemHochsprachenbefehl entsprechen, sich mit denen des vorherigen/nachfolgenden Hochsprachenbefehls mischen; oft werden auch zusätzliche nicht notwendige (Maschinen-)Befehle eingefügt. Das kann ein maschinelles Dekompilieren in die ursprüngliche Hochsprache deutlich erschweren oder sogar unmöglich machen.[2]

Ein Nebeneffekt kann je nach Beschaffenheit des Codes auch die Verkleinerung seines Speicherbedarfs sein (v. a. bei Skriptsprachenprogrammen), z. B. durch die Umbenennung langerIdentifier in kürzere.[3] Das ist für Website-Skripte vorteilhaft, um das Übertragungsvolumen zu reduzieren. Ebenfalls kann es vorteilhaft sein beiAnwendungsprogrammen für Endgeräte mit geringer Speicherkapazität oder Rechenleistung.

Abgrenzung

[Bearbeiten |Quelltext bearbeiten]

Im Allgemeinen verschlüsselt Obfuskation nicht das Programm und ist daher keine Anwendung derSteganografie und im Allgemeinen auch nicht derKryptographie. Es können allerdings u. U. im Programm hinterlegte Zeichenketten, Dateien oder ganze Klassen verschlüsselt werden, damit diese nicht im Klartext lesbar sind (siehe unten).

Beispiele für Methoden der Code-Obfuskation

[Bearbeiten |Quelltext bearbeiten]
Äquivalente Formeln und konstante Transformationen
Beispielsweise kann eine Addition +10 ersetzt werden durch „addiere 15 und subtrahiere 5“.
Verändern desKontrollflusses
Die Reihenfolge, in der Programmanweisungen ausgeführt werden, kann manchmal umgeordnet werden, ohne die Funktionalität zu beeinflussen. Das kann sowohl im Quelltext als auch im Kompilat (dann mit Maschinenbefehlen) geschehen.[4]
Variablensubstitution
Einfaches Umbenennen vonVariablennamen wie „Rechnungsbetrag“ oder „Adresse“ auf generierte Namen wie „ax7zhgr“.
Bedingte Anweisungen und Sprünge
Dazu gehören auch überflüssige Vergleiche, die stets wahr bzw. falsch ergeben,Links oderPointer.
Veränderung der Funktionshierarchie
Einzelne Anweisungen oder auch Blöcke können – entgegen der logischen Struktur – inUnterprogramme ausgelagert oder aus Unterprogrammen an die aufrufende Stelle kopiert werden.
Einfügen vonredundantem Code
In die Folge der Anweisungen wird überflüssiger Code eingefügt, der lediglich irrelevante Berechnungen ausführt.
Einfügen von Code, der Dekompilieren erschwert
Beispielsweise das Einfügen von Code nach dem Ende einer Methode, was manche Dekompilierer zum Absturz bringt.[5][2]
Verschlüsselung
Verschlüsselung ist besonders für die Tarnung von einzelnen Bytes oder Strings wie im Code hardcodiert abgelegte Passwörter oder mitgelieferte Dateien, oder sogar ganze Klassen und Bibliotheken geeignet.[6]
Mischen von Funktionen
Die (Maschinen-)Anweisungen zweier Funktionen/Hochsprachenbefehle können alternierend geschrieben werden. Dadurch verschwimmen die Grenzen zwischen den Funktionen.
Spalten von Variablen
Umstrukturierung vonArrays oder Listen
  • ein eindimensionales Array kann in mehrere eindimensionale Arrays gespalten werden
  • ein eindimensionales Array kann in ein mehrdimensionales Array ausgeweitet werden
  • ein mehrdimensionales Array kann in ein eindimensionales Array geschrumpft werden
  • zwei oder mehrere eindimensionale Arrays können zu einem eindimensionalen Array zusammengeführt werden.
Anti-Debugs
Routinen, die auf die Erkennung und dann frühzeitiges Beenden eines Programmes bei der Erkennung eines Debuggers abzielen. Dazu scannen sie beispielsweise den Speicher nach Suchstrings diverser Debugger.

Programme

[Bearbeiten |Quelltext bearbeiten]

Für das Verschleiern von Software gibt es je nach Programmiersprache und Plattform eine unterschiedlich große Zahl an Obfuskatoren. Viele davon sind für die direkte Anwendung auf den Quellcode[7][8], oder für Plattformen erhältlich, deren Quellcode ohne den Einsatz von Obfuskatoren leicht zugänglich wäre, etwa durch die Verwendung einer Bytecode-ähnlichen Zwischensprache vor der Ausführung. Es gibt allerdings auch Obfuskatoren, die Programme verschleiern, die in Programmiersprachen geschrieben wurden, die direkt in ausführbaren Code kompilieren.

C / C++

[Bearbeiten |Quelltext bearbeiten]

Folgende Obfuskatoren für C/C++ werden aktiv gewartet: Stunnix C++ Obfuscator,[9] StarForce C++ Obfuscate,[10] Morpher C/C++ Obfuscator,[11] Semantic Design C und C++ Obfuscators.[12][13]

Windows Script Encoder

[Bearbeiten |Quelltext bearbeiten]

Um verschiedene Skripte wieJScript-,VBScript- und insbesondereASP-Dateien zu verschleiern, empfiehlt Microsoft, den Windows Script Encoder zu benutzen. Im Falle einerKompromittierung desWebservers soll der Angreifer nicht in der Lage sein, zu verstehen, wie die ASP-Anwendung funktioniert. Mittlerweile gibt es jedochDecoder, um die Verschleierung rückgängig zu machen.

Java-Bytecode und MSIL

[Bearbeiten |Quelltext bearbeiten]

Für das Verschleiern von Java-Bytecode und derCommon Intermediate Language von .NET gibt es eine Reihe von proprietären und Open-Source-Obfuskatoren.[14][15][16]

Folgende Obfuskatoren für Java Bytecode werden aktiv gewartet: DashO,[17] JavaGuard,[18]ProGuard, yGuard[19] und Zelix Klassmaster.[20]ProGuard wird von Google für die Obfuskation vonAndroid-Programmen empfohlen.[21]

JavaScript

[Bearbeiten |Quelltext bearbeiten]

Für das Verschleiern vonJavaScript-Code gibt es eine große Anzahl an Obfuskatoren. Ein Großteil dieser Obfuskatoren unterstützt auch die Verkleinerung des Codes, bzw. es gibt viele Minimizer, die auch Obfuskationstechniken enthalten. Die folgende Liste an JavaScript-Obfuskatoren sind Programme, deren Hauptmerkmal die Obfuskation von JavaScript-Code ist: JScrambler,[22] JSObfuscator,[23] Javascript Obfuscator,[24] UglifyJS,[25] Compressor and Minimizer,[26] Stunnix,[27] Jasob.[28]

Nachteile von Obfuskation

[Bearbeiten |Quelltext bearbeiten]

Obfuskation kannReverse Engineering eines Programms erschweren bzw. zeitaufwändiger werden lassen, aber nicht notwendigerweise unmöglich machen.[29] Darüber hinaus beschränkt es die Anwendungsmöglichkeiten derReflexion auf verschleierten Code.

EinigeAntivirus-Programme, wie etwaAVG,[30] alarmieren den Benutzer beim Besuch einer Website mit verschleiertem JavaScript-Code, da Obfuskation auch dazu benutzt werden kann, schädlichen Code zu verbergen.[31]

Obfuskation erschwert es, aussagekräftige Fehlermeldungen zu erstellen, da Standard-Fehlermeldungen wie beispielsweise Stack-Traces kaum noch Aussagekraft besitzen und den Entwicklern keine Rückschlüsse auf die betroffene Sourcecodestelle ermöglichen.

Obfuskation und die Copyleft-Lizenz

[Bearbeiten |Quelltext bearbeiten]

Ob es legal ist, eineCopyleft-Softwarelizenz zu umgehen, indem verschleierter Quelltext herausgegeben wird, war Gegenstand von Debatten innerhalb derOpen-Source-Community. Diese Art der Umgehung kommt vor, wenn der Autor wenig gewillt ist, den Quelltext des eigenen Programms zu veröffentlichen, durch die Lizenz des ursprünglichen Programms jedoch dazu gezwungen wird. Die Thematik wird in derGNU General Public License behandelt, indem sie Quellcode als diebevorzugte Version von veröffentlichtem Code bezeichnet.[32] DieGNU-Website teilt mit, dass verschleierter Quellcode kein echter Quellcode ist und nicht als Quellcode zählt, womit die Anwendung von Obfuskatoren auf GPL-geschützten Quellcode in den Augen des GNU-Projekts eine Lizenzverletzung darstellt.[33]

Siehe auch

[Bearbeiten |Quelltext bearbeiten]

Es gibtProgrammierwettbewerbe für kreativ verschleierte Programm-Quelltexte, was jedoch nur für Skriptsprachen einer Obfuskation entspricht:

Weblinks

[Bearbeiten |Quelltext bearbeiten]

Einzelnachweise

[Bearbeiten |Quelltext bearbeiten]
  1. Richard R. Brooks:Disruptive Security Technologies with Mobile Code and Peer-to-Peer Networks. CRC Press, 14. Mai 2012,Kap. 7,S. 155 ff. (englisch). 
  2. abCodewall .Net Obfuscation (Memento vom 25. Dezember 2014 imInternet Archive) - "Control Flow Obfuscation. Control Flow Obfuscation scrambles the execution paths of the method bodies of your application making decompilers crash."
  3. Proguard Results - "It primarily reduces the size of the processed code, with some potential increase in efficiency as an added bonus."
  4. Control Flow Obfuscation, Microsoft Developer Network, Visual Studio 2005
  5. JBCO: the Java ByteCode Obfuscator. Abgerufen am 20. Februar 2024. 
  6. Android App Security and Obfuscation | DexGuard. Guardsquare nv., abgerufen am 20. Februar 2024 (englisch). 
  7. Open Directory - Computers: Programming: Languages: #"ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&rfr_id=info%3Asid%2Fde.wikipedia.org%3AObfuskation+%28Software%29&rft.title=Open+Directory+-+Computers%3A+Programming%3A+Languages%3A+JavaScript%3A+Tools%3A+Obfuscators&rft.description=Open+Directory+-+Computers%3A+Programming%3A+Languages%3A+JavaScript%3A+Tools%3A+Obfuscators&rft.identifier=&rft.publisher=Dmoz.org&rft.date=2013-08-03"> 
  8. Open Directory - Computers: Programming: Languages: PHP: Development Tools: Obfuscation and Encryption. Dmoz.org, 19. September 2013, abgerufen am 25. November 2013. 
  9. C/C++ Obfuscator. Stunnix, abgerufen am 20. Februar 2024 (englisch). 
  10. StarForce C++ Obfuscator. In: Star Force. Protection Technology, LLC, abgerufen am 20. Februar 2024 (englisch). 
  11. C/C++/ObjC/ObjC++, Android, iOS Obfuscation Service. 14. Februar 2015, archiviert vom Original am 14. Februar 2015; abgerufen am 20. Februar 2024.  Info: Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäßAnleitung und entferne dann diesen Hinweis.@1@2Vorlage:Webachiv/IABot/morpher.com 
  12. Semantic Designs: C Source Code Obfuscator. Abgerufen am 20. Februar 2024. 
  13. Semantic Designs: C++ Source Code Obfuscator. Abgerufen am 20. Februar 2024. 
  14. Obfuscator. Byte Source Code. In: java2s.com. Abgerufen am 20. Februar 2024. 
  15. Java Obfuscator and Android App Optimizer | ProGuard. Abgerufen am 20. Februar 2024 (englisch). 
  16. Mr Roux: XenocodeRCE/neo-ConfuserEx. 17. Februar 2024, abgerufen am 20. Februar 2024. 
  17. DashO | PreEmptive. 26. Oktober 2020, abgerufen am 20. Februar 2024 (amerikanisches Englisch). 
  18. JavaGuard. 26. Februar 2016, abgerufen am 20. Februar 2024 (englisch). 
  19. yWorks, the diagramming experts: yGuard - Java Bytecode Obfuscator and Shrinker. Abgerufen am 20. Februar 2024 (englisch). 
  20. Java Obfuscator - Zelix KlassMaster™. Abgerufen am 20. Februar 2024. 
  21. Shrink, obfuscate, and optimize your app | Android Studio. In: developer.android.com. google, abgerufen am 20. Februar 2024 (englisch). 
  22. JScrambler Homepage (Memento vom 20. März 2015 imInternet Archive)
  23. Javascript Obfuscate and Encoder. Abgerufen am 20. Februar 2024 (englisch). 
  24. Javascript Obfuscator - Protects JavaScript code from stealing and shrinks size - 100% Free. Abgerufen am 20. Februar 2024. 
  25. UglifyJS JavaScript minification. 1. April 2016, archiviert vom Original am 1. April 2016; abgerufen am 20. Februar 2024.  Info: Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäßAnleitung und entferne dann diesen Hinweis.@1@2Vorlage:Webachiv/IABot/marijnhaverbeke.nl 
  26. Javascript Obfuscator - Stop theft of your JavaScript sources! Abgerufen am 20. Februar 2024. 
  27. JavaScript Obfuscator. stunnix, abgerufen am 20. Februar 2024 (englisch). 
  28. JavaScript Obfuscator - Protect your JavaScript Code. Abgerufen am 20. Februar 2024. 
  29. "Can We Obfuscate Programs?" by Boaz Barak. Math.ias.edu, archiviert vom Original am 10. August 2014; abgerufen am 25. November 2013. 
  30. AVG ThreatLabs (Virendatenbank) über verschleiertes JavaScript, abgerufen am 1. März 2015
  31. Chris Wysopal: Good Obfuscation, Bad Code. In: SecurityFocus. 17. April 2009, archiviert vom Original am 3. März 2016; abgerufen am 20. Februar 2024 (englisch).  Info: Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäßAnleitung und entferne dann diesen Hinweis.@1@2Vorlage:Webachiv/IABot/www.securityfocus.com 
  32. Reasoning behind the "preferred form" language in the GPL. In: LWN.net. März 2011, abgerufen am 25. November 2013 (englisch). 
  33. Freie-Software-Definition - www.gnu.org
Abgerufen von „https://de.wikipedia.org/w/index.php?title=Obfuskation_(Software)&oldid=255246896
Kategorien:
Versteckte Kategorien:

[8]ページ先頭

©2009-2025 Movatter.jp