Entschlüsseln von verschlüsselten Java-Anwendungen mit jhsdb (Hotspot-Debugger)
Eine Lösung für den Schutz von Java-Code ist die Klassendateiverschlüsselung oder die JAR-Dateiverschlüsselung. Diese Art von Lösung lädt die verschlüsselte Klassendatei oder JAR-Datei über einen selbstdefinierten Loader, was aufgrund des vorhandenen Attach-Mechanismus der JVM nutzlos ist und mit den im JDK enthaltenen Tools leicht geknackt werden kann.
Beispielanwendung
Nachfolgend finden Sie eine Beispielanwendung mit einem einfachen Swing-Fenster und einer Schaltfläche. https://github.com/3-keys/test-swing-app
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 sieht die Struktur der JAR-Datei wie folgt aus:
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 Standardbefehl java -jar ausgeführt
Entschlüsseln Sie die verschlüsselte Anwendung
Führen Sie zuerst die verschlüsselte JAR-Datei aus, suchen Sie dann das bin-Verzeichnis des JDK und Sie sollten in der Lage sein, eine JSHDB-Datei zu finden.
Führen Sie jhsdb hsdb aus, öffnen Sie den HotSpot-Debugger. Wenn es unter Windows ist, müssen Sie möglicherweise als Administrator ausführen. Klicken Sie auf Datei, um An HotSpot-Prozess anhängen auszuwählen...
Verwenden Sie ps aux | Führen Sie im Linux-System den Befehl grep java aus und ermitteln Sie die Prozess-PID über den Task-Manager im Windows-System. Geben Sie die Prozess-PID in das Dialogfeld unten ein.
Nachdem Sie es erfolgreich angehängt haben, klicken Sie auf Tools->Class Browser
Der Klassenbrowser enthält Informationen zu allen geladenen Klassen. Suchen Sie nach com.example und Sie sehen möglicherweise alle Klassen unter com.example
Klicken Sie auf com.example.TestWindow @0x0000…. und klicken Sie dann auf „.class-Datei erstellen“
Wechseln Sie zum Verzeichnis, in dem der jhsdb-Befehl zuvor ausgeführt wurde, um die generierte Klassendatei anzuzeigen
VerwendenLuyten Oderjadxum die Klassendatei zu öffnen und den dekompilierten Code zu sehen