Problèmes avec le chiffrement des fichiers de classe Java

En plus de l'obscurcissement, le chiffrement des fichiers de classe est une méthode de protection du code facile à concevoir. De nombreux schémas utilisent des agents pour chiffrer les fichiers de classe 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é à la JVM.

Mécanisme de rattachement JVM

Afin de faciliter l'analyse et la surveillance du fonctionnement du programme, les JVM ordinaires sont livrées avec des pièces jointes. Les utilisateurs peuvent utiliser des outils tels que jhsdb pour se connecter au processus JVM, afficher et analyser ses données de mémoire. De plus, ces données de mémoire sont correctement organisées en fonction de la structure des données dans le fichier source, ce qui peut également être compris comme un mécanisme de porte dérobée intégré à la JVM.

L'article suivant explique comment utiliser le mécanisme d'attachement 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 d'utiliser l'outil jhsdb fourni par JDK, vous pouvez également utiliser Arthas d'Alibaba pour analyser les processus Java en cours d'exécution.

Certaines méthodes de protection chargent dynamiquement les informations de classe par réflexion, et cette approche peut également être utilisée pour obtenir des informations de classe chargées en temps réel via l'injection de DLL. Pour plus de détails, veuillez vous référer aux deux projets suivants.

https://github.com/ViRb3/jvm-dump-proxy

https://github.com/zorftw/JVM-Native-Classdumping

Conclusion

En raison de l'existence d'un mécanisme de pièce jointe JVM ou d'un mécanisme binaire HOOK, tous les codes dits cryptés qui n'ont pas été détachés du fonctionnement normal de la JVM peuvent être facilement lus à l'aide d'outils de pièce jointe ou accrochés via une injection de DLL. Il s’agit donc de la solution de protection la plus inefficace.