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:

  1. Conversione del nome del pacchetto, nome della classe, nome della variabile
  2. Le strutture di controllo cambiano, ad esempio appiattimento del flusso di controllo, aggiunta di predicati immutabili, ecc.
  3. Offuscamento o crittografia delle stringhe
  4. 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.