Problemas con el cifrado de archivos class de Java
Además de la ofuscación, el cifrado de archivos class es un método de protección de código fácilmente concebible. Muchos esquemas emplean el uso de agentes para cifrar archivos class y descifrarlos durante la carga de clases. Sin embargo, estos esquemas pasan por alto un punto importante, el mecanismo de adjunción incorporado del JVM.
Mecanismo de adjunción del JVM
Para facilitar el análisis y monitoreo del funcionamiento de programas, los JVM ordinarios vienen con mecanismos de adjunción. Los usuarios pueden usar herramientas como jhsdb para adjuntarse al proceso JVM, ver y analizar sus datos de memoria. Además, estos datos de memoria están organizados apropiadamente según la estructura de datos en el archivo fuente, lo que también puede entenderse como un mecanismo de puerta trasera incorporado del JVM.
El siguiente artículo presenta cómo usar el mecanismo de adjunción del JVM para leer y guardar información de archivos class en memoria.
https://protector4j.com/es/articles/cracking-encrypted-java-applications-jhsdb/
Además de usar la herramienta jhsdb proporcionada por JDK, también puede usar Arthas de Alibaba para analizar procesos Java en ejecución.
Funciones relacionadas con HOOK para obtener información de clases cargadas dinámicamente.
Algunos métodos de protección cargan información de clases dinámicamente a través de reflexión, y este enfoque también puede usarse para obtener información de clases cargadas en tiempo real mediante inyección de DLL. Para más detalles, consulte los siguientes dos proyectos.
https://github.com/ViRb3/jvm-dump-proxy
https://github.com/zorftw/JVM-Native-Classdumping
Conclusión
Debido a la existencia del mecanismo de adjunción del JVM o del mecanismo de HOOK binario, todo el código supuestamente cifrado que no se ha separado del funcionamiento normal del JVM puede leerse fácilmente usando herramientas de adjunción o interceptarse mediante inyección DLL. Por lo tanto, esta es la solución de protección más ineficaz.