Java代码混淆技术学习

1. ClassFinal

1.1 创建springboot项目

不做过多演示 spring boot版本2.7.8

1.2 maven引入

 <plugin>
                
                <groupId>net.roseboygroupId>
                <artifactId>classfinal-maven-pluginartifactId>
                <version>1.2.1version>
                <configuration>
                    <password>000000password>
                    <packages>com.examplepackages>
                    <cfgfiles>application.ymlcfgfiles>
                    <excludes>org.springexcludes>

                configuration>
                <executions>
                    <execution>
                        <phase>packagephase>
                        <goals>
                            <goal>classFinalgoal>
                        goals>
                    execution>
                executions>
            plugin>

1.3 反编译

原代码
Java代码混淆技术学习_第1张图片
反编译后(方法中的代码被隐藏)
Java代码混淆技术学习_第2张图片
执行:通过密码执行(java -javaagent:demo1-0.0.1-SNAPSHOT-encrypted.jar -jar demo1-0.0.1-SNAPSHOT-encrypted.jar)
Java代码混淆技术学习_第3张图片

1.4 结果分析

通过classload进行编译,代码还是可以外泄出去

2. proguard

2.1 创建springboot项目

不做过多演示

2.2 maven引入插件

 <plugin>
                <groupId>com.github.wvengengroupId>
                <artifactId>proguard-maven-pluginartifactId>
                <version>2.6.0version>
                <executions>
                    
                    <execution>
                        <phase>packagephase>
                        <goals>
                            <goal>proguardgoal>
                        goals>
                    execution>
                executions>
                <configuration>
                    
                    <injar>${project.build.finalName}.jarinjar>
                    
                    <outjar>${project.build.finalName}.jaroutjar>
                    
                    <obfuscate>trueobfuscate>
                    
                    <proguardInclude>${project.basedir}/proguard.cfgproguardInclude>
                    
                    <libs>
                        <lib>${java.home}/lib/rt.jarlib>
                        <lib>${java.home}/lib/jce.jarlib>
                        <lib>${java.home}/lib/jsse.jarlib>
                    libs>
                    
                    <inLibsFilter>!META-INF/**,!META-INF/versions/9/**.classinLibsFilter>
                    
                    <outputDirectory>${project.basedir}/targetoutputDirectory>
                    
                    <options>
                        
                    options>
                configuration>
            plugin>

2.3 根目录创建cfg

#指定Java的版本
-target 1.8
#proguard会对代码进行优化压缩,他会删除从未使用的类或者类成员变量等
-dontshrink
#是否关闭字节码级别的优化,如果不开启则设置如下配置
-dontoptimize
#混淆时不生成大小写混合的类名,默认是可以大小写混合
-dontusemixedcaseclassnames
# 对于类成员的命名的混淆采取唯一策略
-useuniqueclassmembernames
#混淆时不生成大小写混合的类名,默认是可以大小写混合
-dontusemixedcaseclassnames
#混淆类名之后,对使用Class.forName('className')之类的地方进行相应替代
-adaptclassstrings

#对异常、注解信息予以保留
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
# 此选项将保存接口中的所有原始名称(不混淆)-->
-keepnames interface ** { *; }
# 此选项将保存所有软件包中的所有原始接口文件(不进行混淆)
#-keep interface * extends * { *; }
#保留参数名,因为控制器,或者Mybatis等接口的参数如果混淆会导致无法接受参数,xml文件找不到参数
-keepparameternames
# 保留枚举成员及方法
-keepclassmembers enum * { *; }
# 不混淆所有类,保存原始定义的注释-
#-keepclassmembers class * {
#                        @org.springframework.context.annotation.Bean *;
#                        @org.springframework.beans.factory.annotation.Autowired *;
#                        @org.springframework.beans.factory.annotation.Value *;
#                        @org.springframework.stereotype.Service *;
#                        @org.springframework.stereotype.Component *;
#                        }

#忽略warn消息
-ignorewarnings
#忽略note消息
-dontnote
#打印配置信息
-printconfiguration
-keep public class com.example.demo1.Demo1Application {
        public static void main(java.lang.String[]);
    }

2.4 反编译结果

原项目:
Java代码混淆技术学习_第4张图片
反编译:
Java代码混淆技术学习_第5张图片

2.5 结果

不建议使用,因为只是改了文件的名称,代码中的变量以及代码未被修改,maven插件不支持jdk11

3.Xjar

3.1简介

找到该帖子的破解过程,所有不做使用操作
https://hksanduo.github.io/2021/07/16/2021-07-16-Xjar-Crack/

你可能感兴趣的:(Java基础,java,学习,开发语言)