Obfuskator

Obfuskator

Ein Obfuscator (engl. obfuscate „verdunkeln“, „verwirren“) ist 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.

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.

Siehe auch

Übrigens gibt es auch sportliche Code Obfuscation in Form von Wettbewerben. Programmierwettbewerbe für die am kreativsten verschleierten Programm-Quelltexte:

Weblinks


Wikimedia Foundation.

Игры ⚽ Поможем написать реферат

Share the article and excerpts

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