Les problèmes du chiffrement des fichiers Class Java

En plus de l'obfuscation, le chiffrement des fichiers Class est une méthode de protection de code facile à concevoir. De nombreux schémas utilisent des agents pour chiffrer les fichiers Class et les déchiffrer lors du chargement des classes. Cependant, ces schémas négligent un point important : le mécanisme d'attachement intégré de la JVM.

Mécanisme d'attachement de la JVM

Afin de faciliter l'analyse et la surveillance du fonctionnement des programmes, les JVM ordinaires sont livrées avec des mécanismes d'attachement. Les utilisateurs peuvent utiliser des outils comme jhsdb pour s'attacher au processus JVM, visualiser et analyser ses données en mémoire. De plus, ces données mémoire sont correctement organisées selon la structure de données du fichier source, ce qui peut également être compris comme un mécanisme de porte dérobée intégrée de la JVM.

L'article suivant présente comment utiliser le mécanisme d'attachement JVM pour lire et sauvegarder les informations des fichiers Class en mémoire.

https://protector4j.com/fr/articles/cracking-encrypted-java-applications-jhsdb/

En plus d'utiliser l'outil jhsdb fourni par le JDK, vous pouvez également utiliser Arthas d'Alibaba pour analyser les processus Java en cours d'exécution.

Obtenir les informations de classes chargées dynamiquement par HOOK des fonctions connexes

Certaines méthodes de protection chargent dynamiquement les informations de classe par réflexion, et cette approche peut également être utilisée pour obtenir les informations de classe chargées en temps réel 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

En raison de l'existence du mécanisme d'attachement JVM ou du mécanisme de HOOK binaire, tout code soi-disant chiffré qui n'a pas été séparé du fonctionnement normal de la JVM peut être facilement lu à l'aide d'outils d'attachement ou intercepté par injection de DLL. C'est donc la solution de protection la plus inefficace.