Vor einiger Zeit fragte ich mal im Chat, ob es möglich ist, seine Klassen vor dem decompilieren zu schützen. Wir kamen überein, dass sogenannte Obfuscatoren die einzige Möglichkeit wäre, den Code einigermaßen zu schützen. Dabei werden Variablennamen und Methodenamen durch kryptische Bezeichnungen ersetzt, was das Lesen erschwert. Jedoch können moderne Entwicklungsumgebungen mittels Refactoring einen großen Teil dieser Verschleierung wieder rückgängig machen.
Die Firma Step2e entwickelte ein neues Produkt zur Verschlüsselung von Java Klassen. mit der das dekompilieren nicht möglich ist. Hier ein Auszug aus der Herstellerseite:
Quelle: http://www.step2e.de/
Die Firma Step2e entwickelte ein neues Produkt zur Verschlüsselung von Java Klassen. mit der das dekompilieren nicht möglich ist. Hier ein Auszug aus der Herstellerseite:
Code:
Das Grundproblem
Die Programmiersprache Java erfreut sich seit einigen Jahren immer größer werdender Beliebtheit.
Neben klassischer Client-Programmierung bietet Java vor allem im Bereich verteilter oder
serverbasierter Systeme eine umfassende Lösung für moderne e-Business Anwendungen. Java
Software ist plattformunabhängig, d.h. ein und dasselbe Programm kann sowohl unter Windows,
als auch unter Unix / Linux oder MacOS Betriebssystemen eingesetzt werden. Dies wird dadurch
erreicht, dass eine plattformabhängige sog. Virtuelle Maschine auf dem Zielsystem installiert wird,
in der die eigentlichen Java-Programme dann ablaufen.
Hieraus ergeben sich allerdings zahlreiche Probleme, vor allem im Bereich „Security“. Java-
Quelltext wird in den sog. Bytecode kompiliert und dieser in einer Virtuellen Maschine (JVM)
ausgeführt. Da die Schnittstelle der JVM offen gelegt ist, können Java-Klassen sehr einfach wieder
in den ursprünglichen Quelltext zurück transformiert werden (Decompiler). Dadurch werden alle
eingesetzten Algorithmen, Klassen und Methoden offen zugänglich, die Software damit nicht
schützbar.
Die Lösung
Wibu-Key bietet hervorragende Verschlüsselungsmöglichkeiten. Key4J nutzt diese um Java-Klassen
zu schützen. Eine verschlüsselte Java-Klasse kann von keinem Decompiler „geknackt“ werden und
bietet somit optimalen Schutz für die darin enthaltenen Informationen. Die gewünschten Klassen
werden im „Key4J-Admin“ ausgewählt und anschließend verschlüsselt wieder in die ursprüngliche
Verzeichnishierarchie oder jar-Archive geschrieben. Für die Integration in
Entwicklungsumgebungen wie z.B. Eclipse oder Together kann Key4J auch als Ant-Task aufgerufen
werden.
Beim Ausführen des Programms sorgt der „Key4J-Classloader“ dafür, dass die gesicherten
Informationen ausschließlich im Hauptspeicher des Rechners unverschlüsselt vorliegen. Die
spezielle „Key4J-Security Architecture“ bemerkt sowohl den Austausch als auch Manipulationen des
Original-Classloaders der JVM und führt somit zum derzeit sichersten Schutz für Java-Software.
Performance
Key4J verwendet die indirekte Verschlüsselung von Wibu-Key. Hierbei wird zu Beginn ein
Referenzwert generiert, mit dem dann im Hauptspeicher der komplette Entschlüsselungsprozess
stattfindet. Die Kommuikation mit Wibu-Key wird somit auf ein Minimum reduziert, die
Performance bleibt im Vergleich zur unverschlüsselten Anwendung nahezu unverändert.
Einsatz
Key4J kann eingesetzt werden, ohne bestehende Anwendungen modifizieren zu müssen.
Im „Key4J Admin“ wählen Sie die zu verschlüsselnden Klassen. Diese können nach der
Verschlüsselung wie normale Java-Klassen behandelt und z.B. in jar-Archive gepackt
werden. Eine verschlüsselte Anwendung kann ohne Modifikation der Quelltexte wie folgt
aufgerufen werden:
java –classpath %CLASSPATH%;WkJavaApi.jar de.step2e.key4j.Key4JWrapper
Main_Class Arg0 Arg1...
Hierbei ist Main_Class Ihre Original-Java Anwendung und Arg0, Arg1, ... die von Ihnen
benötigten Parameter.

Quelle: http://www.step2e.de/