Déchiffrement d'applications Java cryptées à l'aide de jhsdb (débogueur hotspot)

Une solution pour protéger le code Java consiste à chiffrer les fichiers de classe ou les fichiers JAR. Ce type de solution charge le fichier chiffré via un chargeur personnalisé, mais elle est inefficace en raison du mécanisme d'attachement de la JVM et peut être facilement déchiffrée avec les outils fournis avec le JDK.

Exemple d'application

Vous trouverez ci-dessous un exemple d'application avec une simple fenêtre pivotante et un bouton. https://github.com/3-keys/test-swing-app

img

Application de chiffrement

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

img

Le fichier 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. Le package JAR chiffré est exécuté via la commande standard java -jar.

Déchiffrez l'application cryptée

Commencez par exécuter le fichier jar chiffré, puis trouvez le répertoire bin du JDK ; vous devriez y trouver un fichier jshdb.

1_nsxbwNJrGJB4mpzsQv55VA

Exécutez jhsdb hsdb, ouvrez HotSpot Debugger ; si vous êtes sous Windows, vous devrez peut-être l'exécuter en tant qu'administrateur, cliquez sur Fichier pour sélectionner Attacher au processus HotSpot…

img

Sous Linux, utilisez la commande `ps aux | grep java`. Sous Windows, trouvez l'identifiant du processus (PID) via le Gestionnaire des tâches et saisissez-le dans la boîte de dialogue ci-dessous.

img

Une fois l'attachement réussi, cliquez sur Outils -> Navigateur de classes.

img

La classe Browser contient des informations sur toutes les classes chargées ; recherchez com.example et vous pourrez voir toutes les classes sous com.example.

img

Cliquez sur com.example.TestWindow @0x0000… puis cliquez sur « Créer un fichier .class ».

img

Accédez au répertoire où la commande jhsdb a été exécutée précédemment ; vous pourrez alors voir le fichier de classe généré.

img

Utiliser Luyten Ou jadx pour ouvrir le fichier de classe et vous pourrez voir le code décompilé

img