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 impiegano agenti per crittografare i file di classe e decrittografarli durante il caricamento delle classi. Tuttavia, questi schemi trascurano un aspetto importante: il meccanismo di collegamento integrato nella JVM.

Meccanismo di collegamento JVM

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

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

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

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

Alcuni metodi di protezione caricano dinamicamente le informazioni sulle classi tramite riflessione; questo approccio può essere utilizzato anche per ottenere informazioni sulle classi caricate in tempo reale tramite iniezione di DLL. Per maggiori dettagli, fare riferimento ai due progetti seguenti.

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

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

Conclusione

Grazie all'esistenza del meccanismo di collegamento JVM o del meccanismo HOOK binario, tutti i cosiddetti codici crittografati che non sono stati scollegati dal normale funzionamento della JVM possono essere facilmente letti utilizzando strumenti di collegamento o agganciati tramite iniezione di DLL. Pertanto, questa è la soluzione di protezione meno efficace.