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生成加密包)和命令行操作。 提供机器码绑定、无密码模式等灵活选项
相关推荐
村姑飞来了8 分钟前
Spring 扩展:动态使某个 @Import 方式导入的 @Configuration 类失效
后端
开心就好202521 分钟前
前端性能优化移动端网页滚动卡顿与掉帧问题实战
后端
语落心生24 分钟前
如何利用Paimon做流量定时检查? --- 试试标签表
后端
paopaokaka_luck30 分钟前
校园快递小程序(腾讯地图API、二维码识别、Echarts图形化分析)
vue.js·spring boot·后端·小程序·uni-app
用户2986985301434 分钟前
C# 使用Spire.XLS快速生成多表格Excel文件
后端
盖世英雄酱5813642 分钟前
国企“高级”程序员写的那些问题代码(六期)
java·后端
南囝coding1 小时前
这个Web新API让任何内容都能画中画!
前端·后端
林太白1 小时前
VitePress项目工程化应该如何做
前端·后端
字节跳跃者2 小时前
Java 中的 Stream 可以替代 for 循环吗?
java·后端