【学习笔记】使用proguard进行的JAVA 代码混淆(基于Maven的SpringBoot工程)

今天1024,整理一篇之前的记录,以此纪念1024,1024K = 1GB(一级棒)

由于公司要求,需要将入库版本的代码进行混淆,因此进行了这一项毫无意义的工作,多方调查后,终于成功实现混淆。下面我将介绍下我是如何将poguard嵌入maven工程中,进行打包的。

使用方法,将proguard.cfg文件放置于pom文件同级目录下,同时在pom文件中进行配置即可打包。

避坑指南:pom文件中的poguard混淆配置一定要在compolier编译模块之前,不然混淆后的代码是跑不起来的。

1.混淆配置: poguard.cfg配置文件

-target 1.8 ##指定java版本号
-ignorewarnings  ##不理会警告,否则混淆失败
-keepdirectories
-dontwarn  ##不警告
-dontshrink ##默认是开启的,这里关闭shrink,即不删除没有使用的类/成员
-dontoptimize ##默认是开启的,这里关闭字节码级别的优化
-useuniqueclassmembernames ##对于类成员的命名的混淆采取唯一策略
-adaptclassstrings ## 混淆类名之后,对使用Class.forName('className')之类的地方进行相应替代
-dontusemixedcaseclassnames ## 混淆时不生成大小写混合的类名,默认是可以大小写混合
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
-allowaccessmodification
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,LocalVariable*Table,*Annotation*,Synthetic,EnclosingMethod ##对异常、注解信息在runtime予以保留,不然影响springboot启动
-keeppackagenames
-adaptclassstrings
-keepparameternames
-keepclassmembers class * {@org.springframework.beans.factory.annotation.Autowired *;
                            @org.springframework.beans.factory.annotation.Value *;
                             @org.springframework.context.annotation.ComponentScan *;
                             @org.mybatis.spring.annotation.MapperScan *;}
-keep class !com.xxx.xxx.demo.** { *; }
-keep class com.xxx.xxx.demo.DemoApplication { *; }
-keepclassmembers public class * {void set*(***);*** get*();}
-keepclassmembers enum * { *; }  ##保留枚举成员及方法
#混淆类里面的方法
-keep class com.xxx.xxx.demo.controller.**
-keep class com.xxx.xxx.demo.config.**
-keep class com.xxx.xxx.demo.manager.**
-keep class com.xxx.xxx.demo.mq.**
#不混淆类和类内部的元素
-keep class com.xxx.xxx.demo.dao.** {*;}
-keep class com.xxx.xxx.demo.exception.** {*;}
-keep class com.xxx.xxx.demo.handler.** {*;}
-keep class com.xxx.xxx.demo.model.** {*;}
-keep class com.xxx.xxx.demo.service.** {*;}
-keep class com.xxx.xxx.demo.util.** {*;}

2. pom文件配置,位置: 放置于plugins模块下面第一个

    
            
                com.github.wvengen
                proguard-maven-plugin
                
                    
                        package
                        
                            proguard
                        
                    
                
                
                    6.1.0
                    ${project.build.finalName}.jar
                    ${project.build.finalName}.jar
                    true
                    ${project.basedir}/proguard.cfg
                    
                        
                        ${java.home}/lib/rt.jar
                        
                        ${java.home}/lib/jce.jar
                    
                
                
                    
                        net.sf.proguard
                        proguard-base
                        6.1.0
                    
                
            
            
                .....
            
            
             
                org.apache.maven.plugins
                maven-compiler-plugin
                3.3
                
                    1.8
                    1.8
                    UTF-8
                    
                        -parameters
                    
                
            

3. maven打包

进行maven工具进行打包,可以看到控制台中将会输出 [poguard]的混淆过程,在target文件夹下取出jar包即是打包完成之后的包。

注意点:

如果打包提示没有主类,请在pom文件中加入配置

     
                org.springframework.boot
                spring-boot-maven-plugin
                
                    1.8
                    1.8
                    
                        
                            com.xxx.demo.DemoApplication
                            true
                            jar/
                        
                    
                    true
                
                
                    
                        
                            repackage
                        
                    
                
            

 

你可能感兴趣的:(学习笔记)