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

Taugen Kryptowährungen als Unterstützer der Energiewende?

Bankhaus Metzler und Telekom-Tochter MMS testen, inwieweit Bitcoin-Miner das deutsche Stromnetz stabilisieren könnten.

15 Stunden ago

Supercomputer-Ranking: El Capitan überholt Frontier und Aurora

Mit 1,7 Exaflops ist El Capitan nun der dritte Exascale-Supercomputer weltweit. Deutschland stellt erneut den…

19 Stunden ago

Ionos führt neue AMD-Prozessoren ein

Der deutsche Hyperscaler erweitert sein Server-Portfolio um vier Angebote mit den neuen AMD EPYC 4004…

19 Stunden ago

Lags beim Online-Gaming? DSL-Vergleich und andere Tipps schaffen Abhilfe

Beim Online-Gaming kommt es nicht nur auf das eigene Können an. Auch die technischen Voraussetzungen…

20 Stunden ago

GenKI-Fortbildung immer noch Mangelware

Fast jedes zweite Unternehmen bietet keinerlei Schulungen an. In den übrigen Betrieben profitieren oft nur…

20 Stunden ago

Netzwerk-Portfolio für das KI-Zeitalter

Huawei stellt auf der Connect Europe 2024 in Paris mit Xinghe Intelligent Network eine erweiterte…

22 Stunden ago