Problemi con la crittografia dei file di classe Java

Oltre all'offuscamento, la crittografia dei file di classe è un metodo di protezione del codice facilmente concepibile. Molti schemi utilizzano agenti per crittografare i file di classe e decrittografarli durante il caricamento della classe. Tuttavia, questi schemi trascurano un punto importante, il meccanismo di collegamento integrato nella JVM.

Meccanismo di allegato JVM

Per facilitare l'analisi e il monitoraggio del funzionamento del programma, le JVM ordinarie sono dotate di allegati. Gli utenti possono utilizzare strumenti come jhsdb per collegarsi al processo JVM, visualizzare e analizzare i suoi dati di memoria. Inoltre, questi dati di memoria sono organizzati correttamente in base alla struttura dei dati nel file sorgente, che può anche essere inteso come un meccanismo backdoor integrato di JVM.

Il seguente articolo illustra come utilizzare il meccanismo di collegamento JVM per leggere e salvare le informazioni sui file di classe in memoria.

https://protector4j.com/articles/cracking-encrypted-java-applications-jhsdb/

Oltre a utilizzare lo strumento jhsdb fornito da JDK, puoi anche utilizzare Arthas di Alibaba per analizzare i processi Java in esecuzione.

Alcuni metodi di protezione caricano dinamicamente le informazioni sulla classe tramite la riflessione e questo approccio può essere utilizzato anche per ottenere informazioni sulla classe caricata in tempo reale tramite l'inserimento di DLL. Per maggiori dettagli si rimanda ai due progetti seguenti.

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

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

Conclusione

A causa dell'esistenza del meccanismo di collegamento JVM o del meccanismo HOOK binario, tutti i cosiddetti codici crittografati che non sono stati staccati dal normale funzionamento della JVM possono essere facilmente letti utilizzando gli strumenti di collegamento o agganciati tramite l'iniezione DLL. Pertanto, questa è la soluzione di protezione più inefficace.