Obfuscator

Obfuscator

Der Begriff Obfuscator (engl. obfuscate „verdunkeln“, „verwirren“) bzw. Quelltextverschleierung bezeichnet ein Mittel zur Verschleierung von Programmcode.

Ein Obfuscator ist eine Funktionsfamilie mit folgenden Eigenschaften:

  1. Er muss die Funktionalität des Originalprogramms erhalten,
  2. Der verschleierte Code darf höchstens polynomiell langsamer ausführbar sein als das Originalprogramm
  3. Der verschleierte Code verhält sich wie eine Black Box, d. h. er darf keine Information über seinen internen Zustand nach außen durchdringen lassen

Inhaltsverzeichnis

Einleitung

Code Obfuscation wird in erster Linie eingesetzt, um Programmcode vor Reverse Engineering zu schützen. Hierzu wird aus einem gut les- und nachvollziehbaren Programmcode – meist unter Nutzung speziell dafür entwickelter Tools – eine für Menschen schwerer lesbare Form generiert, die aber von der verarbeitenden Maschine etwa genauso schnell ausgeführt wird und die gleiche Funktionalität ausübt wie der Originalcode. Ein Nebeneffekt kann, je nach Beschaffenheit des Codes, auch die Verkleinerung dessen Speicherbedarfs sein, z. B. durch die Umbenennung langer Identifier in kürzere. Dies ist vor allem bei der Entwicklung von Anwendungsprogrammen für mobile Endgeräte mit geringer Speicherkapazität oder Rechenleistung vorteilhaft. Der Nachteil von Code Obfuscation ist, dass der Ergebnis-Code schwerer zu debuggen ist, weil die nachträgliche Zuordnung einer Fehlerquelle im umgewandelten Code zu ihrem Pendant im Originalcode (zwecks genauerer Fehleranalyse) sehr zeitaufwendig sein kann.

Ein Obfuscator ist keine Anwendung der sogenannten Steganografie oder Kryptografie, da beim Obfuscator nur das Verständnis für den Menschen die Hürde ist (also Security through obscurity), nicht jedoch in formaler Hinsicht für die ausführende Maschine oder z. B. einen Decompiler.

Beispiele für Methoden der Code Obfuscation

Äquivalente Formeln und konstante Transformationen
Beispielsweise kann man einem Register die Zahl 10 addieren oder, was auf dasselbe hinausläuft, 15 addieren und 5 subtrahieren.
Umordnung von Anweisungen
Die Reihenfolge, in der Programmanweisungen ausgeführt werden, kann manchmal umgeordnet werden, ohne das Programm zu beeinflussen.
Variablensubstitution
Einfaches Umbenennen von Variablennamen 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 oder Pointer.
Aufruf von Subroutinen
Jede einzelne Anweisung kann auch durch eine Subroutine ersetzt werden.
Einfügen von Leercode
In die Folge der Anweisungen wird hierbei überflüssiger Code eingefügt, der nichts zum Programm beiträgt und lediglich triviale oder irrelevante Berechnungen ausführt.
Verschlüsselung
Verschlüsselung ist besonders für die Tarnung von einzelnen Bytes oder Strings wie im Code hardcodiert abgelegte Passwörter geeignet.
Mischen von Funktionen
Die Anweisungen zweier Funktionen können alternierend geschrieben werden. Dadurch verschwimmen die Grenzen zwischen den Funktionen.
Spalten von Variablen
  • Umstrukturierung von Arrays
    • 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 die frühzeitige Terminierung eines Programmes bei der Erkennung eines Debuggers abzielen. Dazu scannen sie beispielsweise den Speicher nach Suchstrings diverser Debugger.

Programme

Windows Script Encoder

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 rückgängig zu machen.

Java Bytecode

Für das Verschleiern von Java Bytecode gibt es eine Reihe von Code-Obfuscatoren. Diese sind: bb_mug, CodeShield, DashO, jarg, JavaGuard, JCloak, jmangle, JOBE, Jode, JShrink, Marvin, ProGuard, Sandmark, Retroguard, Smokescreen, yGuard und Zelix Klassmaster

Siehe auch

Des Weiteren gibt es Programmierwettbewerbe für die am kreativsten verschleierten Programm-Quelltexte:

  • IOCCC, der International Obfuscated C Code Contest – Programmiersprache C
  • Obfuscated Erlang/OTP Competition – Programmiersprache Erlang
  • Obfuscated Perl Contest – Programmiersprache Perl
  • International Obfuscated Ruby Code Contest – Programmiersprache Ruby

Weblinks


Wikimedia Foundation.

Игры ⚽ Нужен реферат?

Schlagen Sie auch in anderen Wörterbüchern nach:

  • obfuscator — noun a) Agent noun of obfuscate; one who obfuscates. b) A software program that modifies another program to make it harder to decompile or reverse engineer …   Wiktionary

  • obfuscator — É‘bfÉ™skeɪtÉ™(r) / É’b n. one who darkens; one who obscures; one who confuses …   English contemporary dictionary

  • obfuscator — ob·fus·ca·tor …   English syllables

  • obfuscator — äbˈfəˌskād.ə(r), əbˈ ; ˈäb(ˌ)fəˌ noun ( s) : one that obfuscates …   Useful english dictionary

  • Dekompilieren — Der Begriff Dekompilierer oder englisch Decompiler bezeichnet ein Computerprogramm, das aus den Datenbytes der Maschinensprache oder manchmal auch aus Daten im Objektcode wieder lesbaren Quellcode in einer Hochsprache erzeugt. Seine Arbeitsweise… …   Deutsch Wikipedia

  • Kompression ausführbarer Programmdateien — Unter Kompression ausführbarer Programmdateien versteht man die Kompression der Programmdaten einer ausführbaren Datei und die Kombination der komprimierten Daten mit einer Dekompressionsroutine zu einer einzigen ausführbaren Datei. Die… …   Deutsch Wikipedia

  • Obfuskatierung — Ein Obfuscator (engl. obfuscate „verdunkeln“, „verwirren“) ist ein Mittel zur Verschleierung von Programmcode. Ein Obfuscator ist eine Funktionsfamilie mit folgenden Eigenschaften: Er muss die Funktionalität des Originalprogramms erhalten, Der… …   Deutsch Wikipedia

  • Obfuskation — Ein Obfuscator (engl. obfuscate „verdunkeln“, „verwirren“) ist ein Mittel zur Verschleierung von Programmcode. Ein Obfuscator ist eine Funktionsfamilie mit folgenden Eigenschaften: Er muss die Funktionalität des Originalprogramms erhalten, Der… …   Deutsch Wikipedia

  • Obfuskator — Ein Obfuscator (engl. obfuscate „verdunkeln“, „verwirren“) ist ein Mittel zur Verschleierung von Programmcode. Ein Obfuscator ist eine Funktionsfamilie mit folgenden Eigenschaften: Er muss die Funktionalität des Originalprogramms erhalten, Der… …   Deutsch Wikipedia

  • ProGuard — 3.6 Basisdaten …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”