SpringBoot3.5.0项目使用ALLATORI JAVA混淆器

ALLATORI JAVA混淆器介绍

Allatori作为第二代Java混淆器,通过高强度代码混淆防止逆向工程,兼具应用体积最小化和运行加速功能。其完整水印机制强化软件授权管理,是需代码保护及性能优化开发者的理想工具。

混淆技术的分类及作用:

根据混淆原理,可分为四类:

  1. 词法混淆

    • 重命名类、方法、变量为无意义字符串(如iIIllilllIlIilIiiliiil),移除注释和调试信息。
    • 作用:降低代码可读性,增加理解成本。
  2. 数据混淆

    • 字符串加密:避免敏感字符串直接暴露(如数据库连接信息)。
    • 数组重构:分裂/合并数组,改变维度隐藏数据结构。
    • 变量分裂/合并:拆分变量为多个部分,或合并多个变量。
  3. 控制流混淆

    • 插入无效条件分支(不透明谓词)、打乱循环逻辑、并行化代码。
    • 作用:使执行流程复杂化,干扰反编译工具。
  4. 类结构混淆

    • 类合并/分裂:将多个类合并为一个,或将一个类拆分为多个。
    • 类型隐藏:用接口声明类,隐藏实际类型。

官网地址:allatori.com/

官网教程:

当前版本说明

复制代码
版本9.4-2025年6月1日
Java 24支持

多模块工程介绍

在根目录下加入allatori文件夹,allatori.jar 是加密jar包,allatori.xml是具体配置。

allatori.xml配置

xml 复制代码
<config>
    <!--maven构建项目输入与输出名称-->
    <input>
        <jar in="${project.build.finalName}.jar" out="${project.build.finalName}-obfuscated.jar"/>
    </input>
    <!--指定混淆-->
    <keep-names>
        <!--字段与方法进行混淆-->
        <class access="protected+">
            <field access="protected+"/>
            <method access="protected+"/>
        </class>
        <!--对指定类进行混淆-->
        <class template="class *.TestFrame"/>
    </keep-names>
    <!-- 加密记录 -->
    <property name="log-file" value="log.xml"/>
    <!-- 忽略的包或类,这些文件将不被混淆 -->
<!--    <ignore-classes>-->
<!--        <class template="class *springframework*" />-->
<!--        <class template="class *shardingjdbc*" />-->
<!--        <class template="class *jni*" />-->
<!--        <class template="class *alibaba*"/>-->
<!--        <class template="class *persistence*"/>-->
<!--        <class template="class *mybatisplus*"/>-->
<!--        <class template="class *Interceptor*"/>-->
<!--        &lt;!&ndash; 排除业务类 &ndash;&gt;-->
<!--        <class template="class com.li.jdemo.allatorisub.*.handler.*" />-->
<!--        <class template="class com.li.jdemo.allatorisub.controller.*.*" />-->
<!--        <class template="class com.li.jdemo.allatorisub.*.dao.*" />-->
<!--        <class template="class com.li.jdemo.allatorisub.*.entity.*" />-->
<!--        <class template="class com.li.jdemo.allatorisub.*.data.*" />-->
<!--    </ignore-classes>-->
</config>

下面我们来看看pom.xml文件:

xml 复制代码
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <!-- Copying Allatori configuration file to 'target' directory.
                 The destination file will be filtered (Maven properties used in configuration file will be resolved). -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>3.3.1</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>../allatori</directory>
                                    <includes>
                                        <include>allatori.xml</include>
                                    </includes>
                                    <filtering>true</filtering>
                                </resource>
                            </resources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
​
            <!-- Running Allatori -->
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>3.5.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>../allatori/lib/allatori.jar</argument>
                        <argument>${basedir}/target/allatori.xml</argument>
                    </arguments>
                </configuration>
            </plugin>
​
        </plugins>
    </build>

打包

通过打包获取到混淆后的jar包,allatori-sub-obfuscated.jar

混淆文件对比

通过对比发现混淆后的代码迷惑性很强,目标达成。

验证混淆文件启动

正常启动,目标达成。

classfinal 、xjar、allatori 、ProGuard工具对比

工具 防护等级 主要弱点 操作便捷性
ProGuard 抵御业余攻击者 混淆后代码仍可被反编译 需手动配置复杂规则(如-keep保留特定类),多模块项目配置困难
Allatori 中等-高级(商业级混淆) 控制流混淆可能被动态分析破解 商业工具提供更友好界面
XJar 低级(易被破解) 开源设计导致加密算法暴露 配置简单,但需依赖特定环境(如XBoot-ClassLoader),且兼容性差
ClassFinal 高级(加密+混淆) 依赖JVM代理启动参数 无缝集成 :无需修改源码,直接加密JAR/WAR包。 支持Maven插件自动加密(mvn package生成加密包)和命令行操作。 提供机器码绑定、无密码模式等灵活选项
相关推荐
寻月隐君6 分钟前
Rust 泛型编程基石:AsRef 和 AsMut 的核心作用与实战应用
后端·github
Java水解19 分钟前
100道互联网大厂面试题+答案
java·后端·面试
用户83562907805124 分钟前
使用Python自动化移除Excel公式,保留纯净数值
后端·python
Java水解29 分钟前
SpringBoot 线程池 配置使用详解
spring boot·后端
karry_k1 小时前
生产者-消费者问题
后端
QZQ541881 小时前
go中channel通信的底层实现
后端
方圆想当图灵1 小时前
深入浅出 gRPC
java·后端·github
好哇塞1 小时前
Java 团队代码规范落地:Checkstyle/PMD/SpotBugs 开发环境集成指南
后端
王嘉俊9252 小时前
Flask 入门:轻量级 Python Web 框架的快速上手
开发语言·前端·后端·python·flask·入门
yeyong2 小时前
没有arm64 cpu, 在本地amd64环境上如何制作arm64架构下可用的镜像
后端