Reverse Engineered e Offuscamento del codice Java

In: How-To & Guide| Informatica| development

13 gen 2010

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ò benis­simo vedere  il codice è in bytecode e con una semplice procedura di reverse engineered pos­siamo 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 pas­saggio pos­siamo benis­simo vedere che il nostro codice è effettivamente visualizzabile, ma se noi non voles­simo 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 pos­siamo 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

Share and Enjoy:
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • Add to favorites
  • Diggita
  • email
  • FriendFeed
  • HackerNews
  • Identi.ca
  • LinkedIn
  • Live
  • MySpace
  • Netvibes
  • NewsVine
  • PDF
  • Ping.fm
  • Reddit
  • RSS
  • Segnalo
  • StumbleUpon
  • Technorati
  • Twitter
  • Upnews
  • Wikio
  • Wikio IT
  • Yahoo! Buzz

1 Response to Reverse Engineered e Offuscamento del codice Java

Avatar

simone

gennaio 14th, 2010 at 12:19

ottimo antò! buono a sapersi per il futuro!

Comment Form

About this blog

Blog personale di Antonio Di Cello (Rafanto) .. informazioni,suggerimenti e curiosità sul mondo Linux, Maemo e OpenSource

My Network


Blog Flickr Last.fm LinkedIn YouTube delicious slideshare googletalk vimeo Friendfeed Facebook

Twitter Feed

Facebook Fan

rafanto.net on Facebook

Spot

Supporta Rafanto.net

Spot