proguard 混淆代码,踩坑记录

论坛 期权论坛     
选择匿名的用户   2021-6-2 19:06   363   0
<h1>一、开始原因</h1>
<p>       因公司需要,故研究 proguard 混淆代码,期间踩了不少坑,记录一下过程,避免下次再次踩坑,也希望可以帮到大家。代码环境: spring-boot   2.2.5, jdk   1.8, maven   3.6</p>
<p> </p>
<h1>二 、proguard 使用 (使用 xml ,maven插件的形式配置使用,以下配置为最终配置)</h1>
<p>   1、在需要混淆的代码 pom.xml 中添加以下 plugin</p>
<pre class="blockcode"><code class="language-XML">&lt;plugin&gt;
    &lt;groupId&gt;com.github.wvengen&lt;/groupId&gt;
    &lt;artifactId&gt;proguard-maven-plugin&lt;/artifactId&gt;
    &lt;executions&gt;
        &lt;execution&gt;
            &lt;!--混淆时刻,这里是打包的时候混淆--&gt;
            &lt;phase&gt;package&lt;/phase&gt;
            &lt;!--使用插件的什么功能,当然是混淆--&gt;
            &lt;goals&gt;
                &lt;goal&gt;proguard&lt;/goal&gt;
            &lt;/goals&gt;
        &lt;/execution&gt;
    &lt;/executions&gt;
    &lt;configuration&gt;
        &lt;proguardVersion&gt;6.2.2&lt;/proguardVersion&gt;
        &lt;!--是否将生成的PG文件安装部署--&gt;
        &lt;!--&lt;attach&gt;true&lt;/attach&gt;--&gt;
        &lt;!--是否混淆--&gt;
        &lt;!--&lt;obfuscate&gt;true&lt;/obfuscate&gt;--&gt;
        &lt;!--指定生成文件分类--&gt;
        &lt;!--&lt;attachArtifactClassifier&gt;pg&lt;/attachArtifactClassifier&gt;--&gt;
        &lt;!-- 加载配置文件 --&gt;
        &lt;proguardInclude&gt;../proguard.cfg&lt;/proguardInclude&gt;
        &lt;!-- 对什么东西进行加载,这里仅有classes成功,毕竟你也不可能对配置文件及JSP混淆吧--&gt;
        &lt;injar&gt;classes&lt;/injar&gt;
        &lt;!--class 混淆后输出的jar包 或 文件夹--&gt;
        &lt;outjar&gt;${project.build.finalName}.jar&lt;/outjar&gt;
        &lt;!-- &lt;outjar&gt;${project.build.finalName}-pg&lt;/outjar&gt;--&gt;
        &lt;!-- 输出目录--&gt;
        &lt;outputDirectory&gt;${project.build.directory}&lt;/outputDirectory&gt;

        &lt;libs&gt;
            &lt;!-- Include main JAVA library required.--&gt;
            &lt;lib&gt;${java.home}/lib/rt.jar&lt;/lib&gt;
            &lt;!-- Include crypto JAVA library if necessary.--&gt;
            &lt;lib&gt;${java.home}/lib/jce.jar&lt;/lib&gt;
        &lt;/libs&gt;
    &lt;/configuration&gt;
    &lt;dependencies&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;net.sf.proguard&lt;/groupId&gt;
            &lt;artifactId&gt;proguard-base&lt;/artifactId&gt;
            &lt;version&gt;5.3.3&lt;/version&gt;
        &lt;/dependency&gt;
    &lt;/dependencies&gt;
&lt;/plugin&gt;</code></pre>
<p> 2、上面配置中 &lt;proguardInclude&gt;../proguard.cfg&lt;/proguardInclude&gt;,proguard.cfg 这个文件。</p>
<pre class="blockcode"><code class="language-java"># -keep {Modifier} {class_specification} 防止类和成员被移除或者被重命名
# -keepclassmembers {modifier} {class_specification} 防止成员被移除或者被重命名
# -keepclasseswithmembers {class_specification} 防止拥有该成员的类和成员被移除或者被重命名
# -keepnames {class_specification} 防止成员被重命名
# -keepclasseswithmembernames {class_specification} 防止拥有该成员的类和成员被重命名
# -keepclasseswithmembers
# -basedirectory directoryname  在配置文件中出现的相对路径均是相对于该路径


# JDK目标版本1.8
-target 1.8
# 不做收缩(删除注释、未被引用代码)
-dontshrink
# 不做优化(变更代码实现逻辑)
-dontoptimize
# 不用大小写混合类名机制
-dontusemixedcaseclassnames
# 不去忽略非公共的库类
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
# 确定统一的混淆类的成员名称来增加混淆
-useuniqueclassmembernames
# 优化时允许访问并修改有修饰符的类和类的成员
-allowaccessmodification
# 不混淆所有包名
#-keeppackagenames

# 指定要保留在输出文件内的目录(解决 spring autowire 装配失败的问题)
-keepdirectories
#-keepdirectories target\classes\cn\hongxin\busi\online\cgform\business\RestBusiness.class
#-keepdirectories cn.hongxin.busi.online.cgform.business.*

# 需要保持的属性:异常,注解等
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,LocalVariable*Table,*Annotation*,Synthetic,EnclosingMethod

#混淆时是否记录日志
#-verbose

# 不混淆所有的set/get方法
-keepclassmembers public class * {void set*(***);*** get*();}

-keep class cn.hongxin.codegenerate.generate.** { *;}
-keep class cn.hongxin.codegenerate.SettingUtils { *;}
-keep class cn.hongxin.codegenerate.database.** { *;}
-keepclassmembers class cn.hongxin.busi.online.cgform.controller.** { private *;}
-keep class cn.hongxin.busi.online.config.** { *;}
-keep class cn.hongxin.busi.online.cgreport.entity.** { *;}
-keep class cn.hongxin.busi.online.cgreport.mapper.** { *;}
-keep class cn.hongxin.busi.online.cgform.mapper.** { *;}
-keep class cn.hongxin.busi.online.cgform.business.** { *;}
-keep class cn.hongxin.busi.online.cgform.enums.ExecuteSqlEnum { *;}
-keep class cn.hongxin.busi.online.cgform.util.SqlParamUtil { *;}
-keep class cn.hongxin.busi.client.impl.* { *;}
-keep class cn.hongxin.busi.client.aop.* { !private &lt;methods&gt;; }

# 指定IOnlCgformHeadServic
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP