Los problemas con la ofuscación de código
La ofuscación de código es la primera solución aplicada a la protección del código Java y también es la solución más directa.
La ofuscación de código generalmente implica los siguientes cuatro métodos:
- Conversión de nombre de paquete, nombre de clase, nombre de variable
- Las estructuras de control cambian, como el aplanamiento del flujo de control, la adición de predicados inmutables, etc.
- Ofuscación o encriptación de cadenas
- Agregar código inútil
La ofuscación del código puede reducir significativamente la legibilidad del código descompilado y aumentar la dificultad del análisis estático, pero no importa cómo se realice la ofuscación del código, la lógica de ejecución del programa no se alterará.
El código de bytes JVM es un código intermedio semántico muy claro y explícito que es altamente legible. Para los archivos de clase ofuscados, incluso si no se pueden restaurar a un código fuente Java legible, aún se pueden analizar a nivel de código de bytes. Debido a la alta naturaleza semántica del código de bytes de Java, este proceso es relativamente sencillo.
Hemos desarrollado un motor de ejecución de bytecode JVM utilizando los lenguajes Java y Kotlin. Los usuarios pueden utilizar este proyecto para depurar dinámicamente programas Java a nivel de código de bytes en IntelliJ IDEA. Para obtener más información, consulte el artículo siguiente.
https://protector4j.com/articles/jvm-bytecode-engine-writing-with-java-and-kotlin/
Y usamos este motor para intentar descifrar un código obfuscado bien conocido, el proceso específico se puede consultar en el siguiente artículo
http://protector4j.com/articles/deobfuscate-with-vlx-vmengine/
Conclusión
Del análisis anterior se puede ver que debido a la alta semanticidad del código de bytes JVM, es muy fácil de analizar y leer. La lógica de ejecución se puede analizar fácilmente mediante depuración dinámica. Escribir herramientas de depuración dinámica no es una tarea muy compleja, por lo que la ofuscación no es una solución de protección confiable.