form example spring obfuscation

form - spring tld example



Ofuscador de botas de primavera (2)

Esto se puede hacer volviendo a empaquetar la biblioteca sin comprimir. Esto se puede hacer usando la herramienta jar con la siguiente secuencia de comandos bash. El script simplemente tiene que ser ejecutado en el directorio principal de proyectos.

# some constant settings we use work_dir=work uncompress_dir=uncompress library_dir=lib # parameters for input and output files # the name of the library that should be uncompressed library_name="spring-boot-starter-web-1.2.0.RELEASE.jar" # the obfuscated artifact original_jar=''webservice-obs-1.0.jar'' # the new obfuscated artifact (can be the same) repacked_jar=''webservice-obs-repack-1.0.jar'' # build the obfuscated library mvn clean package -Dobfuscation # create working directory and copy obfuscated artifact mkdir target/$work_dir cp target/$original_jar target/$work_dir cd target/$work_dir # extract contents of obfuscated artifact jar xvf $original_jar rm $original_jar # uncompress the target library and jar again without compression (c0) mkdir $uncompress_dir mv $library_dir/$library_name $uncompress_dir cd $uncompress_dir jar xvf $library_name rm $library_name jar c0mf ./META-INF/MANIFEST.MF $library_name * mv $library_name ../$library_dir cd .. rm -r $uncompress_dir # jar the complete obfuscated artifact again # it is important here to copy the manifest as otherwise the library would not be executeable any more by spring-boot jar c0mf ./META-INF/MANIFEST.MF ../$repacked_jar * # cleanup work dir cd .. rm -r $work_dir

Probablemente tengas que hacer esto de nuevo si más archivos necesitan este manejo especial. Una de las bibliotecas que hacen esto es, por ejemplo, el cuarzo.

Estoy usando Spring Boot con bootRepackage gradle para compilar el archivo jar de lanzamiento. Mi proyecto necesita un código ofuscador antes de entregarlo al cliente. Intenté proguard y alguna otra herramienta pero ocurren muchos problemas. ¿Puedo tener consejos sobre cómo configurar estas herramientas para el arranque de primavera.

Probé ProGuard con estas configuraciones.

-injars ./build/libs/webservice-1.0.jar -outjars ./build/libs/webservice-obs-1.0.jar -libraryjars <java.home>/lib/rt.jar -keep class !myapplicationpackage.** { *; } -keep class myapplicationpackage.Application { *; } -ignorewarnings -keepdirectories ** -dontshrink -keepattributes *Annotation* -keepclassmembers class com.yumyumlabs.** { java.lang.Long id; } -keepnames class com.yumyumlabs.** implements java.io.Serializable -keepclassmembers class * implements java.io.Serializable { static final long serialVersionUID; private static final java.io.ObjectStreamField[] serialPersistentFields; !static !transient <fields>; private void writeObject(java.io.ObjectOutputStream); private void readObject(java.io.ObjectInputStream); java.lang.Object writeReplace(); java.lang.Object readResolve(); } -keepclassmembers class * { @org.springframework.beans.factory.annotation.Autowired *; @org.springframework.beans.factory.annotation.Qualifier *; @org.springframework.beans.factory.annotation.Value *; @org.springframework.beans.factory.annotation.Required *; @org.springframework.context.annotation.Bean *; @javax.annotation.PostConstruct *; @javax.annotation.PreDestroy *; @org.aspectj.lang.annotation.AfterReturning *; @org.aspectj.lang.annotation.Pointcut *; @org.aspectj.lang.annotation.AfterThrowing *; @org.aspectj.lang.annotation.Around *; } -keep @org.springframework.stereotype.Service class * -keep @org.springframework.stereotype.Controller class * -keep @org.springframework.stereotype.Component class * -keep @org.springframework.stereotype.Repository class * -keep @org.springframework.cache.annotation.EnableCaching class * -keep @org.springframework.context.annotation.Configuration class * -keepattributes Signature -dontwarn com.yumyumlabs.web.controllers.auth.AuthController -dontwarn com.google.apphosting.api.ReflectionUtils -dontwarn sun.misc.Unsafe -dontwarn org.tartarus.snowball.** -dontnote -keepattributes Signature,RuntimeVisibleAnnotations,AnnotationDefault

Pero el tarro generado no puede correr

java.lang.IllegalStateException: Unable to open nested entry ''lib/spring-boot-starter-web-1.2.0.RELEASE.jar''. It has been compressed and nested jar files must be stored without compression. Please check the mechanism used to create your executable jar file at org.springframework.boot.loader.jar.JarFile.createJarFileFromFileEntry(Unknown Source) at org.springframework.boot.loader.jar.JarFile.createJarFileFromEntry(Unknown Source) at org.springframework.boot.loader.jar.JarFile.getNestedJarFile(Unknown Source) at org.springframework.boot.loader.archive.JarFileArchive.getNestedArchive(Unknown Source) at org.springframework.boot.loader.archive.JarFileArchive.getNestedArchives(Unknown Source) at org.springframework.boot.loader.ExecutableArchiveLauncher.getClassPathArchives(Unknown Source) at org.springframework.boot.loader.Launcher.launch(Unknown Source) at org.springframework.boot.loader.JarLauncher.main(Unknown Source)


Te está diciendo el problema. Está comprimiendo los archivos JAR incrustados que no está permitido. Necesitas conseguir que se omita la compresión de elementos secundarios. Probablemente sea mejor saltarse la compresión por completo.

En realidad, podría omitirlo todo, ya que esto dificulta un poco la ingeniería inversa, pero no lo detiene. Si realmente necesita mantenerlo en secreto, entonces su única opción real es vender su aplicación como servicio en lugar de proporcionar un JAR, WAR, EAR, etc.

IllegalStateException: no se puede abrir la entrada anidada ''lib / spring-boot-starter-web-1.2.0.RELEASE.jar''. Se ha comprimido y los archivos jar anidados deben almacenarse sin compresión. Por favor, compruebe el mecanismo utilizado para crear su archivo jar ejecutable