I problemi con l'oscuramento del codice
L'offuscamento del codice è la prima soluzione applicata alla protezione del codice Java ed è anche la soluzione più diretta.
L'oscuramento del codice di solito coinvolge i seguenti quattro metodi:
- Conversione del nome del pacchetto, del nome della classe, del nome della variabile
- Cambiano le strutture di controllo, come l'appiattimento del flusso di controllo, l'aggiunta di predicati immutabili, ecc.
- Oscuramento o crittografia di 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 che è altamente leggibile. Per i file di classe offuscati, anche se non possono essere ripristinati in codice sorgente Java leggibile, possono comunque essere analizzati a livello di bytecode. A causa dell'elevata natura semantica del bytecode Java, questo processo è in realtà relativamente semplice.
Abbiamo sviluppato un motore di esecuzione del bytecode JVM utilizzando i linguaggi Java e Kotlin. Gli utenti possono utilizzare questo progetto per eseguire il debug dinamico dei programmi Java a livello di bytecode in IntelliJ IDEA. Per ulteriori informazioni, fare riferimento all'articolo seguente.
https://protector4j.com/articles/jvm-bytecode-engine-scripted-with-java-and-kotlin/
E usiamo questo motore per cercare di decifrare un codice oscurato ben noto, il processo specifico può essere consultato nell'articolo seguente
http://protector4j.com/articles/deobfuscate-with-vlx-vmengine/
Conclusione
Dall'analisi di cui sopra, si può vedere che, a causa dell'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.