2009-08-14 12 views
9

Sto lavorando a un'applicazione che distribuirò presto pubblicamente. Mi piacerebbe fare qualsiasi cosa in mio potere per assicurarmi che chi scarica il mio programma non lo decodifichi. Capisco che la distribuzione di un file .jar sia altamente insicura.Protezione del jar Java File per la distribuzione

Qualcuno può consigliare un modo indipendente dalla piattaforma per distribuire la mia applicazione Java? Inoltre, mi piacerebbe installarlo come servizio su qualsiasi piattaforma (Windows, Linux, Mac OSX).

Grazie!

risposta

8

È possibile rimescolare/offuscare il bytecode con yGuard o altri java-bytecode-obfuscators.

La distribuzione indipendente del sistema operativo può essere difficile. IMHO la soluzione migliore è un normale archivio contenente diversi script (.bat/.cmd per windows, .sh per linux/OSX) per l'avvio del programma nei sistemi operativi supportati dal programma.

L'esecuzione di un programma java come servizio può essere ancora più difficile: è facile con Linux, dove è sufficiente scrivere uno script di avvio corretto per eseguirlo in background. So che FireDaemon ha problemi nell'esecuzione di programmi java come servizio, quindi potrebbe essere difficile (o impossibile) eseguirlo come servizio su Windows. Scusa, ma non ho idea di MacOS X. Potrebbe essere facile come Linux, potrebbe essere impossibile quanto Windows.

+0

L'offuscamento è la strada da percorrere. – Carnell

2

Avete considerato l'utilizzo di un compilatore di codice nativo come GCJ? Non è indipendente dalla piattaforma (dovresti compilarne uno per ogni piattaforma di destinazione), ma non vedo come puoi distribuire il bytecode indipendente dalla piattaforma e nascondere quel codice bytecode dai tuoi utenti finali.

1

puoi offuscarlo. Renderà più difficile il reverse engineering del tuo programma. Inoltre, penso che sia possibile rendere eseguibili i file di classe (ad esempio .exe per Windows)

EDIT: per essere onesti, se la sicurezza dell'applicazione è così importante, è meglio evitare java del tutto. È possibile utilizzare il compilatore gcc per C++ per esempio (che è più o meno indipendente dalla piattaforma finché non si effettuano chiamate di sistema). Hai solo bisogno di compilarlo sulle diverse macchine host (che è qualcosa che la tua domanda originale indica come tua necessità ma su java).

C'è anche qt, ma non l'ho provato io stesso.

+0

È possibile creare eseguibili, ma tutto ciò che si sta facendo è l'ebedding di una macchina virtuale. –

+0

Difficile, ma non impossibile. –

2

È possibile crittografare il jar, ma è necessario scrivere un caricatore di classe personalizzato per caricare il contenuto del jar. Questo non è ancora sicuro al 100% - il semplice fatto è che nulla che puoi fare renderà il tuo codice sicuro al 100% se è mirato. Vedi questa discussione qui.

How to create encrypted Jar file?

+1

Il problema con i file JAR crittografati è che è necessario fornire un codice per decodificare i file per l'esecuzione. Tale codice può essere decodificato per determinare la chiave/l'algoritmo di decrittografia. –

+1

@Stephen: accetta il 100%. Non c'è dubbio che questo metodo sia solo come un lucchetto - fatto per mantenere onesto un uomo onesto. Chiunque voglia fare qualsiasi sforzo per ottenere la fonte da un barattolo può farlo. Dopo tutto, una volta decodificato, può essere letto dalla memoria. –

3

L'esecuzione dell'applicazione tramite un offuscatore rende il reverse engineering più difficile e costoso.

Date un'occhiata al Java Service Wrapper di un modo relativamente facile da installare ed eseguire l'applicazione Java come un servizio su più piattaforme.

2

Come altri hanno già detto, puoi offuscare il tuo codice. Ciò renderà il reverse engineering non banale. È anche possibile compilare il codice Java in codice nativo usando (per esempio) GCJ. Ciò renderà più difficile l'ingegneria inversa, ma vorrà anche creare diversi pacchetti di distribuzione per ogni piattaforma hardware/OS supportata.

Ma in ultima analisi, si deve riconoscere che, se si distribuisce il software per funzionare su una piattaforma di magazzino, non c'è nulla di tecnica che si può fare per prevenire il reverse engineering. Niente.

In definitiva, è necessario scambiare i vantaggi della distribuzione del software rispetto ai rischi di una sua progettazione inversa. Un approccio che le persone adottano è quello di capire se i benefici superano i costi * dei rischi e utilizzare le garanzie legali (ad esempio licenze software appropriate) per scoraggiare il reverse engineering. L'altro approccio è dire "buona fortuna a te" ai potenziali ingegneri inversione e guadagnare denaro offrendo servizi piuttosto che licenze software.

1

oppure puoi fare quello che ho fatto. front-end java con alcune funzioni di backend scritte in C++ compilate in una DLL chiamata tramite JNI. La GUI front-end è completamente portatile con un grint backend nativo.

Problemi correlati