Sì, i file di classe Java sono facili da decodificare. Il formato è molto regolare e molto limitato: la VM deve essere in grado di verificare che il codice sia conforme alle forti regole di digitazione del codice Java. Questo è come l'output di un compilatore C con tutte le ottimizzazioni disattivate: la struttura del programma è chiaramente visibile. (Nel modello Java, l'ottimizzazione avviene nella VM stessa, quando viene eseguito il compilatore JIT.)
Le persone cercano comunque l'offuscamento; per esempio. con ProGuard (ci sono molti strumenti su quel mercato, questo è gratuito e opensource). Ad esempio, tutte le classi e i metodi sono rinominati con stringhe che non hanno senso per un umano (ma l'offuscamento produce anche un file di traduzione che lo sviluppatore tiene per sé, in modo che possa interpretare le tracce dello stack in caso di segnalazioni di bug). / p>
In alternativa, potresti elaborare il tuo codice Java in un compilatore Ahead-of-Time , come JET . Questo ha alcune restrizioni (in particolare, il risultato non è più "portatile" dal momento che è un codice nativo), ma rende la decompilazione più difficile (vicino alla complessità del reverse engineering compilato C o C ++).
Di norma, il reverse engineering tende a funzionare, e per Java ancora di più, anche dopo l'offuscamento. Faresti meglio a non usare l'offuscamento come fondamento della tua sicurezza.
Vale anche la pena notare che questo è molto simile ai problemi di lettura del codice in qualsiasi linguaggio .Net come C #. È ugualmente banale generare codice Java, VB.Net o C # dai file distribuiti e le tecniche di offuscamento che cercano di rendere più difficile la lettura sono simili per entrambi.