Una bona manera d'aconseguir-ho és utilitzant un ofuscador de codi. N'he provat varis i el que millor m'ha funcionat i m'ha semblat més complet i útil és el ProGuard. ProGuard és un programa gratuït, realitzat per Eric Lafortune, escrit en Java (i per tant multiplataforma) que a més d'ofuscador (obfuscator) també és eliminador de codi inútil (shrinker) i optimitzador (optimizer) de codi.
Totes aquestes funcionalitats fan que un programa que s'ha "passat" pel ProGuard sigui més difícil de llegir un cop descompilat, més compacte (ocupa menys espai al disc) i més ràpid.
ProGuard, a part de poder-se utilitzar des de línia de comandes, també té una GUI. En tots dos casos es poden utilitzar fitxers de configuració.
A mode d'exemple, un programa que he fet jo i que ocupa (comprimit dins del jar) 144.480 bytes, després de passar-lo pel ProGuard s'ha quedat en 82.086 bytes. Un cop descompilat em costa molt de saber quina classe correspon a cada fitxer .class (ha canviat els noms), i si ho descobreixo em trobo que el codi està molt canviat, entre d'altres coses perquè hi ha inserit instruccions goto!
El resultat de l'optimització és el següent:
Number of inlined interfaces: 0
Number of finalized classes: 69
Number of removed write-only fields: 17
Number of finalized methods: 226
Number of privatized methods: 13
Number of staticized methods: 5
Number of simplified method declarations: 38
Number of inlined getters/setter calls: 9
Number of merged code blocks: 81
Number of simplified push instructions: 4
Number of simplified branches: 0
Number of removed instructions: 454
Number of removed push/pop pairs: 0
Number of removed load/store pairs: 0
Number of simplified store/load pairs: 154
Number of simplified goto/goto pairs: 16
Number of simplified goto/return pairs: 37
I de 85 classes ha passat a 70.
Cal tenir en compte que, a vegades, l'ús del ProGuard pot donar errors inesperats un cop s'executi el programa ofuscat/optimitzat. A la documentació del programa s'hi explica amb detall en quins casos pot passar això i diverses maneres de solucionar-ho.
I també s'ha de tenir en compte que per a aplicacions web (JSP i demés) s'ha de fer d'una certa manera no documentada que us mostraré més endavant.
-----
(1) Trobar descompiladors per java és tan senzill com cercar-ho al google.


1 comentaris:
Mira si són bona gent els que publiquen sota llicència GPL que fins i tot fan programes per tal que la gent que no publica el codi pugui protegir-lo més bé... :P
Publica un comentari