Problemas con la encriptación de archivos de clase de Java

Además de la ofuscación, el cifrado de archivos de clase es un método de protección de código fácil de concebir. Muchos esquemas emplean el uso de agentes para cifrar archivos de clase y descifrarlos durante la carga de clases. Sin embargo, estos esquemas pasan por alto un punto importante: el mecanismo de conexión integrado de la JVM.

Mecanismo de adjuntar JVM

Para facilitar el análisis y el seguimiento del funcionamiento del programa, las JVM ordinarias vienen con archivos adjuntos. Los usuarios pueden utilizar herramientas como jhsdb para conectarse al proceso JVM, ver y analizar sus datos de memoria. Además, estos datos de memoria están organizados adecuadamente de acuerdo con la estructura de datos en el archivo fuente, lo que también puede entenderse como un mecanismo de puerta trasera incorporado de JVM.

El siguiente artículo presenta cómo utilizar el mecanismo de conexión 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 los procesos Java en ejecución.

Algunos métodos de protección cargan dinámicamente información de clase mediante reflexión, y este método también se puede utilizar para obtener información de clase cargada en tiempo real mediante inyección de DLL. Para obtener más detalles, consulte los dos proyectos siguientes.

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

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

Conclusión

Debido a la existencia de un mecanismo de adjunto JVM o un mecanismo HOOK binario, todos los llamados códigos cifrados que no se han separado del funcionamiento normal de JVM se pueden leer fácilmente usando herramientas de adjunto o enganchados mediante inyección de DLL. Por tanto, esta es la solución de protección más ineficaz.