Probleme mit der Verschlüsselung von Java-Klassendateien
Neben der Verschleierung ist die Klassendateiverschlüsselung eine einfach zu verstehende Methode zum Codeschutz. Viele Schemata verwenden Agenten, um Klassendateien zu verschlüsseln und beim Laden der Klasse zu entschlüsseln. Allerdings übersehen diese Schemata einen wichtigen Punkt, nämlich den in die JVM integrierten Anhängemechanismus.
JVM-Anbindungsmethode
Um die Analyse und Überwachung des Programmbetriebs zu erleichtern, werden gewöhnliche JVMs mit Anhängen geliefert. Benutzer können Tools wie jhsdb verwenden, um eine Verbindung zum JVM-Prozess herzustellen und dessen Speicherdaten anzuzeigen und zu analysieren. Darüber hinaus sind diese Speicherdaten entsprechend der Datenstruktur in der Quelldatei ordnungsgemäß organisiert, was auch als integrierter Hintertürmechanismus der JVM verstanden werden kann.
Im folgenden Artikel wird erläutert, wie Sie mithilfe des JVM-Anhängemechanismus Klassendateiinformationen lesen und im Speicher speichern.
https://protector4j.com/articles/cracking-encrypted-java-applications-jhsdb/
Zusätzlich zur Verwendung des von JDK bereitgestellten Tools jhsdb können Sie auch Arthas von Alibaba verwenden, um laufende Java-Prozesse zu analysieren.
HOOK-bezogene Funktionen erhalten dynamisch geladene Klasseninformationen.
Einige Schutzmethoden laden Klasseninformationen dynamisch durch Reflektion, und dieser Ansatz kann auch verwendet werden, um in Echtzeit geladene Klasseninformationen durch DLL-Injektion zu erhalten. Weitere Einzelheiten finden Sie in den folgenden beiden Projekten.
https://github.com/ViRb3/jvm-dump-proxy
https://github.com/zorftw/JVM-Native-Classdumping
Fazit
Aufgrund der Existenz eines JVM-Anhangsmechanismus oder eines binären HOOK-Mechanismus können alle sogenannten verschlüsselten Codes, die nicht vom normalen JVM-Betrieb getrennt wurden, einfach mit Anhangstools gelesen oder durch DLL-Injection eingehängt werden. Daher ist dies die ineffektivste Schutzlösung.