• 关于allatori代码混淆技术的一次实践


    1. Java代码混淆的背景

    1.1 混淆使用场景

    我们在工程应用中经常会遇到核心代码不希望给别人抄袭,但系统是用java开发的,无法避免被反编译的情况,这样可以用代码混淆的方式来解决。调查了一下主流的第三方混淆工具,目前主流的有三种技术yguard、ProGuard、Allatori,我们目前方案就是采用Allatori进行Java的代码混淆。

    1.2 Allatori简介

    allatori官方网站:https://allatori.com/
    proguard官网: https://www.guardsquare.com/proguard.

    2. 混淆的插件的集成

    2.1 操作流程

    (以auth-serivce服务为例)

    1. 在auth-service服务下建立allatori文件夹
    2. 将官网下载的lib文件夹拷贝到allatori文件夹下

    在这里插入图片描述

    1. 新建allatori.xml文件(log.xml文件在package的时候会自动生成)
    <config>
        <input>
            
            <jar in="../app/lib/service-deadline-control-sca-boot-starter-1.5.1-SNAPSHOT.jar"
                 out="../app/lib/service-deadline-control-sca-boot-starter-1.5.1-SNAPSHOT.jar"/>
        input>
    
        <classpath>
            <jar name="../app/lib/*.jar"/>
        classpath>
    
        <keep-names>
    
    
    
    
    
            <class template="class com.aaa.sca.config.ServiceDeadlineControlConfiguration">class>
            <class template="class com.aaa.sca.constant.ServiceDeadlineControlConstants">class>
            <class template="class com.aaa.sca.model.*">class>
            <class template="class com.aaa.sca.runner.AuthCodeApplicationRunner">class>
            <class template="class com.aaa.sca.scheduler.ServiceCertificateReloadScheduler">class>
            <class template="class com.aaa.sca.service.ServiceCertificateService">class>
            <class template="class com.aaa.sca.util.*">class>
    
    
            
    
    
    
    
    
    
    
        keep-names>
    
        <ignore-classes>
            
    
            <class template="class com.aaa.sca.config.ServiceDeadlineControlConfiguration">class>
            <class template="class com.aaa.sca.model.AuthCodeContent">class>
            <class template="class com.aaa.sca.model.ServiceCertificate">class>
    
            
            <class template="class *springframework*"/>
            <class template="class *spring*"/>
            <class template="class *framework*"/>
            <class template="class *alibaba*"/>
            <class template="class *persistence*"/>
            <class template="class *apache*"/>
            
    
        ignore-classes>
    
        <property name="log-file" value="../allatori/log.xml"/>
    
        <property name="classes-naming" value="abc"/>
        <property name="classes-naming" value="unique"/>
        <property name="fields-naming" value="123"/>
        <property name="fields-naming" value="iii"/>
    
        <property name="string-encryption" value="enable"/>
        <property name="string-encryption-type" value="fast"/>
        <property name="string-encryption-version" value="v4"/>
    config>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    1. 在项目的pom.xml新增pulgin依赖

      				<plugin>
                      <groupId>org.apache.maven.pluginsgroupId>
                      <artifactId>maven-resources-pluginartifactId>
                      <executions>
                          <execution>
                              <id>copy-and-filter-allatori-configid>
                              <phase>packagephase>
                              <goals>
                                  <goal>copy-resourcesgoal>
                              goals>
                              <configuration>
                                  <outputDirectory>${basedir}/targetoutputDirectory>
                                  <resources>
                                      <resource>
                                          <directory>allatoridirectory>
                                          <includes>
                                              <include>allatori.xmlinclude>
                                          includes>
                                          <filtering>truefiltering>
                                      resource>
                                  resources>
                              configuration>
                          execution>
                      executions>
                  plugin>
      
                  <plugin>
                      <groupId>org.codehaus.mojogroupId>
                      <artifactId>exec-maven-pluginartifactId>
                      <version>1.2.1version>
                      <executions>
                          <execution>
                              <id>run-allatoriid>
                              <phase>packagephase>
                              <goals>
                                  <goal>execgoal>
                              goals>
                          execution>
                      executions>
                      <configuration>
                          <executable>javaexecutable>
                          <arguments>
                              <argument>-Xms128margument>
                              <argument>-Xmx512margument>
                              <argument>-jarargument>
                              <argument>allatori/lib/allatori.jarargument>
                              <argument>${basedir}/target/allatori.xmlargument>
                          arguments>
                      configuration>
                  plugin>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32
      • 33
      • 34
      • 35
      • 36
      • 37
      • 38
      • 39
      • 40
      • 41
      • 42
      • 43
      • 44
      • 45
      • 46
      • 47
      • 48
      • 49
      • 50

    2.2 混淆的配置说明

    allatori.xml为allatori插件的混淆配置

     		
            
            
        
    
    • 1
    • 2
    • 3
    • 4
    • 5

    in是未混淆的jar的输入路径, out是混淆后的jar输出路径

    		
            
        
    
    • 1
    • 2
    • 3

    classpath是jar依赖的相关jar

        
                
                    
                     
                
                
        
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    class 指定保持不变的类名,配置类保持,不然springboot加载会有问题

    field 指定保持不变的属性名

    method 指定保持不变的方法名

      
            
    
            
            
            
    
            
            
            
            
            
            
            
            
        
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    ignore-classes是指定完全不混淆的class

    2.3 校验混淆结果

    1. 执行maven指令,进行打包,如果看到一下日志,说明打包成功;
    mvn clean install  -Dmaven.test.skip=true
    
    • 1

    在这里插入图片描述

    1. 使用jd-gui工具反编译jar包,查看代码,看到以下效果就是混淆成功了;

      在这里插入图片描述

    2. 启动项目是否正常,查看日志是否正常,各方面政策则完成混淆可以直接推代码到测试环境运行;

    参考博客:

    https://blog.csdn.net/lonelymanontheway/article/details/104574050/

    https://blog.csdn.net/blackoon88/article/details/124630907

  • 相关阅读:
    Spring入门第一讲——Spring框架的快速入门
    05 需求分析阶段
    ICMPv6与NDP
    猿创征文|机器学习实战(8)——随机森林
    Chapter 5. Concurrency and Race Conditions
    C++数据结构课程设计
    【linux/docker】解决ORA-28000: the account is locked
    Bootstrap Blazor Table 组件(三)智能生成
    Envoy熔断限流实践(二)Rainbond基于RLS服务全局限流
    (02)Cartographer源码无死角解析-(28) GlobalTrajectoryBuilder构建过程与整体分析
  • 原文地址:https://blog.csdn.net/Carson073/article/details/133783529