Craquer les applications Java chiffrées avec jhsdb (hotspot debugger)

Une solution pour la protection du code Java est le chiffrement des fichiers Class ou des fichiers jar. Ce type de solution charge le fichier Class ou le fichier jar chiffré via un chargeur personnalisé, ce qui est inutile en raison de l'existence du mécanisme d'attachement de la JVM et peut être facilement craqué avec les outils fournis avec le JDK.

Application exemple

Voici une application exemple avec une simple fenêtre Swing et un bouton. https://github.com/3-keys/test-swing-app

img

Chiffrer l'application

Exportez un fichier jar exécutable avec Eclipse et utilisez un outil de chiffrement pour chiffrer le fichier jar. Après le chiffrement, la structure du fichier jar est la suivante :

img

test-swing-app.jar contient les données du fichier jar chiffré, les classes Launcher sont les classes de chargement personnalisées de cet outil, et le package jar chiffré est toujours exécuté via la commande standard java -jar

Craquer l'application chiffrée

Tout d'abord, exécutez le fichier jar chiffré, puis trouvez le répertoire bin du JDK et vous devriez trouver un fichier jhsdb.

1_nsxbwNJrGJB4mpzsQv55VA

Exécutez jhsdb hsdb, ouvrez HotSpot Debugger. Sous Windows, il peut être nécessaire de l'exécuter en tant qu'administrateur. Cliquez sur File pour sélectionner Attach to HotSpot process…

img

Utilisez la commande ps aux | grep java sous Linux, et trouvez le pid du processus via le Gestionnaire des tâches sous Windows. Entrez le pid du processus dans la boîte de dialogue ci-dessous.

img

Après l'attachement réussi, cliquez sur Tools->Class Browser

img

Le Class Browser contient les informations de toutes les classes chargées. Recherchez com.example et vous pouvez voir toutes les classes sous com.example

img

Cliquez sur com.example.TestWindow @0x0000…. puis cliquez sur « Create .class File »

img

Accédez au répertoire où la commande jhsdb a été exécutée précédemment, vous pouvez voir le fichier Class généré

img

Utilisez Luyten ou jadx pour ouvrir le fichier Class et vous pouvez voir le code décompilé

img