SpringBoot项目——混淆加密

Java是一种跨平台的编程语言,代码运行之前会被JDK编译成字节码文件。在Java字节码中包括了很多源代码信息,比如变量名、方法名等等,并且通过这些名称来访问变量和方法,这些符号带有许多语义信息,很容易被反编译成Java源代码。平时我们在分发和部署项目的时候,为了保护我们自己的知识产权,通常要对Java代码进行混淆加密。

Oracle数据库是用Java开发的,如果代码不混淆加密的话,任何人都能通过反编译程序,获取到Oracle的源代码。以Oracle的行事作风,所有影响赚钱的事情,它必须根除。

一、如何使用反编译器

讲加密混淆之前,我先跟你谈谈如何使用软件反编译Java字节码。反编译工具目前有很多,例如JD-GUI、Luyten、Jadx等等。我以Luyten举例子,大家可以访问下面的网址,下载到这个反编译软件。

http://java-decompiler.github.io/

二、如何对字节码反编译

刚才我们看到反编译之后的结果,如果我们分发要部署的Java程序,不对字节码混淆加密,那么别人可以轻松获得你的源码。对于商业产品,这肯定是能允许的。

目前Java混淆工具有很多,比如有ProGuard、JODE、RetroGuard等等。但是它们都有一个问题,那就是对SpringBoot支持的不够好。你对普通的JAR文件或者字节码文件混淆是可以的,但是在SpringBoot项目中,这些混淆器就没法使用。

我向大家推荐allatori这个混淆工具,它对SpringBoot和Maven支持的不错,我们用Maven打包的时候,allatori可以对字节码进行混淆。

步骤一:

首先我们在IDEA项目中创建allatori文件夹(名字可以自定义),然后把从allatori官网下载到的allatori.jar文件放入其中,然后还要创建allatori.xml文件,要定义的内容如下:

<config>
    <input>
        <!--in属性规定的是我们对那个JAR文件的字节码混淆,out属性是混淆后的JAR文件存放路径-->
        <jar in="D:\emos-workflow\target\emos-workflow-0.0.1-SNAPSHOT.jar"
             out="D:\emos-workflow\target\emos-workflow-obfuscated.jar"/>
    </input> 
    <keep-names>
        <class access="protected+">
            <field access="protected+"/>
            <method access="protected+"/>
        </class>
    </keep-names>
    <ignore-classes>
        <!--这些都是不需要被混淆加密的类-->
        <class template="class *springframework*" />
        <class template="class *jni*" />
        <class template="class *alibaba*"/>
        <!--引用了RedisTemplate的Java类被混淆之后,Spring创建对象会有一场,所以不用混淆-->
        <class template="class com.example.emos.workflow.config.quartz.MeetingRoomJob"/>
    </ignore-classes>
    <property name="log-file" value="log.xml"/>
</config>
步骤二:

然后在pom.xml文件中,添加标签,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<project …… >
    ……
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.6</version>
                <executions>
                    <execution>
                        <id>copy-and-filter-allatori-config</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${basedir}/target</outputDirectory>
                            <resources>
                                <resource>
                                    <directory>${basedir}/allatori</directory>
                                    <includes>
                                        <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>3.0.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>
                        <argument>${basedir}/allatori/allatori.jar</argument>
                        <argument>${basedir}/allatori/allatori.xml</argument>
                    </arguments>
                </configuration>
            </plugin>
            ……
        </plugins>
    </build>
</project>
步骤三:

接下来我们开始对SpringBoot打包,而且要执行两次打包操作才可以。如果只执行一次打包操作,那么打包出来的混淆JAR文件不会包含SpringBoot项目的依赖库文件。只有执行了第二次打包之后,混淆出来的JAR文件里面才会包含依赖库文件,这一点切记!

步骤四:

下面target目录下找对应的jar文件,这个JAR文件就是混淆之后的JAR文件,你不妨可以查看文件的体积,应该是几十MB的样子,这样的JAR文件才能运行。

我们用反编译软件打开这个JAR文件,大家都看到了,反编译之后的源代码完全是乱码,阅读起来非常困难,这就起到了保护源代码的目的。

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐