java代码混淆的proguard方案

混淆方案用的proguard-maven-plugin插件。暂时这样能跑起来,有多少坑,还需要慢慢趟。

jar混淆说明

!!!一定要注意
所有的实体类和config一定要排除。用-keep 在proGuard.conf配置

修改启动类:MomBarcodeApplication.java

public static class CustomGenerator implements BeanNameGenerator {

    @Override
    public String generateBeanName(BeanDefinition definition, BeanDefinitionRegistry registry) {
        return definition.getBeanClassName();
    }
}


public static void main(String[] args) {
    new SpringApplicationBuilder(MomBarcodeApplication.class)
            .beanNameGenerator(new CustomGenerator())
            .run(args);
}

修改 pom.xml 中 proguard-maven-plugin插件

        <!-- proguard混淆插件-->
        <plugin>
            <groupId>com.github.wvengen</groupId>
            <artifactId>proguard-maven-plugin</artifactId>
            <version>2.5.1</version>
            <executions>
                <execution>
                    <!-- 打包的时候开始混淆-->
                    <phase>package</phase>
                    <goals>
                        <goal>proguard</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <injar>${project.build.finalName}.jar</injar>
                <!--输出的jar-->
                <outjar>${project.build.finalName}.jar</outjar>
                <!-- 是否混淆-->
                <obfuscate>true</obfuscate>
                <libs>
                    <lib>${java.home}/jmods/</lib>
                </libs>
            </configuration>
        </plugin>

proGuard.conf配置(跟pom.xml要在一个路径下面)

# !!! config和实体类必须要保留-keep
#指定java版本号
-target 17
#默认开启,不做收缩(删除注释、未被引用代码)
-dontshrink
#默认是开启的,这里关闭字节码级别的优化
-dontoptimize
#混淆类名之后,对使用Class.forName('className')之类的地方进行相应替代
-adaptclassstrings
#混淆时不生成大小写混合的类名
-dontusemixedcaseclassnames
#对于类成员的命名的混淆采取唯一策略
-useuniqueclassmembernames
#不忽略指定jars中的非public calsses
-dontskipnonpubliclibraryclasses
#忽略warn消息
-ignorewarnings
#忽略note消息
-dontnote

#保留继承了注释的类
-keep class * extends java.lang.annotation.Annotation {*;}
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
#此选项将保存所有软件包中的所有原始接口文件(不进行混淆)
-keepnames interface ** { *; }
-keep interface * extends * { *; }

#保留main方法
-keepclasseswithmembers public class * {
                            public static void main(java.lang.String[]);
                            }
#此选项将保留所有原始方法参数,controller如果参数也混淆会导致传参映射不上
-keepparameternames

#保留枚举成员及方法
-keepclassmembers enum * { *; }

#入口程序类不能混淆,混淆会导致springboot启动不了
-keep class com.zxy.product.mom.xxx.MomBarcodeApplication
-keep class * implements java.io.Serializable
-keep class com.zxy.product.mom.xxx.entity.** {*;}
-keep class com.zxy.product.mom.xxx.controller.** {*;}
-keep class com.zxy.product.mom.xxx.netty.NettyConfig {*;}
-keep class com.zxy.product.mom.xxx.netty.MessageBean {*;}
-keep class com.zxy.product.mom.xxx.netty.MyNettyProperties {*;}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值