www.wikidata.de-de.nina.az
Obfuskation engl obfuscate vernebeln unklar machen verwirren verschleiern ist ein Begriff aus der Softwaretechnik und beschreibt die absichtliche Veranderung von Programmcode so dass der Quelltext fur Menschen schwer verstandlich oder schwer ruckgewinnbar wird Ziel ist es den Aufwand fur Reverse Engineering stark zu erhohen um Veranderung unerwunschtes Kopieren von Programmteilen oder Diebstahl von geistigem Eigentum zu erschweren oder um die Funktionalitat z B von Schadsoftware zu verschleiern Bei Interpreter oder Skriptsprachen sofern der Quelltext ausgeliefert wird bedeutet das die ausgelieferte Kopie des Quelltextes unkenntlich und fur Menschen schwerer lesbar zu machen Bei einem kompilierten Programm verwurfelt 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 moglichst unverstandlich werden 1 Inhaltsverzeichnis 1 Eigenschaften 2 Abgrenzung 3 Beispiele fur Methoden der Code Obfuskation 4 Programme 4 1 C C 4 2 Windows Script Encoder 4 3 Java Bytecode und MSIL 4 4 JavaScript 5 Nachteile von Obfuskation 6 Obfuskation und die Copyleft Lizenz 7 Sonstiges 8 Weblinks 9 EinzelnachweiseEigenschaften BearbeitenObfuskation verandert ausfuhrbaren Programm Code ohne Anderung der Programmfunktion Zum Beispiel werden Variablen und Funktionsnamen umbenannt sofern sie aus dem Programm ruckgewinnbar waren Ebenfalls kann bei einem kompilierten Programm der Maschinen oder Bytecode so verwurfelt werden dass die Befehlsabschnitte die einem Hochsprachenbefehl entsprechen sich mit denen des vorherigen nachfolgenden Hochsprachenbefehls mischen oft werden auch zusatzliche nicht notwendige Maschinen Befehle eingefugt Das kann ein maschinelles Dekompilieren in die ursprungliche Hochsprache deutlich erschweren oder sogar unmoglich 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 langer Identifier in kurzere 3 Das ist fur Website Skripte vorteilhaft um das Ubertragungsvolumen zu reduzieren Ebenfalls kann es vorteilhaft sein bei Anwendungsprogrammen fur Endgerate mit geringer Speicherkapazitat oder Rechenleistung Abgrenzung BearbeitenIm Allgemeinen verschlusselt Obfuskation nicht das Programm und ist daher keine Anwendung der Steganografie und im Allgemeinen auch nicht der Kryptographie Es konnen allerdings u U im Programm hinterlegte Zeichenketten Dateien oder ganze Klassen verschlusselt werden damit diese nicht im Klartext lesbar sind siehe unten Beispiele fur Methoden der Code Obfuskation BearbeitenAquivalente Formeln und konstante Transformationen Beispielsweise kann eine Addition 10 ersetzt werden durch addiere 15 und subtrahiere 5 Verandern des Kontrollflusses Die Reihenfolge in der Programmanweisungen ausgefuhrt werden kann manchmal umgeordnet werden ohne die Funktionalitat zu beeinflussen Das kann sowohl im Quelltext als auch im Kompilat dann mit Maschinenbefehlen geschehen 4 Variablensubstitution Einfaches Umbenennen von Variablennamen wie Rechnungsbetrag oder Adresse auf generierte Namen wie ax7zhgr Bedingte Anweisungen und Sprunge Dazu gehoren auch uberflussige Vergleiche die stets wahr bzw falsch ergeben Links oder Pointer Veranderung der Funktionshierarchie Einzelne Anweisungen oder auch Blocke konnen entgegen der logischen Struktur in Unterprogramme ausgelagert oder aus Unterprogrammen an die aufrufende Stelle kopiert werden Einfugen von redundantem Code In die Folge der Anweisungen wird uberflussiger Code eingefugt der lediglich irrelevante Berechnungen ausfuhrt Einfugen von Code der Dekompilieren erschwert Beispielsweise das Einfugen von Code nach dem Ende einer Methode was manche Dekompilierer zum Absturz bringt 5 2 Verschlusselung Verschlusselung ist besonders fur die Tarnung von einzelnen Bytes oder Strings wie im Code hardcodiert abgelegte Passworter oder mitgelieferte Dateien oder sogar ganze Klassen und Bibliotheken geeignet 6 Mischen von Funktionen Die Maschinen Anweisungen zweier Funktionen Hochsprachenbefehle konnen alternierend geschrieben werden Dadurch verschwimmen die Grenzen zwischen den Funktionen Spalten von Variablen Umstrukturierung von Arrays 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 konnen zu einem eindimensionalen Array zusammengefuhrt werden Anti Debugs Routinen die auf die Erkennung und dann fruhzeitiges Beenden eines Programmes bei der Erkennung eines Debuggers abzielen Dazu scannen sie beispielsweise den Speicher nach Suchstrings diverser Debugger Programme BearbeitenFur das Verschleiern von Software gibt es je nach Programmiersprache und Plattform eine unterschiedlich grosse Zahl an Obfuskatoren Viele davon sind fur die direkte Anwendung auf den Quellcode 7 8 oder fur Plattformen erhaltlich deren Quellcode ohne den Einsatz von Obfuskatoren leicht zuganglich ware etwa durch die Verwendung einer Bytecode ahnlichen Zwischensprache vor der Ausfuhrung Es gibt allerdings auch Obfuskatoren die Programme verschleiern die in Programmiersprachen geschrieben wurden die direkt in ausfuhrbaren Code kompilieren C C Bearbeiten Folgende Obfuskatoren fur 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 Um verschiedene Skripte wie JScript VBScript und insbesondere ASP Dateien zu verschleiern empfiehlt Microsoft den Windows Script Encoder zu benutzen Im Falle einer Kompromittierung des Webservers soll der Angreifer nicht in der Lage sein zu verstehen wie die ASP Anwendung funktioniert Mittlerweile gibt es jedoch Decoder um die Verschleierung ruckgangig zu machen Java Bytecode und MSIL Bearbeiten Fur das Verschleiern von Java Bytecode und der Common Intermediate Language von NET gibt es eine Reihe von proprietaren und Open Source Obfuskatoren 14 15 16 Folgende Obfuskatoren fur Java Bytecode werden aktiv gewartet DashO 17 JavaGuard 18 ProGuard yGuard 19 und Zelix Klassmaster 20 ProGuard wird von Google fur die Obfuskation von Android Programmen empfohlen 21 JavaScript Bearbeiten Fur das Verschleiern von JavaScript Code gibt es eine grosse Anzahl an Obfuskatoren Ein Grossteil dieser Obfuskatoren unterstutzt 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 BearbeitenObfuskation kann Reverse Engineering eines Programms erschweren bzw zeitaufwandiger werden lassen aber nicht notwendigerweise unmoglich machen 29 Daruber hinaus beschrankt es die Anwendungsmoglichkeiten der Reflexion auf verschleierten Code Einige Antivirus Programme wie etwa AVG 30 alarmieren den Benutzer beim Besuch einer Website mit verschleiertem JavaScript Code da Obfuskation auch dazu benutzt werden kann schadlichen Code zu verbergen 31 Obfuskation erschwert es aussagekraftige Fehlermeldungen zu erstellen da Standard Fehlermeldungen wie beispielsweise Stack Traces kaum noch Aussagekraft besitzen und den Entwicklern keine Ruckschlusse auf die betroffene Sourcecodestelle ermoglichen Obfuskation und die Copyleft Lizenz BearbeitenOb es legal ist eine Copyleft Softwarelizenz zu umgehen indem verschleierter Quelltext herausgegeben wird war Gegenstand von Debatten innerhalb der Open Source Community Diese Art der Umgehung kommt vor wenn der Autor wenig gewillt ist den Quelltext des eigenen Programms zu veroffentlichen durch die Lizenz des ursprunglichen Programms jedoch dazu gezwungen wird Die Thematik wird in der GNU General Public License behandelt indem sie Quellcode als die bevorzugte Version von veroffentlichtem Code bezeichnet 32 Die GNU Website teilt mit dass verschleierter Quellcode kein echter Quellcode ist und nicht als Quellcode zahlt womit die Anwendung von Obfuskatoren auf GPL geschutzten Quellcode in den Augen des GNU Projekts eine Lizenzverletzung darstellt 33 Sonstiges BearbeitenEs gibt Programmierwettbewerbe fur kreativ verschleierte Programm Quelltexte was jedoch nur fur Skriptsprachen einer Obfuskation entspricht International Obfuscated Ruby Code Contest Programmiersprache Ruby Obfuscated Erlang OTP Competition Programmiersprache Erlang Obfuscated Perl Contest Programmiersprache Perl IOCCC der International Obfuscated C Code Contest Programmiersprache CWeblinks BearbeitenEine Taxonomie der Obfuscation Memento vom 16 Januar 2012 im Internet Archive englisch Erica Klarreich Cryptography Breakthrough Could Make Software Unhackable englisch Einzelnachweise Bearbeiten 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 a b Codewall Net Obfuscation Memento vom 25 Dezember 2014 im Internet Archive Control Flow Obfuscation Control Flow Obfuscation scrambles the execution paths of the method bodies of your application making decompilers crash Proguard Results It primarily reduces the size of the processed code with some potential increase in efficiency as an added bonus Control Flow Obfuscation Microsoft Developer Network Visual Studio 2005 JBCO the Java ByteCode Obfuscator JBCO has been shown to cause failure or crashes in two of the more modern decompilers Dava and SourceAgain DexGuard Website Encrypt strings encrypt entire classes encrypt native libraries encrypt assets Open Directory Computers Programming Languages JavaScript Tools Obfuscators Dmoz org 3 August 2013 abgerufen am 25 November 2013 Open Directory Computers Programming Languages PHP Development Tools Obfuscation and Encryption Dmoz org 19 September 2013 abgerufen am 25 November 2013 Stunnix C Obfuscator Homepage Star Force Obfuscator Homepage Morpher Homepage Semantic Design C Obfuscator Semantic Design C Obfuscator Liste von Java Code Obfuskatoren bei java2s com ProGuard Alternativen lt ProGuard neo ConfuserEx OpenSource Homepage DashO Homepage JavaGuard Homepage YGuard Homepage Zelix Klassmaster Homepage ProGuard in der Android Entwicklerdokumentation JScrambler Homepage Memento vom 20 Marz 2015 im Internet Archive JSObfuscator Homepage Javascript Obfuscator Homepage UglifyJS Homepage Javascript Obfuscator Homepage Stunnix Homepage Jasob Homepage Can We Obfuscate Programs by Boaz Barak Math ias edu archiviert vom Original am 10 August 2014 abgerufen am 25 November 2013 AVG ThreatLabs Virendatenbank uber verschleiertes JavaScript abgerufen am 1 Marz 2015 securityfocus com abgerufen am 8 Februar 2015 Reasoning behind the preferred form of the work for making modifications to it language in the GPL Lwn net Aufgerufen am 25 November 2013 Freie Software Definition www gnu org Abgerufen von https de wikipedia org w index php title Obfuskation Software amp oldid 223110183