2012-03-09 20 views
9

Sto sviluppando un'applicazione che utilizza java ma non rilascerò il codice. Il problema è che ho provato uno di questi de-compilatori jar ed è stato in grado di ottenere il codice dal mio file jar quasi perfettamente! La mia domanda è: come posso distribuire il mio file jar senza che il mio codice venga estratto da esso?Come proteggere un file Jar da decompilare?

+0

Ho scoperto che il duplicato suggerito effettivamente risponde alla mia domanda. Grazie per le indicazioni. – Pouya

risposta

8

Poiché Java conserva la maggior parte dei "metadati" durante la compilazione (che consente il caricamento e la riflessione dinamici), è un semplice modo di decompilare (non solo smontare) i file di classe compilati. Ecco perché il codice recuperato è molto simile all'originale.

Anche se non è perfetto, probabilmente l'unica opzione è utilizzare un offuscatore, ad esempio ProGuard.

6

Non è possibile. Come minimo, la JVM avrà bisogno di ottenere il codice per eseguirlo. E se la JVM può ottenere il codice, chiunque può farlo.

Il meglio che puoi fare è offuscare il codice, ma lo raccomando, perché renderà molto difficile il tracciamento dei bug di produzione perché le tracce dello stack saranno difficili da seguire.

+1

Capisco che i (buoni) strumenti di offuscamento forniscano una tabella che è possibile utilizzare per tradurre l'output dello stack del runnable nelle classi e righe di codice originali. Ma sono generalmente più efficaci nel comprimere il codice, piuttosto che proteggerlo. –

2

Non è possibile proteggere il codice dallo smontaggio. Puoi usare lo strumento di offuscamento come 'proguard'. Anche dopo la decompilazione sarà quasi impossibile capire il codice.

1

Obfuscate il vostro codice utilizzando alcuni offuscatori sul mercato. Gli Obfuscator cambiano i nomi della tua classe e i suoi metodi in alcuni nomi dall'aspetto strano in modo che diventi difficile per le persone dare un senso al codice. Fai attenzione, le persone sarebbero comunque in grado di decompilare il tuo codice, ma la sola cosa è che sarebbe difficile per loro capirlo a causa dei nomi confusi.

Al contrario, sarebbe difficile per te eseguire il debug e supportare il codice offuscato nel caso in cui il tuo cliente dovesse affrontare alcuni problemi in quanto le tracce dello stack nelle eccezioni avrebbero i nomi confusi della classe e del metodo.

1

non è mai impossibile eseguire il reverse engineering in java ma penso che Proguard sia il migliore. È anche possibile integrarlo con il tuo IDE (ad esempio NetBeans). e ygard per ant