springboot 代码混淆(反编译)

作用:

将类名,和方法名以及字段名修改为简单的abc形式,增加阅读难度

因作者水平有限,只能将service的代码进行混淆

实现:

1.在pom添加插件,修改springboot大打包插件。具体代码如下:

基本不用改,改一下启动类名就行

<build>
        <plugins>
            <!--混淆代码插件-->
            <plugin>
                <groupId>com.github.wvengen</groupId>
                <artifactId>proguard-maven-plugin</artifactId>
                <version>2.0.14</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>proguard</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <proguardVersion>6.0.3</proguardVersion>
                    <injar>${project.build.finalName}.jar</injar>
                    <outjar>${project.build.finalName}.jar</outjar>
                    <obfuscate>true</obfuscate>
                    <!--一个配置文件,在下一步中-->
                    <proguardInclude>${basedir}/proguard.conf</proguardInclude>

                    <libs>
                        <lib>${java.home}/lib/rt.jar</lib>
                        <lib>${java.home}/lib/jce.jar</lib>
                    </libs>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>net.sf.proguard</groupId>
                        <artifactId>proguard-base</artifactId>
                        <version>6.0.3</version>
                    </dependency>
                </dependencies>
            </plugin>

            <!--springboot项目打包插件-->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                        <configuration>
                            <!--启动类-->
                            <mainClass>com.hn.kiss.KissApplication</mainClass>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>


    </build>

2.在根目录添加配置文件 proguard.conf(与pom同级),用于控制那些代码不需要混淆

中间 -keep 开头跟的就是不需要混淆的代码,mapper,dto,entity因为在xml中有应用所以不能混淆,controller混淆我这里会报错,其他的为配置类也不能混淆

-target 1.8
-dontshrink
-dontoptimize
-adaptclassstrings
-ignorewarnings
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
-keepparameternames

-keep class com.hn.kiss.modules.*.security.** { *; }
-keep class com.hn.kiss.config.** { *; }
-keep class com.hn.kiss.KissApplication { *; }
-keep class com.hn.kiss.modules.*.mapper.** { *; }
-keep class com.hn.kiss.modules.*.dto.** { *; }
-keep class com.hn.kiss.modules.*.entity.** { *; }
-keep class com.hn.kiss.modules.*.controller.** { *; }
-keep class com.hn.kiss.admin.** { *; }

-keepclassmembers class * {
      @org.springframework.beans.factory.annotation.Autowired *;
      @org.springframework.beans.factory.annotation.Value *;
  }

3.修改启动类,用于解决打包混淆后的类名重复问题

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.BeanNameGenerator;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;

@MapperScan("com.hn.kiss.modules.*.mapper")
@SpringBootApplication
public class KissApplication {
    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(KissApplication.class)
                .beanNameGenerator(new CustomGenerator())
                .run(args);
    }
}

4.如果用到swagger,启动会报错,在swagger配置类上加上以下注解,让配置不生效.可以解决问题(但是swagger-ui的页面也访问不了)

@ConditionalOnProperty(prefix = "swagger", value = {"enable"}, havingValue = "true")

5.打包后jar可正常执行

效果:

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值