Uno Sbampato in giro per la rete .. proveniente da Platania (39°0′0″N 16°19′0″E)
Salve, anche se sono sempre a favore dell’opensource e della condivisione completa del codice sorgente dei software, voglio parlare comunque di protezione con offuscamento del codice java che a volte in ambiente enterprise e commerciale può essere utile.
Per il nostro fine abbiamo bisogno di un piccolo stralcio di codice per compilarlo e poi eseguire la procedura di reverse engineered , dopo aver visto questo in fine si procederà all’offuscamento del codice e verifica finale.
Creiamo un piccolo programmino java chiamato Hello.java
public class Hello {
public static void main(String[] args) {
System.out.println("Hello World!"); }
}
Ora compiliamo il file Hello.java e poi lo eseguiamo :
$ javac Hello.java $ java HelloWorld Hello World!
Ora se apriamo con un editor tipo vi il file compilato ed eseguito come si può benissimo vedere il codice è in bytecode e con una semplice procedura di reverse engineered possiamo visualizzare il sorgente!
Êþº¾^@^@^@2^@"^G^@^B^A^@^EHello^G^@^D^A^@^Pjava/ lan/Object^A^@^F<init>^A^@^C()V^A^@^DCode^@^ Table^A^@^RLocalVariableTable^A^@^Dthis^A^@ ^GLHello;^A^@^Dmain^A^^@^Q^@^S^G^@^
Per il reverse engineered utilizziamo Jad decompiler o un decompilatore qualsiasi per java.
Io ho scaricato per esempio Jad in formatto compresso lo decomprimo ed eseguo il reverse del codice.
$ unzip jadls158.zip $ ./jad Hello.class Parsing Hello.class... Generating Hello.jad $ vi HelloWorld.jad
Con l’ultimo passaggio possiamo benissimo vedere che il nostro codice è effettivamente visualizzabile, ma se noi non volessimo farlo visualizzare (o copiare senza autorizzazione!?)
Per fare questo utilizzeremo ProGuard un software free e rilasciato sotto licenza GPL licensed. Per scaricarlo andate su Download o direttamente dal link http://sourceforge.net/projects/proguard/files/
dopo di che decomprimiamo il file
$ unzip proguard4.5beta2.zip
per utilizzare ProGuard dobbiamo effettuare una piccola configurazione al file myconfig.pro
–injar : Specificare la locazione del file .jar da offuscare.
–outjar: Il file .jar offuscato da proguard che sarà immune al reverse engineer.
–printmapping: Output di ProGuard sulla mappatura dei file.
–keep: Con questa variabile possiamo indicare le classi o i metodi da isolare dall’offuscazione.
per esempio :
$ cat myconfig.pro -injars /home/user/myapp.jar -outjars /home/user/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
Per eseguire ProGuard lanciamo ad esempio:
$ cd /home/user/proguard4.5beta2/lib $ java -jar proguard.jar @myconfig.pro
dopo di che diamo un occhiata al file mapping per verificare ad esempio la nuova ridenominazione dei metodi all’interno dei nostri file offuscati.
nel nostro file proguard.map troviamo per esempio:
myapp.AppToolBar -> myapp.ae: javax.swing.JButton btnNew -> d
Nel nostro file sorgente originale infatti questo pezzo di codice un semplice oggetto button prima era:
btnNew = changeButtonLabel(btnNew, language.getText("new"));
dopo la procedura di offuscamento proguard lo tramuta in :
d = a(d, n.a("new"));
Praticamente ProGuard effettua una “semplice” ridenominazione del codice rendendolo non comprensibile e non eseguibile qualora venga trattato con tecniche di reverse engineered non potrà comunque essere usato !
Via | thegeekstuff
Blog personale di Antonio Di Cello (Rafanto) .. informazioni,suggerimenti e curiosità sul mondo Linux, Maemo e OpenSource
1 Response to Reverse Engineered e Offuscamento del codice Java
simone
gennaio 14th, 2010 at 12:19
ottimo antò! buono a sapersi per il futuro!