Descifrando aplicaciones Java encriptadas usando jhsdb (depurador de hotspot)

Una solución para la protección del código Java es el cifrado de archivos de clase o el cifrado de archivos jar. Este tipo de solución carga el archivo de clase cifrado o el archivo jar a través de un cargador autodefinido, lo cual es inútil debido a la existencia del mecanismo Adjuntar de la JVM y se puede descifrar fácilmente con las herramientas que vienen con el JDK.

Aplicación de muestra

A continuación se muestra una aplicación de ejemplo con una ventana abatible simple y un botón. https://github.com/3-keys/test-swing-app

img

Aplicación de cifrado

Exporte un archivo jar ejecutable con Eclipse y utilice una herramienta de cifrado para cifrar el archivo jar. Después del cifrado, la estructura del archivo jar es la siguiente:

img

test-swing-app.jar son los datos del archivo jar cifrado, las clases del Lanzador son las clases de carga personalizadas de esta herramienta y el paquete jar cifrado aún se ejecuta mediante el comando java -jar estándar

Descifrar la aplicación encriptada

Primero, ejecute el archivo jar cifrado, luego busque el directorio bin de JDK y debería poder encontrar un archivo jshdb.

1_nsxbwNJrGJB4mpzsQv55VA

Ejecute jhsdb hsdb, abra HotSpot Debugger, si está en Windows, es posible que necesite ejecutarlo como administrador, haga clic en Archivo para seleccionar Adjuntar al proceso HotSpot...

img

Utilice el ps aux | grep java en el sistema Linux y busque el proceso pid a través del Administrador de tareas en el sistema Windows. Ingrese el pid del proceso en el cuadro de diálogo a continuación.

img

Después de adjuntarlo correctamente, haga clic en Herramientas->Navegador de clases

img

El navegador de clases contiene información sobre todas las clases cargadas, busque com.example y podrá ver todas las clases en com.example

img

Haga clic en com.example.TestWindow @0x0000…. y luego haga clic en "Crear archivo .class"

img

vaya al directorio donde se ejecutó el comando jhsdb antes, podrá ver el archivo de clase generado

img

UsarLuyten Ojadxpara abrir el archivo de clase y puedes ver el código descompilado

img