对springboot项目进行代码混淆,可以防止别人通过反编译项目查看代码,即使反编译了查看的也是混淆后的看不懂的代码。
一定程度保证了项目源码安全性。
下面分享代码混淆步骤和反编译操作
Allatori-7.7 代码混淆操作步骤
使用方法
1、首先从官网下载:http://www.allatori.com/
我的文件不是从官网下载的其他地方也可以找到资源
后面会附上资源包
代码混淆工具下载
2、下载完解压,解压之后的目录是这样的:
将jar包放入项目中(/lib目录里面的两个文件)
- 配置maven插件,如果是maven多模块,可以将jar包提取到父目录共用,xml文件各自配置各自的
<plugin> <!-- 这个也要加,,没加之前一直报错 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- Allatori plugin start -->
<plugin>
<!-- resouces拷贝文件插件 -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.1.0</version>
<!-- 执行这个插件的时候执行申明的所有phase -->
<executions>
<execution>
<id>copy-and-filter-allatori-config</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<!-- 指明文件的输出路径 即混淆后的文件的输出路径 ${basedir}:是项目的根目录 即与src同级的目录 -->
<outputDirectory>${basedir}/target</outputDirectory>
<resources>
<resource>
<!-- 项目的resources目录,一般用于存放配置文件 -->
<directory>src/main/resources</directory>
<includes>
<!-- 代码混淆时所依据的配置文件 可以看出,我放在了resources目录下 这个文件将会被拷贝到 ${basedir}/target 目录下-->
<include>allatori.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<!-- 代码混淆打包插件 -->
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.6.0</version>
<executions>
<execution>
<id>run-allatori</id>
<phase>package</phase>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
<configuration>
<executable>java</executable>
<arguments>
<argument>-Xms128m</argument>
<argument>-Xmx512m</argument>
<argument>-jar</argument>
<!-- 指定引用的allatori的jar包位置,这里把jar包放在了根目录下的lib目录里 -->
<argument>${basedir}/lib/allatori.jar</argument>
<!-- 指定代码混淆时的配置文件,因为是混淆指定的是jar包,jar包位置在target下,所以我们的allatori.xml也需要拷贝到该目录下(上面的拷贝文件插件已经帮我们做了这些事) -->
<argument>${basedir}/target/allatori.xml</argument>
</arguments>
</configuration>
</plugin>
<!-- Allatori plugin end -->
配置allatori.xml文件,配置混淆规则 文件放在/src/resources/下面
<config>
<input>
<jar in="licensemanagement-1.0-SNAPSHOT.jar" out="aa-allatori.jar"/>
</input>
<ignore-classes>
<class template="class *springframework*"/>
<class template="class *jni*"/>
<class template="class *alibaba*"/>
<class template="class *persistence*"/>
<class template="class *apache*"/>
<class template="class *mybatis*"/>
<class template="class *github*"/>
<class template="class com.lpx.licensemanagement.anotation.*"/>
<class template="class com.lpx.licensemanagement.aspect.*"/>
<class template="class com.lpx.licensemanagement.async.*"/>
<class template="class com.lpx.licensemanagement.config.*"/>
<!-- <class template="class com.lpx.licensemanagement.controller.*"/>-->
<class template="class com.lpx.licensemanagement.entity.*"/>
<class template="class com.lpx.licensemanagement.enums.*"/>
<class template="class com.lpx.licensemanagement.exception.*"/>
<class template="class com.lpx.licensemanagement.filter.*"/>
<class template="class com.lpx.licensemanagement.interceptor.*"/>
<class template="class com.lpx.licensemanagement.interfaces.*"/>
<class template="class com.lpx.licensemanagement.mapper.*"/>
<class template="class com.lpx.licensemanagement.pojo.*"/>
<class template="class com.lpx.licensemanagement.service.*"/>
<class template="class com.lpx.licensemanagement.utils.RedisOperator"/>
<class template="class com.lpx.licensemanagement.LicenseManagementApplication"/>
</ignore-classes>
<keep-names>
<class access="protected+">
<field access="protected+"/>
<method access="protected+"/>
</class>
<!-- 所有方法名称不变 parameters="keep" 表示方法的形参也不变 方法形参混淆后会导致参数映射获取失败 -->
<!--<method template="*(**)" parameters="keep" />-->
<!-- 控制层 方法名、方法、形参 不混淆 -->
<class template="class com.lpx.licensemanagement.controller.*">
<method template="protected+ *(**)" parameters="keep"/>
</class>
<!-- <class template="class com.lpx.test.service.*">-->
<!-- <method template="protected+ *(**)" parameters="keep"/>-->
<!-- </class>-->
</keep-names>
<property name="log-file" value="log.xml"/>
</config>
配置好后打包即可
mvn clean install -Dmaven.test.skip=true
当出现下图则说明混淆成功
此时target目录下会生成混淆后的jar包
标题反编译步骤
可以使用反编译工具查看混淆后的jar包代码是否成功混淆(我使用的是jd-gui)
反编译工具百度和CSDN很容易就能找到资源,你们自己下载一下。