Technology Convertire un jar in exe

Ciao amici carissimi,ho un super progetto in java e vorrei convertire il jar risultante dalla compilazione in un .exe.

Ho provato un paio di programmi (jstart32 che non è altro che un collegamento ma non wrappa il jar e launch4j che wrappa il .jar ma con un "estrai qui" di winrar mi tira fuori tutte le classi del programma ed è utile quanto un buco del culo sul gomito)


Non essendo un programma "free" nè open source la necessità è che il file risultante .exe non sia estraibile,nè deve essere possibile visualizzarne il contenuto in nessun modo

conoscete qualcosina? grazie <3
 

Il Droide

Spam Master
Un .jar non può essere convertibile in un .exe, per il semplice motivo che il .jar è un archivio di file (normalmente .class se non includi anche i sorgenti) che viene poi decompresso dalla macchina virtuale java che esegue i bytecode dei .class.
Hai due soluzioni:
* o ti fai un .bat che non fa altro che chiamare "java -jar nomepacchetto.jar NomeClasseDoveCiStaIlMain"
* o ti fai un .exe (in C ad esempio) che spawna la JVM con il comando Java e te lo compili tipo con mingw32 o msvc, un esempio banalissimo:

Codice:
int main() {
 return execve({"C:\", "java", "-jar nomepacchetto.jar", "NomeClasseDoveCiStaIlMain"});
}


Io personalmente opterei per la prima.


Scusa, dimenticavo la terza opzione che consiste nel rendere il .jar eseguibile direttamente, tramite regole nel file MANIFEST. Non so di preciso come si faccia ma so per certo che è sconsigliato nella documentazione ufficiale Java, più che altro perché dalle prossime versioni toglieranno questa cosa per il fatto che è facilmente exploitabile.



Aggiungo, FYI, se per caso scegli la seconda opzione e vuoi anche attaccare un'icona all'eseguibile compilato, ti crei un file .rc simile a questo https://github.com/massix/Sensitive/blo ... sources.rc, lo compili con winres (è nella cartella di visualstudio o in quella di mingw) e poi lo linki assieme agli oggetti nell'exe finale.

Ovviamente in tutti e tre i casi dal .jar puoi tranquillamente togliere i .java, bastano i .class che rispettino la gerarchia dei packages.
 
Alla fine ho beccato un programma che non solo me l'ha convertito,ha pure criptato il jar per fare in modo che non sia possibile recueprare i sorgenti!
 

Il Droide

Spam Master
Continuo a ripetere che nel jar non ci vanno i .java ma solo i .class (che sono file binari). Togli i .java se li hai messi, appesantiscono solo il .jar finale e non ti danno garanzia che il programma che hai usato non utilizzi un hash bucabile.
 

Reflex86

Typing Monkey
Quando mi è servito farlo ho usato un .bat per lanciare il jar (in questo modo puoi facilmente passare comandi alla VM), dopodichè con BatToExe ho creato un .exe che lanciasse il bat in modalità nascosta. L'utente non si accorge di nulla e lancia l'exe.

Il bat o lo nascondi nella cartella di installazione o semplicemente lo lasci come debug e gli fai stampare qualcosa di utile a video
 
Alto