Newsgroup: it.comp.java
Titolo: Offuscatori

Ciao a tutti,
avrei bisogno di proteggere il più possibile il codice frutto del mio
lavoro, così vi chiedo: quale ritenete essere il miglior offuscatore?
E' possibile integrarlo in Eclipse e/o Netbeans?
Inoltre, vorrei sapere se e come poter offuscare il codice delle
applicazioni web.
Grazie mille per il vostro aiuto, ciao
Carmelo


Cioé ? Dal bytecode si puo ricostruire il sorgente ?
Allora lo voglio anche io un offuscatore ... anzi un criptatore di
bytecode ...
Esiste ?

 applicazioni web.
gli offuscatori possono funzionare su più livelli, ma per lo più il loro 
lavoro consiste nel modificare nel compilato i nomi dei tipi, metodi e 
proprietà, dandogli nomi incomprensibili e ovviamente risolvendo tutti i 
riferimenti.
finchè si tratta di un programma standalone, compatto, senza elementi 
dichiarativi esterni, va bene. per una applicazione web (o j2ee in 
generale) imho è ingestibile.
-- 
++ Fino all'anno scorso avevo un solo difetto. Ero presuntuoso.
http://unopuntozero.wordpress.com/
http://www.flickr.com/photos/marko_po/

 generale) imho è ingestibile.
Confermate che per applicazioni web non è possibile utilizzare
offuscatori?
In generale, quale considerate essere il miglior offuscatore?
Grazie

Ciao,
   in generale puoi usare gli offuscatori in qualunque ambito, ma
ovviamente con le dovute precauzioni.
Come ti ha detto rootkit, questi programmi modificano nomi di tipi,
metodi, proprietà, ecc. Per cui laddove un nome di metodo, ad esempio,
deve essere lasciato così com'è, come accade per esempio in una
libreria (che altrimenti diviene inutilizzabile), e per un servlet,
per cui occorre preservare almeno i nomi dei metodi doPost(), doGet(),
service(), e in generale i nomi dei metodi pubblici previsti dalla sua
interfaccia, occorre impostare direttive che preservino i nomi,
eventualmente offuscando solo il corpo dei metodi.
Un altra situazione da gestire in maniera accorta riguarda oggetti
serializzabili, per cui le operazioni di serializzazione/de-
serializzazione possono fallire a seguito di un'offuscazione.
Un altro utilizzo di questi programmi è la compattazione del bytecode,
con tecniche che prevedono anche l'eliminazione di metodi o classi in
realtà non utilizzati, o la rimozione delle informazioni di debug che
vengono invece salvate se un'applicazione viene compilata con
l'opzione di salvataggio di tali informazioni (in genere si salvano
tali informazioni per questioni di debug, togliendole, gli stacktrace
perdono informazione utile ad individuare un bug, ma il bytecode si
riduce in dimensione) per cui ti ritrovi come risultato un pacchetto
di dimensione inferiore ('shrinked').
Avere un pacchetto di dimensione inferiore, in tempi di banda
'stretta' significava ad esempio ridurre il tempo di scaricamento di
un'applet. Oggi un ambito in cui questa esigenza continua a farsi
sentire è nello sviluppo di applicazioni per dispositivi mobili
JavaME: a riprova di questo fatto, molti dei principali IDE hanno
wizard di preparazione di questi pacchetti che permettono di
effettuare contestualmente anche l'offuscazione, ottenendo così un
pacchetto che richiede meno spazio.
Venendo ai prodotti, ce ne sono diversi in circolazione. In passato
l'azienda per cui lavoravo aveva necessità di offuscare il codice e
utilizzavamo Zelyx (
http://www.zelix.com/klassmaster/index.html
?
id=010) e successivamente retroguard (
http://www.retrologic.com/
), che
sono due software commerciali.
Da qualche anno è in circolazione anche un prodotto open-source,
http://proguard.sourceforge.net/
, che sembra essere molto valido:
oltretutto nella sua homepage sono descritti anche tutti gli usi,
senza limitarsi alla sola offuscazione del codice a scopo di
protezione del proprio lavoro.
Non so dirti molto di più perché in generale al lavoro non utilizziamo
più questi prodotti.
Ciao
Daniele
Per EDP: è da sempre possibile decompilare il bytecode, e in giro ci
sono strumenti commerciali o opensource per farlo. JAD esiste da un
pezzo: 
http://www.kpdus.com/jad.html

 senza limitarsi alla sola offuscazione del codice a scopo di
Ho provato qualche volta ProGuard, pensi quindi che sia buono?
Permette di proteggere in modo efficace il codice?

Purtroppo non uso più questi strumenti da qualche anno. Di Proguard mi
fido perché mi sembra un progetto open-source molto attivo, e questo
puoi considerarlo come un indizio di qualità.
Secondo me, per fare una valutazione, provalo con varie tipologie di
software sviluppato: librerie, applicazioni stand-alone e applicazioni
web. Se, dopo il trattamento di offuscazione le cose continuano a
funzionare, hai risolto il primo problema, quello di non distruggere
il codice rendendolo ineseguibile (una libreria offuscata, ad esempio,
può non essere più utilizzata perché hai offuscato metodi pubblici e/o
oggetti serializzabili in maniera da non essere più utilizzabili
dall'esterno).
Fatto questo, decompilati il codice offuscato: se ritieni che quello
che hai davanti agli occhi è sufficientemente incomprensibile, puoi
ritenerti soddisfatto.
Mi rendo conto che è un procedimento manuale che con grosse moli di
software non è praticabile, ma magari non è necessario nascondere
tutto: puoi offuscare solo le parti che ritieni critiche, e in questo
modo riduci la mole di lavoro di offuscazione e di controllo
successivo.
Questo era il modo in cui procedevo, quando usavo zeliyx e retroguard.
Ciao
Daniele