使用proguard实现maven工程代码混淆

proguard简单来说是为了防止反编译,更准确的说,是使得代码易读性变差。

第一步:maven pom配置中加入以下:

        
            
                com.github.wvengen
                proguard-maven-plugin
                
                    
                        package
                        
                            proguard
                        
                    
                
                
                    5.3.3
                    ${project.build.finalName}.jar
                    ${project.build.finalName}-pg.jar
                    true
                    ${project.basedir}/proguard.cfg
                    
                        
                        ${java.home}/lib/rt.jar
                        
                        ${java.home}/lib/jce.jar
                    
                
                
                    
                        net.sf.proguard
                        proguard-base
                        5.3.3
                    
                
            
            
                org.springframework.boot
                spring-boot-maven-plugin
                
                    
                        
                            repackage
                        
                        
                            com.geekkeybo.weather.WeatherApplication
                        
                    
                
            
        

第二步:在pom同级目录下添加proguard.conf文件:

-target 1.8 ##指定java版本号
-dontshrink ##默认是开启的,这里关闭shrink,即不删除没有使用的类/成员
-dontoptimize ##默认是开启的,这里关闭字节码级别的优化
-useuniqueclassmembernames ##对于类成员的命名的混淆采取唯一策略
-adaptclassstrings ## 混淆类名之后,对使用Class.forName('className')之类的地方进行相应替代
-dontusemixedcaseclassnames ## 混淆时不生成大小写混合的类名,默认是可以大小写混合

-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod ##对异常、注解信息在runtime予以保留,不然影响springboot启动
-keepclasseswithmembers public class * { public static void main(java.lang.String[]);} ##保留main方法的类及其方法名
-keepclassmembers enum * { *; }  ##保留枚举成员及方法

第三步:执行maven命令:

clean
package

执行上述代码后,在target目录下会生成3个文件:

· classes-pg.jar 混淆后的classes文件,里面包含完整的项目结构

· proguard_map.txt 混淆内容的映射

· proguard_seed.txt 参与混淆的类

混淆完成后,将classes-pg.jar解压到应用服务器覆盖原有的classes文件

注意:

问题:我这边使用的springboot2.0版本,在混淆的时候用到了log4j.2.10.0,它使用了jdk9,而proguard不支持所以一直报错。

在网上找了最通用最常见的办法是在proguard.conf中屏蔽java9的api类:

-libraryjars lib\log4j-api-2.10.0.jar(!META-INF/versions/9/**.class,!module-info.class)  
-libraryjars lib\log4j-core-2.10.0.jar  
-libraryjars lib\log4j-jcl-2.10.0.jar  
-libraryjars lib\log4j-web-2.10.0.jar

但是我这边又报出这个错误。

最后,我在pom文件中删除了log4j的依赖,然后混淆通过。

        
            org.springframework.boot
            spring-boot-starter
            
                
                    org.apache.logging.log4j
                    log4j-to-slf4j
                
            
        

你可能感兴趣的:(使用proguard实现maven工程代码混淆)