Obfuskation: Code-Dieben das Handwerk legen

Es ist sehr einfach, Java-Klassendateien rückzuentwickeln. Der Java-Bytecode enthält viele Informationen, die auch im ursprünglichen Quellcode enthalten sind. Darüber hinaus sind Java-Programme dafür bekannt, dass sie nur einmal geschrieben werden müssen und anschließend überall laufen. Diese Flexibilität bietet zahlreiche potenzielle Vorteile in einer verteilten Umgebung. Die Code-Dekompilierung beschränkt sich nicht ausschließlich auf Java, wurde jedoch nie so öffentlich oder allgegenwärtig eingesetzt wie unter den Java-Entwicklern. Das Gegenteil der Dekompilierung ist die Obfuskation.

Was versteht man unter Obfuskation?

Code-Obfuskation ist aktuell das beste Verfahren, um Java-Code gegen Reverse Engineering zu schützen. Durch die Obfuskation wird die Software zwar unverständlich, funktioniert jedoch weiterhin nach dem ursprünglichen Code. Die Programme sind damit schwieriger zu dechiffrieren, was sie unempfindlicher gegen Reverse Engineering werden lässt.

Durch einen Obfuskator wird aus einem bestimmten Satz von Klassendateien P ein anderer Satz von Klassendateien P‘. Als Ergebnis ist der Code für P nicht mehr der gleiche wie der Code für P‘.

Als Beispiel dient ein einfacher Java-Code aus dem ursprünglichen Quellcode (src1.java.txt):


class OriginalHello {
public OriginalHello() {
int number=1;
}
public String getHello(String helloname){
return helloname;
}

Nach der Obfuskation dieses Codes durch einen relativ simplen Obfuskator, wie etwa Klass-Master, werden alle Namen in dieser Klasse geändert oder zerhackt und die Zeilennummern entfernt. Dadurch entsteht dann der obfuskatierte Code (dst1.java.txt):


class a {
public static boolean a;
public a() {
int a=1;
}
public String a(String b){
return b;
}

Am oben gezeigten Code erkennt man, dass Hello.class durch den Obfuskator Klass-Master zu einer Klasse und ihre Methode, also getHello(java.lang.String), zu a(java.lang.String) geändert wurde. Der Name der Methode a() ist schwieriger zu verstehen als getHello(). Wenn man den obfuskatierten Bytecode mit dem ursprünglichen Bytecode vergleicht, sieht man, dass die Zeilennummern entfernt wurden. Dadurch erhalten Rückentwickler weniger Informationen.

Bei diesem sehr einfachen Beispiel für eine Code-Obfuskation werden lediglich die Identifier verschlüsselt und die von Kompilierern erzeugten Zeilennummern entfernt. Moderne kommerzielle Obfuskatoren können sehr schnell verschlüsseln und gleichzeitig ziemlich gut Codes entschlüsseln. Auf diesem Gebiet wird jedoch noch viel geforscht.

Page: 1 2 3

ZDNet.de Redaktion

Recent Posts

Microsoft nennt weitere Details zu kostenpflichtigen Patches für Windows 10

Erstmals liegen Preise für Verbraucher vor. Sie zahlen weniger als Geschäftskunden. Dafür beschränkt Microsoft den…

17 Stunden ago

Microsoft verschiebt erneut Copilot Recall

Die Entwickler arbeiten noch an weiteren „Verfeinerungen“. Windows Insider erhalten nun wohl eine erste Vorschau…

1 Tag ago

GenKI im Job: Mitarbeitende schaffen Tatsachen

Laut Bitkom-Umfrage werden in jedem dritten Unternehmen in Deutschland private KI-Zugänge genutzt. Tendenz steigend.

2 Tagen ago

97 Prozent der Großunternehmen melden Cyber-Vorfälle

2023 erlitten neun von zehn Unternehmen in der DACH-Region Umsatzverluste und Kurseinbrüche in Folge von…

2 Tagen ago

„Pacific Rim“-Report: riesiges, gegnerisches Angriffs-Ökosystem

Der Report „Pacific Rim“ von Sophos beschreibt Katz-und-Maus-Spiel aus Angriffs- und Verteidigungsoperationen mit staatlich unterstützten…

2 Tagen ago

DeepL setzt erstmals auf NVIDIA DGX SuperPOD mit DGX GB200-Systemen

NVIDIA DGX SuperPOD soll voraussichtlich Mitte 2025 in Betrieb genommen und für Forschungsberechnungen genutzt werden.

2 Tagen ago