为什么需要对java程序进行加扰混淆
Java文件编译后会生成class文件,但这些class文件很容易被反编译。反编译后的代码可读性极高,这不利于保护知识产权。特别是在某些特殊行业中,若需要对协议进行保护以避免被竞争对手破解,这种特性就带来了安全隐患。
反编译前代码:
反编译后:
通过对比两张图可以看出,反编译后的代码与原始源代码几乎完全一致。
如何对Java程序进行代码混淆以降低反编译后的可读性?对于Maven工程,可以使用proguard-maven-plugin插件来实现代码混淆功能。
proguard-maven-plugin插件配置
在 Maven 工程的 pom.xml 文件中,在 build -> plugins 标签内添加以下配置内容:
<build>
<plugins>
<plugin>
<groupId>com.github.wvengen</groupId>
<artifactId>proguard-maven-plugin</artifactId>
<version>2.7.0</version>
<executions>
<execution>
<!--混淆时刻,这里是打包的时候混淆-->
<phase>install</phase>
<goals>
<goal>proguard</goal>
</goals>
</execution>
</executions>
<configuration>
<injar>${project.artifactId}-${project.version}.jar</injar>
<outjar>${project.artifactId}-${project.version}.jar</outjar>
<!-- 是否混淆 默认是true -->
<obfuscate>true</obfuscate>
<!-- 配置一个文件,通常叫做proguard.cfg,该文件主要是配置options选项 -->
<proguardInclude>${project.basedir}/proguard.cfg</proguardInclude>
<!--添加依赖-->