Probleme mit der Verschlüsselung von Java-Klassendateien
Neben der Verschleierung ist die Verschlüsselung von Klassendateien eine leicht verständliche Methode zum Schutz des Codes. Viele Verfahren nutzen Agenten, um Klassendateien zu verschlüsseln und beim Laden der Klasse zu entschlüsseln. Diese Verfahren vernachlässigen jedoch einen wichtigen Punkt: den in die JVM integrierten Anbindungsmechanismus.
JVM-Anbindungsmechanismus
Um die Analyse und Überwachung des Programmablaufs zu vereinfachen, verfügen herkömmliche JVMs über Anhänge. Benutzer können Tools wie jhsdb verwenden, um sich mit dem JVM-Prozess zu verbinden und dessen Speicherdaten anzuzeigen und zu analysieren. Diese Speicherdaten sind zudem entsprechend der Datenstruktur in der Quelldatei organisiert, was als integrierter Sicherheitsmechanismus der JVM verstanden werden kann.
Im Folgenden wird erläutert, wie man den JVM-Attach-Mechanismus verwendet, um Informationen aus Klassendateien im Speicher zu lesen und zu speichern.
https://protector4j.com/articles/cracking-encrypted-java-applications-jhsdb/
Neben der Verwendung des vom JDK bereitgestellten jhsdb-Tools können Sie auch Alibabas Arthas zur Analyse laufender Java-Prozesse nutzen.
HOOK-bezogene Funktionen rufen dynamisch geladene Klasseninformationen ab.
Manche Schutzmethoden laden Klasseninformationen dynamisch per Reflektion. Dieser Ansatz kann auch genutzt werden, um in Echtzeit geladene Klasseninformationen durch DLL-Injektion zu erhalten. Weitere Details finden Sie in den folgenden beiden Projekten.
https://github.com/ViRb3/jvm-dump-proxy
https://github.com/zorftw/JVM-Native-Classdumping
Abschluss
Aufgrund des JVM-Anhangsmechanismus bzw. des binären Hook-Mechanismus lassen sich alle sogenannten verschlüsselten Codes, die nicht vom normalen JVM-Betrieb getrennt wurden, mithilfe von Anhangstools leicht auslesen oder durch DLL-Injection abfangen. Daher stellt dies die ineffektivste Schutzlösung dar.