Allatori
最近涉及到一些代码安全方面的工作,找到Allatori 这个代码混淆工具,代码混淆是将代码中类名、方法名、属性名替换为无意义符号,增加代码逆向难度,对应用程序逻辑结构进行打乱混排,保证源码可读性降到最低,从而实现代码保护。
官网下载 http://www.allatori.com/ 压缩包

1.pom.xml中引入插件

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.2.1.RELEASE</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <!-- Allatori plugin start -->
            <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>${project.basedir}/target</outputDirectory>
                            <resources>
                                <resource>
                                    <directory>${project.basedir}/src/main/resources</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>1.2.1</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文件目录 -->
                        <argument>${project.basedir}/lib/allatori.jar</argument>
                        <!-- allatori混淆的配置文件-->
                        <argument>${project.basedir}/src/main/resources/allatori.xml</argument>
                    </arguments>
                </configuration>
            </plugin>
            <!-- Allatori plugin end -->
        </plugins>
    </build>

2.打开下载好的压缩包,找到 这两个jar包

springboot编译混淆 springboot代码混淆加密_maven


3.复制上面两个jar包到项目目录下新建一个lib 丢进去,这里我的项目是多模块的项目,先放在start目录下

springboot编译混淆 springboot代码混淆加密_jar包_02


4.resource 目录下新增allatori.xml

springboot编译混淆 springboot代码混淆加密_jar包_03

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <input>
        <!-- 这里的in表示需要混淆的jar(springboot打包后的jar),out表示输出混淆后的jar(混淆器修改springboot打包后的jar) -->
        <jar in="../../../target/xxx.jar" out="../../../target/xxx-obfuscated.jar" />

    </input>
    <!-- 不替换类名、方法名、属性名 -->
    <keep-names>
        <class access="protected+">
            <field access="protected+" />
            <method access="protected+" />
        </class>
    </keep-names>

    <ignore-classes>
        <!-- 	忽略springBoot的启动项(防止启动报错)	 -->
        <class template="class *springframework*" />
        <!-- 不混淆框架内的东西(包括Redis,Jbdc,DAO层和Entity层等),最好只混淆自己的核心逻辑-->
    </ignore-classes>
    <!-- 接口形参名保持不变 -->
    <property name="local-variables-naming" value="keep-parameters"/>
    <property name="log-file" value="log.xml" />
    <!--	添加水印密匙,主要用来保护版权	 -->
    <!-- <watermark key="secure-key-to-extract-watermark" value="Customer: John Smith; Date: xx.yy.zzzz"/> -->
    <!-- 	配置过期时间	 -->
    <!-- <expiry date="2000/01/01" string="EXPIRED!"/> -->
    <!-- 随机命名混淆字符-->
    <property name="random-seed" value="cshxzf jrncbd hh"/>
</config>

5.配置都完成之后,使用maven package 打包,完成之后在target目录下会生成两个jar包,一个是正常的jar包一个是混淆后的jar包

springboot编译混淆 springboot代码混淆加密_jar_04


springboot编译混淆 springboot代码混淆加密_spring boot_05


6.正常生成之后打开jar包 再使用反编译工具打开class文件查看代码已经被混淆了。

总结: 我这里遇到的几个问题是,因为我是多模块的项目,将配置完成之后发现结果只有starter模块的代码被混淆了,其他的模块的还是原样,网上也搜查了些资料说是在allatori.xml文件里面配置多个模块就可以了,但是最后都给我报错说找不到目标文件,后来也没再继续找下去,我自己的处理方式是在每个模块下面再配置同样的代码,最后每个模块都会生成自己的混淆后的jar包,我最后再将混淆后的jar包 手动丢到start的jar中替换没有混淆的jar包。
不知道大家有没有别的有效的办法 可以share一下。