Knacken verschlüsselter Java-Anwendungen mit jhsdb (Hotspot-Debugger)
Eine Möglichkeit zum Schutz von Java-Code ist die Verschlüsselung von Klassendateien oder JAR-Dateien. Dabei wird die verschlüsselte Klassendatei oder JAR-Datei über einen selbstdefinierten Loader geladen. Dieser ist jedoch aufgrund des Attach-Mechanismus der JVM nutzlos und kann mit den im JDK enthaltenen Tools leicht geknackt werden.
Beispielanwendung
Nachfolgend finden Sie eine Beispielanwendung mit einem einfachen Swing-Fenster und einem Button. https://github.com/3-keys/test-swing-app

Verschlüsselungsanwendung
Exportieren Sie mit Eclipse eine ausführbare JAR-Datei und verschlüsseln Sie diese anschließend mit einem Verschlüsselungstool. Nach der Verschlüsselung hat die JAR-Datei folgende Struktur:

Die Datei test-swing-app.jar enthält die verschlüsselten JAR-Dateidaten, die Launcher-Klassen sind die benutzerdefinierten Ladeklassen dieses Tools, und das verschlüsselte JAR-Paket wird weiterhin über den Standardbefehl java -jar ausgeführt.
Knacken Sie die verschlüsselte Anwendung
Führen Sie zunächst die verschlüsselte JAR-Datei aus, suchen Sie dann das Bin-Verzeichnis des JDK und dort sollte sich eine jshdb-Datei befinden.

Führen Sie jhsdb hsdb aus, öffnen Sie den HotSpot Debugger; unter Windows müssen Sie ihn möglicherweise als Administrator ausführen; klicken Sie auf Datei, um „An HotSpot-Prozess anhängen…“ auszuwählen.

Verwenden Sie unter Linux den Befehl `ps aux | grep java` und unter Windows den Task-Manager, um die Prozess-ID (PID) zu ermitteln. Geben Sie die Prozess-ID im unten stehenden Dialogfeld ein.

Nach erfolgreicher Anbindung klicken Sie auf „Tools“ → „Klassenbrowser“.

Die Klasse Browser enthält Informationen über alle geladenen Klassen. Suchen Sie nach com.example, und Sie sehen alle Klassen unter com.example.

Klicken Sie auf com.example.TestWindow @0x0000… und anschließend auf „.class-Datei erstellen“.

Wechseln Sie in das Verzeichnis, in dem zuvor der Befehl jhsdb ausgeführt wurde. Dort finden Sie die generierte Klassendatei.

Verwenden Luyten Oder jadx Öffnen Sie die Klassendatei, und Sie können den dekompilierten Code einsehen.
