Offuscare il file .war di un'applicazione Spring Boot

di il
3 risposte

Offuscare il file .war di un'applicazione Spring Boot

In passato avevo letto che esistevano dei metodi per offuscare il contenuto dei file .jar, non rendere il codice illeggibile ma difficile da leggere. Esiste qualcosa di analogo per i file .war?
Googlando ho trovato questa dipendenza:

		<!-- Dipendenza per offuscare il file .war -->
		<dependency>
			<groupId>com.github.wvengen</groupId>
			<artifactId>proguard-maven-plugin</artifactId>
			<version>2.5.3</version>
		</dependency>
Ho provato ad aggiungerla al mio progetto ma non ho notato nulla di diverso, i nomi delle mie classi non sono neppure cambiate.

3 Risposte

  • Re: Offuscare il file .war di un'applicazione Spring Boot

    iBaffiPro ha scritto:


    Ho provato ad aggiungerla al mio progetto ma non ho notato nulla di diverso, i nomi delle mie classi non sono neppure cambiate.
    Innanzitutto proguard-maven-plugin è un plugin ... NON una comune "dipendenza"!
    Quindi per cominciare va messo come <plugin> dentro <plugins>. E poi va configurato il plugin per agganciare il suo goal "proguard" alla fase di "package".

    La documentazione è sul sito del progetto: https://wvengen.github.io/proguard-maven-plugin
    E quanto sopra è ben descritto con esempi.

    E inoltre, scusa, COME intenderesti verificare il risultato? Si deve "disassemblare" il bytecode dei file .class. Lo si fa con il tool javap del JDK oppure a seconda del IDE ci può essere una opzione per vedere il bytecode. L'offuscamento comunque in ogni caso NON tocca MAI i sorgenti java.

    E il concetto di offuscamento comunque non può offuscare "tutto". Ci sono aspetti ovviamente da approfondire, in quanto NON deve offuscare tutto. Per darti la idea: pensa se avessi una classe javabean (campi e getter/setter basilari) con un metodo getNome(), se in un template Thymeleaf hai th:value="${utente.nome}" e Proguard ti offusca il getNome ... non ti funzionerebbe più!!

    Scusa ma davvero ti stai addentrando in questi meandri senza avere nozioni utili e senza aver letto uno straccio di documentazione??
  • Re: Offuscare il file .war di un'applicazione Spring Boot

    In merito al metodo con cui ProGuard offusca il codice non mi addentro ma resta il fatto che se la libreria funziona deve saper gestire la presenza di Thymeleaf.
    Ho provato ad aggiungere nelle dipendenze questo:
    
    		<!-- https://mvnrepository.com/artifact/com.guardsquare/proguard-base -->
    		<dependency>
    			<groupId>com.guardsquare</groupId>
    			<artifactId>proguard-base</artifactId>
    			<version>7.2.1</version>
    			<scope>runtime</scope>
    		</dependency>
    
    		<!-- https://mvnrepository.com/artifact/com.guardsquare/proguard-core -->
    		<dependency>
    			<groupId>com.guardsquare</groupId>
    			<artifactId>proguard-core</artifactId>
    			<version>8.0.7</version>
    		</dependency>
    
    e nei plugin questo:
    
    				<plugin>
    					<groupId>com.github.wvengen</groupId>
    					<artifactId>proguard-maven-plugin</artifactId>
    					<version>2.5.3</version>
    					<executions>
    						<execution>
    							<phase>package</phase>
    							<goals><goal>proguard</goal></goals>
    							<configuration>
    								<injar>${project.build.finalName}.war</injar>
    								<outjar>${project.build.finalName}-small.war</outjar>
    								<proguardVersion>7.2.1</proguardVersion>
    								<options>
    									<option>-allowaccessmodification</option>
    									<option>-dontoptimize</option>
    									<option>-dontshrink</option>
    									<option>-dontnote</option>
    									<option>-dontwarn</option> <!-- added option to ignore com.sun missing classes -->
    									<option>-keepattributes Signature</option>
    								</options>
    								<libs>
    									<lib>${java.home}/lib/jrt-fs.jar</lib>
    								</libs>
    							</configuration>
    						</execution>
    					</executions>
    				</plugin>
    
    ma non pruduce un bel niente. Credo che il problema sia qui:
    
    <lib>${java.home}/lib/jrt-fs.jar</lib>
    
    ovvero ProGuard non sia compatibile con Java 11 ma se non è compatibile con Java 11 sicuramente non sarà compatibile con Java 17 e Spring Boot 3.0 e comunque non mi va di essere limitato nell'uso delle versioni del Framework/JDK. Inoltre la configurazione del plugin non è agevole e nelle versioni future di ProGuard il codice sarà comunque da modificare.
    Non esiste qualche software che accetta in pasto un .war e lo offusca? Il passaggio sarà leggermente più complicato ma almeno mi tolgo molte rogne.
  • Re: Offuscare il file .war di un'applicazione Spring Boot

    iBaffiPro ha scritto:


    resta il fatto che se la libreria funziona deve saper gestire la presenza di Thymeleaf.
    No, non è che "deve"! Il problema non è tanto (solo) con Thymeleaf ma con qualunque classe che viene usata tramite reflection. È quello il problema! Perché l'uso di una classe tramite reflection è un uso non "esplicito" nel codice.
    Ed è ben descritto nella documentazione: https://www.guardsquare.com/manual/home#reflectio

    iBaffiPro ha scritto:


    ovvero ProGuard non sia compatibile con Java 11 ma se non è compatibile con Java 11 sicuramente non sarà compatibile con Java 17 e Spring Boot 3.0 e comunque non mi va di essere limitato nell'uso delle versioni del Framework/JDK. Inoltre la configurazione del plugin non è agevole e nelle versioni future di ProGuard il codice sarà comunque da modificare.
    Non ho usato di recente ProGuard ma stando alle release note https://github.com/Guardsquare/proguard/release, già nell'ultima 7.2.1 è allineato a Java 18 !!

    Comunque posso dare un suggerimento? Dati i problemi, dubbi, lacune che hai espresso ... dimentica ProGuard e gli offuscatori.
Devi accedere o registrarti per scrivere nel forum
3 risposte