Problèmes liés au chiffrement des fichiers de classe Java
Outre l'obfuscation, le chiffrement des fichiers de classe est une méthode de protection du code facile à mettre en œuvre. De nombreux systèmes utilisent des agents pour chiffrer les fichiers de classe et les déchiffrer lors du chargement des classes. Cependant, ces systèmes négligent un point important : le mécanisme d'attachement intégré à la JVM.
mécanisme d'attachement JVM
Pour faciliter l'analyse et la surveillance du fonctionnement des programmes, les JVM classiques sont dotées de fonctions d'attachement. Les utilisateurs peuvent utiliser des outils comme jhsdb pour se connecter au processus JVM, visualiser et analyser ses données mémoire. De plus, ces données sont organisées conformément à la structure des données du fichier source, ce qui peut être considéré comme un mécanisme de contrôle interne de la JVM.
L'article suivant explique comment utiliser le mécanisme d'attachement de la JVM pour lire et enregistrer les informations des fichiers de classe en mémoire.
https://protector4j.com/articles/cracking-encrypted-java-applications-jhsdb/
En plus de l'outil jhsdb fourni par JDK, vous pouvez également utiliser Arthas d'Alibaba pour analyser les processus Java en cours d'exécution.
Les fonctions liées à HOOK obtiennent des informations de classe chargées dynamiquement.
Certaines méthodes de protection chargent dynamiquement les informations de classe par réflexion ; cette approche peut également être utilisée pour obtenir en temps réel les informations de classe chargées via l’injection de DLL. Pour plus de détails, veuillez consulter les deux projets suivants.
https://github.com/ViRb3/jvm-dump-proxy
https://github.com/zorftw/JVM-Native-Classdumping
Conclusion
Du fait de l'existence du mécanisme d'attachement à la JVM ou du mécanisme HOOK binaire, tout code chiffré non détaché du fonctionnement normal de la JVM peut être facilement lu à l'aide d'outils d'attachement ou intercepté par injection de DLL. Par conséquent, cette solution de protection est la moins efficace.