Newsgroup: it.comp.java
Titolo: Offuscatori e affidabilita'

Ho fatto una piccola applicazione con j2me e per ridurre le dimensioni del 
jar (magari anche per evitare "sguardi indiscreti") l'ho offuscata con 
Retroguard per j2me, quello integrato nel jbuilder tanto per intenderci.
Bene, la mia domanda e' semplice: ma questi offuscatori sono affidabili?
Mi spiego meglio, ad un primo sguardo sembra funzionare tutto bene, ma 
aumentando il carico di lavoro mi e' capitato un orribile freeze 
dell'applicazione... come se la jvm si fermasse di colpo e non eseguisse 
piu' alcuna istruzione ne' ricevesse piu' gli eventi da bottoni. Ho dovuto 
terminarne il relativo processo per uscirne. Ho fatto un secondo test e si 
e' verificato lo stesso fenomeno.
Pensando fosse colpa mia, ho provato ad eseguire la versione non offuscata 
(cosi' almeno in caso di errori/eccezioni/stacktrace avevo dei metodi 
leggibili per capire dove/cosa succedeva) e... colpo di scena, il freeze non 
si e' piu' verificato.
Test ripetuto, stesso risultato.
Sono quindi propenso ad accusare l'offuscatore... che evidentemente fa delle 
cose che non vengono digerite bene dalla jvm. Per cui, sbaglio io o questi 
offuscatori vanno presi con le molle?
Saluti
CarMas

 ha  
scritto:

Dipende cosa fa quello che hai usato tu.
Quelli base cambiano il nome ai metodi e alle variabili, nulla di più,  
quindi se non usi la reflecion non dovrebbero esserci problemi.
Forse, e dico forse, j2me è più delicato.
-- 
Manny Calavera
Mail To: anforagimailpuntocom²

 Bene, la mia domanda e' semplice: ma questi offuscatori sono affidabili?
Gli offuscatori in genere funzionano modificando i nomi dei references, 
dei metodi e dei tipi in modo da rendere umanamente incomprensibile il 
reverse engeneering.
Chiaramente è una operazione delicata che non sempre può essere fatta, 
talvolta va fatta in maniera mirata perchè non tutti i nomi possono 
essere cambiati (pensa ai bean, o alle classi caricate dinamicamente per 
parlare delle operazioni più comuni).
In genere affidabili sono affidabili. Bisogna vedere poi se il programma 
offuscato è ancora affidabile come prima.

CarMas ha scritto:

Ciao, io offusco regolarmente applicazioni Java ME da anni e solo una
volta ho avuto un problema sicuramente attribuibile all'offuscatore.
In quel caso utilizzavo Class.forName(..) e anche getName() di Class.
Ovviamente, essendo modificati tutti i nomi di classi, metodi e membri
la classe "com.pack.MyClass" non veniva trovata in quanto tutte le
classi avevano il nome nella forma "a.b.c", a parte la MIDlet class che
non può avere mai il nome offuscato in quanto punto di accesso
riconoscibile dell'applicazione.
Alcuni IDE (io uso Netbeans 5.5 + Mobility pack) forniscono diversi
livelli di offuscamento, proprio per cercare di venire incontro alle
diverse esigenze degli sviluppatori.
Prova ad usare un debugger con la versione offuscata della MIDlet,
sicuramente troverai il punto del blocco.
Nel caso la cosa si presenti solo sul dispositivo reale, nel caso tu
possieda un Nokia o un SonyEriccson, queste case mettono ormai a
disposizione degli SDK che prevedono il cosidetto debug-on-device.
Nel caso di Nokia il prodotto credo sia Carbide J, per SonyEriccson è
il Java ME SDK 2.2.4.
Entrambi dovrebbero essere integrabili in Netbeans ed Eclipse.
Spero ti sia d'aiuto, ciao,
Andrea C.
http://javame-cinghius.blogspot.com