Problemas con el cifrado de archivos de clase Java
Además de la ofuscación, el cifrado de archivos de clase es un método fácil de concebir para proteger el código. Muchos esquemas emplean agentes para cifrar archivos de clase y descifrarlos durante la carga de clases. Sin embargo, estos esquemas pasan por alto un aspecto importante: el mecanismo de conexión integrado de la JVM.
Mecanismo de conexión de JVM
Para facilitar el análisis y la monitorización del funcionamiento del programa, las JVM comunes incluyen archivos adjuntos. Los usuarios pueden usar herramientas como jhsdb para conectarse al proceso de la JVM y visualizar y analizar sus datos de memoria. Además, estos datos de memoria se organizan correctamente según la estructura de datos del archivo fuente, lo que también puede considerarse un mecanismo de puerta trasera integrado en la JVM.
El siguiente artículo presenta cómo utilizar el mecanismo de conexión de JVM para leer y guardar información de archivos de clase en la memoria.
https://protector4j.com/articles/cracking-encrypted-java-applications-jhsdb/
Además de utilizar la herramienta jhsdb proporcionada por JDK, también puede utilizar Arthas de Alibaba para analizar procesos Java en ejecución.
Las funciones relacionadas con HOOK obtienen información de clase cargada dinámicamente.
Algunos métodos de protección cargan dinámicamente la información de clase mediante reflexión. Este enfoque también puede utilizarse para obtener información de clase cargada en tiempo real mediante la inyección de DLL. Para más detalles, consulte los dos proyectos siguientes.
https://github.com/ViRb3/proxy-de-volcado-jvm
https://github.com/zorftw/JVM-Native-Classdumping
Conclusión
Debido a la existencia del mecanismo de conexión de la JVM o mecanismo de enganche binario, todo el código cifrado que no se haya desconectado del funcionamiento normal de la JVM puede leerse fácilmente mediante herramientas de conexión o engancharse mediante inyección de DLL. Por lo tanto, esta es la solución de protección más ineficaz.