使用allatori混淆代码

引言

为了保密需要,我们开发出来的程序在实际部署之前,需要先将jar包的代码进行混淆,让用户使用反编译也无法获得源码。
allatori就是这样一个混淆java jar包代码的工具。

操作步骤

Step1.在pom中添加插件

<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>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>
            <argument>${basedir}/lib/allatori.jar</argument>
            <argument>${basedir}/lib/allatori.xml</argument>
        </arguments>
    </configuration>
</plugin>

Step2.copy jar包到插件里配置的路径

Step3.编写配置文件,并放在插件里配置的路径下

示例配置:

  • 配置中最重要的的配置是<jar in ="xxx" out="xxx"/><ignore-classes>
    • 第一个标签用来指定将什么包混淆,混淆后的输出包名是什么
    • 第二个标签用来指定什么包、类不进行混淆。注意,主类不要进行混淆,其他第三方jar包的代码不要进行混淆(否则会出现java.lang.NoClassDefFoundError错误)。
<config>
    <input>
        <!-- in表示输出的原始jar包,out表示输出的混淆后的jar包,后者名称可自定义,也可以是war -->
        <jar in="../target/akkaload-core-0.0.1-SNAPSHOT.jar"
             out="../target/akkaload-core-0.0.1-SNAPSHOT.jar"/>
    </input>
    <keep-names>
        <class access="protected+">
            <field access="protected+"/>
            <method access="protected+"/>
        </class>
    </keep-names>

    <property name="log-file" value="log.xml"/>

    <!-- 忽略的包或类,这些文件将不被混淆 -->
    <ignore-classes>
        <!-- 不要混淆主类 -->
        <class template="class com.navi.akkaload.AkkaloadApplication" />
        <!-- 不要混淆第三方的代码,否则会运行jar包会报错java.lang.NoClassDefFoundError -->
        <class template="class org.dom4j.*" />
        <class template="class akka.actor.*" />
        <class template="class *alibaba*" />
        <class template="class *org*" />
        <class template="class *rabbitmq*" />
        <class template="class *springframework*" />
        <class template="class *lombok*" />
    </ignore-classes>

    <!-- 到期时间(到期后无法启动jar) 格式:yyyy/mm/dd-->
    <!--<expiry date="2021/04/03" string="SERVICE EXPIRED!"/>-->
    <!-- 随机命名混淆字符-->
    <!--<property name="random-seed" value="abcdef ghnljk svi"/>-->

</config>

效果

打开混淆成功后的jar包,会发现代码已经被混淆。

原文地址:https://www.cnblogs.com/daheww/p/15713596.html