Verschlüsselte Java-Anwendungen mit jhsdb (Hotspot Debugger) knacken

Eine Lösung zum Schutz von Java-Code ist die Verschlüsselung von Klassendateien oder JAR-Dateien. Diese Art von Lösung lädt die verschlüsselte Klassendatei oder JAR-Datei über einen selbst definierten Loader, was aufgrund des vorhandenen Attach-Mechanismus der JVM nutzlos ist und leicht mit den im JDK enthaltenen Tools geknackt werden kann.

Beispielanwendung

Nachfolgend ist eine Beispielanwendung mit einem einfachen Swing-Fenster und einer Schaltfläche. https://github.com/3-keys/test-swing-app

img

Anwendung verschlüsseln

Exportieren Sie eine ausführbare JAR-Datei mit Eclipse und verwenden Sie ein Verschlüsselungstool, um die JAR-Datei zu verschlüsseln. Nach der Verschlüsselung ist die Struktur der JAR-Datei wie folgt:

img

test-swing-app.jar sind die verschlüsselten JAR-Dateidaten, die Launcher-Klassen sind die benutzerdefinierten Ladeklassen dieses Tools, und das verschlüsselte JAR-Paket wird weiterhin über den Standard-Befehl java -jar ausgeführt

Die verschlüsselte Anwendung knacken

Führen Sie zunächst die verschlüsselte JAR-Datei aus, suchen Sie dann das bin-Verzeichnis des JDK und Sie sollten eine jshdb-Datei finden.

1_nsxbwNJrGJB4mpzsQv55VA

Führen Sie jhsdb hsdb aus, öffnen Sie den HotSpot Debugger. Unter Windows müssen Sie möglicherweise als Administrator ausführen. Klicken Sie auf Datei und wählen Sie "Attach to HotSpot process..."

img

Verwenden Sie den Befehl ps aux | grep java unter Linux, und finden Sie die Prozess-PID über den Task-Manager unter Windows. Geben Sie die Prozess-PID im folgenden Dialogfeld ein.

img

Klicken Sie nach erfolgreichem Anhängen auf Tools->Class Browser

img

Der Class Browser enthält Informationen über alle geladenen Klassen. Suchen Sie nach com.example und Sie sehen alle Klassen unter com.example

img

Klicken Sie auf com.example.TestWindow @0x0000.... und dann auf "Create .class File"

img

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

img

Verwenden Sie Luyten oder jadx, um die Klassendatei zu öffnen, und Sie sehen den dekompilierten Code

img