I problemi con l'offuscamento del codice
L'offuscamento del codice è la prima soluzione applicata alla protezione del codice Java ed è anche la più diretta.
L'offuscamento del codice in genere prevede i seguenti quattro metodi:
- Conversione del nome del pacchetto, nome della classe, nome della variabile
- Le strutture di controllo cambiano, ad esempio appiattimento del flusso di controllo, aggiunta di predicati immutabili, ecc.
- Offuscamento o crittografia delle stringhe
- Aggiungi codice inutile
L'offuscamento del codice può ridurre significativamente la leggibilità del codice decompilato e aumentare la difficoltà dell'analisi statica, ma indipendentemente da come viene eseguito l'offuscamento del codice, la logica di esecuzione del programma non verrà alterata.
Il bytecode JVM è un codice intermedio semantico molto chiaro ed esplicito, altamente leggibile. Per i file di classe offuscati, anche se non possono essere ripristinati in codice sorgente Java leggibile, è comunque possibile analizzarli a livello di bytecode. Grazie all'elevata semantica del bytecode Java, questo processo è in realtà relativamente semplice.
Abbiamo sviluppato un motore di esecuzione bytecode JVM utilizzando i linguaggi Java e Kotlin. Gli utenti possono utilizzare questo progetto per eseguire il debug dinamico di programmi Java a livello di bytecode in IntelliJ IDEA. Per ulteriori informazioni, consultare l'articolo seguente.
https://protector4j.com/articles/jvm-bytecode-engine-written-with-java-and-kotlin/
E utilizziamo questo motore per tentare di decifrare un codice offuscato ben noto, il processo specifico può essere consultato nel seguente articolo
http://protector4j.com/articles/deobfuscate-with-vlx-vmengine/
Conclusione
Dall'analisi precedente, si può osservare che, grazie all'elevata semantica del bytecode JVM, è molto facile da analizzare e leggere. La logica di esecuzione può essere facilmente analizzata tramite il debug dinamico. Scrivere strumenti di debug dinamico non è un compito molto complesso, quindi l'offuscamento non è una soluzione di protezione affidabile.