GNU/Linux >> Linux Esercitazione >  >> Linux

Proteggi il tuo codice Java dal reverse engineering

Se stai sviluppando un'applicazione java, è importante capire che i file di classe java possono essere facilmente decodificati utilizzando i decompilatori java. In questo articolo, esploriamo come viene decodificato un file di classe java e come proteggere il codice sorgente dall'ingegnerizzazione inversa da parte di qualcuno.

Il codice sorgente java viene compilato in un file di classe che contiene codice byte. Java Virtual Machine richiede solo il file di classe per l'esecuzione. Il problema è che il file di classe può essere facilmente decompilato nel codice sorgente originale utilizzando gli strumenti di decompilatore java. La soluzione migliore per prevenire il reverse engineering è offuscare il file di classe in modo che sia molto difficile da decodificare. Secondo il dizionario Offuscare significa “rendere oscuro o poco chiaro”. Questo è esattamente ciò che faranno molti strumenti java obfuscator, come spiegato di seguito.

Io. Decompilare il file di classe Java.

Prima di capire come offuscare il codice java, cerchiamo prima di capire come qualcuno può decodificare la tua applicazione java. I seguenti 3 passaggi spiegano come un file di classe viene decodificato sul codice sorgente java originale.

1. Crea HelloWorld.java come mostrato di seguito.

public class HelloWorld {
    public static void main (String args[]) {
        String userMessage = "Hello World!";
        int userCount = 100;
        userCount = userCount + 1;
        System.out.println(userMessage);
        System.out.println(userCount);
    }
}

2. Compila HelloWorld.java programma ed eseguilo per assicurarti che funzioni correttamente.

$ javac HelloWorld.java
$ java HelloWorld
Hello World!
101

Il file di classe Java contiene solo byte code. Se provi a visualizzare un file di classe, non sarà leggibile come mostrato di seguito.

$ vi HelloWorld.class
Ãþº¾^@^@^@2^@
^@^G^@^P^H^@^Q  ^@^R^@^S
^@^T^@^V^G^@^W^G^@^X^A^@^F<init>^A^@^C()V^A^@^DCode^A^@^OLineNumberTable
^A^@^Dmain^A^@^V([Ljava/lang/String;)V^A^@
SourceFile^A^@^OHelloWorld.java^L^@^H^@ ^A^@^LHello World!^G^@^Y^L^@^Z^@^[^G^@^\^L^@^]^@^^^L^@^]^@^_^A^@
HelloWorld^A^@^Pjava/lang/Object^A^@^Pjava/lang/System^A^@^Cout^A^@^ULjava/io/PrintStream;^A
^@^Sjava/io/PrintStream^A^@^Gprintln^A^@^U(Ljava/lang/String;)V^A^@^D(I)V^@!^@^F^@^G^@^@^@^@^@^B^@^A^@^H^@  ^@^A^@

3. Decompila HelloWorld.class archiviare e visualizzare la fonte originale.

Per questa dimostrazione usiamo il decompilatore Jad che è gratuito per uso non commerciale. Scarica il jad appropriato per la tua piattaforma. Usa jad per decodificare il file HelloWorld.class per ottenere il sorgente originale come mostrato di seguito.

$ unzip jadls158.zip
$ ./jad HelloWorld.class
Parsing HelloWorld.class...
Generating HelloWorld.jad
$ vi HelloWorld.jad <This will show the reverse engineered original source code>

II. Offusca la tua applicazione java

Esaminiamo come offuscare e proteggere il codice sorgente dal reverse engineering utilizzando ProGuard, un software gratuito con licenza GPL.

1. Scarica e installa ProGuard

$ cd /home/jsmith
$ unzip proguard4.2.zip

2. Crea un file di configurazione proguard

Crea myconfig.pro che contiene tutte le informazioni sulla tua applicazione java.

  • -injar :Specifica la posizione del tuo file jar. cioè l'applicazione java compilata che contiene i file di classe
  • -outjar:questo è il file jar che proguard creerà dopo l'offuscamento. Questo conterrà tutte le convenzioni di denominazione alterate e oscure dei metodi e delle variabili nel file di classe se qualcuno tenta di eseguire il reverse engineering.
  • -printmapping:ProGurad emette tutte le informazioni di mappatura in questo file come riferimento.
  • -keep:indica i file di classe o i metodi che non vuoi offuscare da ProGuard. Per es. mypkg.MainAppFrame contiene il punto di ingresso per l'applicazione con la classe main, che non verrà offuscata in questo esempio.
$ cat myconfig.pro
-injars /home/jsmith/myapp.jar
-outjars /home/jsmith/myapp-obfuscated.jar This is the obfuscated jar file
-libraryjars /usr/java/jdk1.5.0_14/jre/lib/rt.jar
-printmapping proguard.map
-verbose
-keep public class mypkg.MainAppFrame

3. Esegui ProGuard.

$ cd /home/jsmith/proguard4.2/lib
$ java -jar proguard.jar @myconfig.pro

Questo crea i seguenti due file:

  • myapp-obfuscated.jar:contiene i file di classe offuscati della tua applicazione. Puoi distribuirlo senza doverti preoccupare di qualcuno che decodifica facilmente la tua applicazione.
  • proguard.map:questo file contiene le informazioni sulla mappatura come riferimento.

4. Esempio di file proguard.map

Questo è un file proguard.map di esempio che indica il nome originale degli oggetti sorgente java (classfile, metodi, variabile ecc.) e il nuovo nome offuscato.

myapp.AppToolBar -> myapp.ae:
javax.swing.JButton btnNew -> d
javax.swing.JButton btnOpen -> e

5. Esempio di codice sorgente java (myapp.AppToolBar) prima dell'offuscamento.

btnNew = changeButtonLabel(btnNew, language.getText("new"));
btnOpen = changeButtonLabel(btnOpen, language.getText("open"));

6. Esempio di codice sorgente java che è stato decompilato dal file di classe (myapp.ae) dopo l'offuscamento.

d = a(d, n.a("new"));
e = a(e, n.a("open"));

Puoi vedere che la riga "btnNew =changeButtonLabel(btnNew, language.getText("new")); ” è stato tradotto in “d =a(d, n.a(“new”));", da ProGuard, che non avrà alcun senso per qualcuno che sta usando strumenti di decompilatore Java per decodificare il file di classe.

Aiutami a diffondere le notizie su The Geek Stuff.

Si prega di lasciare i vostri commenti e feedback su questo articolo. Se ti piace questo post, ti sarei davvero grato se potessi spargere la voce sul blog "The Geek Stuff" aggiungendolo a del.icio.us o Digg tramite il link qui sotto.


Linux
  1. Installa Java dai repository della tua distribuzione Linux

  2. Conversione del codice Python 2 in Python 3

  3. 12 semplici strumenti per proteggere la tua privacy

  4. Trova il numero di righe di codice dal repository GitHub

  5. come ottenere il percorso relativo della directory corrente in Tomcat dall'ambiente Linux usando java

Nozioni di base sulla compilazione di software dal codice sorgente in Linux

Wpm – Misura la tua velocità di digitazione dal terminale

Usa Prey per proteggere il tuo laptop Ubuntu Linux dal furto

Scegliere il gusto del tuo server cloud

Come installare il software dal codice sorgente nel tuo sistema Linux

Come gestire LinkageErrors in Java?