Explorar o código

清空注解支持

JustryDeng %!s(int64=3) %!d(string=hai) anos
pai
achega
0937a0a37b
Modificáronse 24 ficheiros con 336 adicións e 50 borrados
  1. 16 16
      README.md
  2. BIN=BIN
      class-winter-core/enhance/allatori-8.0.jar
  3. 41 0
      class-winter-core/enhance/allatori.xml
  4. 207 0
      class-winter-core/enhance/allatori配置文件说明.md
  5. 2 0
      class-winter-core/enhance/obfuscation-class-winter-core.bat
  6. 23 1
      class-winter-core/pom.xml
  7. 1 1
      class-winter-core/src/main/java/winter/com/ideaaedi/classwinter/util/EncryptClassArgs.java
  8. 1 1
      class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/AllTest.java
  9. 2 2
      class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/AlreadyProtectedLibs_Test.java
  10. 2 2
      class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/Debug_Test.java
  11. 1 1
      class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/EncryptArgParam_Test.java
  12. 2 2
      class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/ExcludePrefix_Test.java
  13. 1 1
      class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/FinalName_Test.java
  14. 1 1
      class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/IncludeLibs_Test.java
  15. 1 1
      class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/IncludePrefix_Test.java
  16. 3 3
      class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/JvmArgCheck_Test.java
  17. 2 2
      class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/OriginJarOrWar_Test.java
  18. 3 3
      class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/Password_Test.java
  19. 2 2
      class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/SupportFile_Test.java
  20. 3 3
      class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/Tips_Test.java
  21. 5 5
      class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/War_Test.java
  22. 1 1
      class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/Xml_Test.java
  23. 1 1
      class-winter-maven-plugin/pom.xml
  24. 15 1
      pom.xml

+ 16 - 16
README.md

@@ -52,7 +52,7 @@
   <plugin>
       <groupId>com.idea-aedi</groupId>
       <artifactId>class-winter-maven-plugin</artifactId>
-      <version>2.8.0</version>
+      <version>enhance-2.8.0</version>
       <!-- 相关配置 -->
       <configuration>
           <!-- <finalName></finalName>-->
@@ -83,15 +83,15 @@
   ```
   注:不必担心信息泄漏问题,使用此方式生成混淆的jar包时,会擦除pom.xml中关于class-winter-plugin的信息。
   
-- #### <font face="幼圆" ><font face="幼圆"  color = "#86CA5E">**方式二**</font>:通过 [**class-winter-core.jar**](https://gitee.com/JustryDeng/class-winter/raw/master/class-winter-core/src/test/resources/class-winter-core-2.8.0.jar) 主动加密</font>
+- #### <font face="幼圆" ><font face="幼圆"  color = "#86CA5E">**方式二**</font>:通过 [**class-winter-core.jar**](https://gitee.com/JustryDeng/class-winter/raw/master/class-winter-core/src/test/resources/class-winter-core-enhance-2.8.0.jar) 主动加密</font>
 
   ```bash
-  java -jar class-winter-core-2.8.0.jar originJarOrWar=${要加密的项目.jar或.war包} includePrefix=${加密范围} [k3=v3 k4=v4 ...]
+  java -jar class-winter-core-enhance-2.8.0.jar originJarOrWar=${要加密的项目.jar或.war包} includePrefix=${加密范围} [k3=v3 k4=v4 ...]
   # 对于复杂的参数值,可以使用引号引起来
   # linux
-  java -jar class-winter-core-2.8.0.jar k1='v1' k2='v2'
+  java -jar class-winter-core-enhance-2.8.0.jar k1='v1' k2='v2'
   # windows
-  java -jar class-winter-core-2.8.0.jar k1="v1" k2="v2"
+  java -jar class-winter-core-enhance-2.8.0.jar k1="v1" k2="v2"
   ```
 
 ## <font  face="幼圆" color = "#3399EA" >加密参数</font>
@@ -296,8 +296,8 @@ linux示例:tips='请不要直接使用混淆后的jar/war'</td>
   ```bash
   # 假设your-project-encrypted.jar是由class-winter加密后的包,那么你可以这么启动
   java -javaagent:/your-project-encrypted.jar -jar /your-project-encrypted.jar
-  # 也可以用class-winter-core-2.8.0.jar
-  # java -javaagent:/class-winter-core-2.8.0.jar -jar /your-project-encrypted.jar
+  # 也可以用class-winter-core-enhance-2.8.0.jar
+  # java -javaagent:/class-winter-core-enhance-2.8.0.jar -jar /your-project-encrypted.jar
   # 或者指定参数
   # java -javaagent:/your-project-encrypted.jar=debug=true,password=pwd12345 -jar /your-project-encrypted.jar
   # 参数可以引起来(linux)
@@ -313,9 +313,9 @@ linux示例:tips='请不要直接使用混淆后的jar/war'</td>
     编辑tomcat/bin/catalina.sh文件,在最上面加上
 
     ```bash
-    # 如果你有参数, 那么 -javaagent:/class-winter-core-2.8.0.jar=k1=v1,k2=v2
+    # 如果你有参数, 那么 -javaagent:/class-winter-core-enhance-2.8.0.jar=k1=v1,k2=v2
     # tomcat启动往往需要通过decryptProjectPathPrefix指定要解密的路径
-    CATALINA_OPTS="$CATALINA_OPTS -javaagent:/class-winter-core-2.8.0.jar=debug=true,decryptProjectPathPrefix=/usr/local/xxx/";
+    CATALINA_OPTS="$CATALINA_OPTS -javaagent:/class-winter-core-enhance-2.8.0.jar=debug=true,decryptProjectPathPrefix=/usr/local/xxx/";
     export CATALINA_OPTS;
     ```
   
@@ -324,9 +324,9 @@ linux示例:tips='请不要直接使用混淆后的jar/war'</td>
     在tomcat/bin目录下创建setenv.sh文件,并写上
   
     ```bash
-    # 如果你有参数, 那么 -javaagent:/class-winter-core-2.8.0.jar=k1=v1,k2=v2
+    # 如果你有参数, 那么 -javaagent:/class-winter-core-enhance-2.8.0.jar=k1=v1,k2=v2
     # tomcat启动往往需要通过decryptProjectPathPrefix指定要解密的路径
-    JAVA_OPTS="$JAVA_OPTS -javaagent:/class-winter-core-2.8.0.jar=debug=true,decryptProjectPathPrefix=/usr/local/xxx/";
+    JAVA_OPTS="$JAVA_OPTS -javaagent:/class-winter-core-enhance-2.8.0.jar=debug=true,decryptProjectPathPrefix=/usr/local/xxx/";
     export JAVA_OPTS;
     ```
 
@@ -335,9 +335,9 @@ linux示例:tips='请不要直接使用混淆后的jar/war'</td>
     编辑tomcat/bin/catalina.bat文件,在@echo off后加上catalina参数
   
     ```bash
-    rem 如果你有参数, 那么 -javaagent:D:/class-winter-core-2.8.0.jar=k1=v1,k2=v2
+    rem 如果你有参数, 那么 -javaagent:D:/class-winter-core-enhance-2.8.0.jar=k1=v1,k2=v2
     rem tomcat启动往往需要通过decryptProjectPathPrefix指定要解密的路径
-    set CATALINA_OPTS="-javaagent:D:/class-winter-core-2.8.0.jar=decryptProjectPathPrefix=/D:/tmp/"
+    set CATALINA_OPTS="-javaagent:D:/class-winter-core-enhance-2.8.0.jar=decryptProjectPathPrefix=/D:/tmp/"
     ```
   
   - windows方式二
@@ -345,9 +345,9 @@ linux示例:tips='请不要直接使用混淆后的jar/war'</td>
     在tomcat/bin目录下创建setenv.bat文件,并写上
   
     ```bash
-    rem 如果你有参数, 那么 -javaagent:D:/class-winter-core-2.8.0.jar=k1=v1,k2=v2
+    rem 如果你有参数, 那么 -javaagent:D:/class-winter-core-enhance-2.8.0.jar=k1=v1,k2=v2
     rem tomcat启动往往需要通过decryptProjectPathPrefix指定要解密的路径
-    set JAVA_OPTS="-javaagent:D:/class-winter-core-2.8.0.jar=decryptProjectPathPrefix=/D:/tmp/"
+    set JAVA_OPTS="-javaagent:D:/class-winter-core-enhance-2.8.0.jar=decryptProjectPathPrefix=/D:/tmp/"
     ```
   
 - #### <font  face="幼圆" color = "#86CA5E" >IDE解密(启动)</font>
@@ -458,7 +458,7 @@ linux示例:tips='请不要直接使用混淆后的jar/war'</td>
       <parent>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-parent</artifactId>
-          <version>2.8.0</version>
+          <version>enhance-2.8.0</version>
           <relativePath/> <!-- lookup parent from repository -->
       </parent>
       <groupId>com.example</groupId>

BIN=BIN
class-winter-core/enhance/allatori-8.0.jar


+ 41 - 0
class-winter-core/enhance/allatori.xml

@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<config>
+    <input>
+        <jar in="../target/class-winter-core-enhance-2.8.0.jar" out="../target/class-winter-core-enhance-2.8.0.jar"/>
+    </input>
+
+    <!-- 在混淆过程中标记不需要重命名的类、方法、字段 -->
+    <keep-names>
+        <class template="class winter.com.ideaaedi.classwinter.*">
+            <field access="protected+"/>
+            <method access="protected+"/>
+        </class>
+    </keep-names>
+
+    <!-- 用于排除某些不需要混淆的类。 *-表示匹配所有 -->
+    <ignore-classes>
+        <class template="class org.*"/>
+        <class template="class javax.*"/>
+        <class template="class javassist.*"/>
+        <class template="class winter.com.ideaaedi.classwinter.Forward*"/>
+        <class template="class winter.com.ideaaedi.classwinter.util.JavassistUtil*"/>
+    </ignore-classes>
+
+    <!-- 混淆设置 -->
+    <!-- 接口形参名保持不变 -->
+    <property name="local-variables-naming" value="keep-parameters"/>
+    <!-- 字符串加密 -->
+    <property name="string-encryption" value="maximum"/>
+    <property name="string-encryption-type" value="strong"/>
+    <property name="string-encryption-version" value="v4"/>
+    <!-- 行数混淆 -->
+    <property name="line-numbers" value="obfuscate"/>
+    <!-- 泛型混淆 -->
+    <property name="generics" value="remove"/>
+    <!-- 成员重新排序 -->
+    <property name="member-reorder" value="enable"/>
+    <!-- 数据jar压缩等级 -->
+    <property name="output-jar-compression-level" value="9"/>
+    <!-- 删除toString标签 -->
+    <property name="remove-toString" value="enable"/>
+</config>

+ 207 - 0
class-winter-core/enhance/allatori配置文件说明.md

@@ -0,0 +1,207 @@
+
+下述配置说明摘录自[Java打包混淆之Allatori](https://blog.csdn.net/jy317358306/article/details/117464021)
+```xml
+<config>
+    <!-- input标签是用来设置将要被混淆的jar(war,ear)文件的,input标签至少必须包含一个jar或dir标签来配置输入输出文件  -->
+    <!-- input标签的basedir属性,可选配置,用来设置jar文件的相对文件目录的 -->
+    <!-- input标签的single-jar属性,可选配置,Allatori会创建一个包含所有混淆过的类的额外输出jar文件-->
+    <input basedir="input-jars" single-jar="application.jar">
+        <!-- jar标签,设置输入输出文件,这种是具体的jar文件,输入输出同名的话,混淆后的文件会覆盖混淆前的为文件  -->
+        <jar in="app.jar" out="app-obf.jar"/>
+        <!-- jar标签,通配符的配置方式  -->
+        <jar in="input/*.jar" out="output/*.jar"/>
+        <!-- dir标签,配置输入输出目录  -->
+        <dir in="in-dir" out="out-dir"/>
+    </input>
+    
+    <!-- classpath标签用于设置被混淆程序的类路径,它不必配置应用程序所需的所有jar包,但是缺少依赖包可能混淆没那么彻底,同时混淆的过程中也可能会出现告警 -->
+    <!-- basedir,与input的basedir同理,配置一个相对路径 -->
+    <classpath basedir="library-jars">
+        <!-- 添加一个library.jar的jar到类路径中 -->
+        <jar name="library.jar"/>
+        <!-- 配置一个目录下的jar到类路径 -->
+        <jar name="lib/*.jar"/>
+        <!-- 配置lib2下的目录以及它的子目录下的jar到类路径 -->
+        <jar name="lib2/**/*.jar"/>
+    </classpath>
+
+    <!-- keep-names标签用于在混淆过程中标记不需要重命名的类、方法、字段的名称,所以该标签下有class/method/field这三种标签。通常不建议混淆的几种情况如下:  -->
+    <!-- 1.如果混淆的jar是一个公共类库,那么public类型的api就不能被混淆(即不需要重命名) -->
+    <!-- 2.如果混淆的jar是一个独立的应用程序,那么该应用程序的启动类即主类不应该被混淆 -->
+    <!-- 3.如果某些类和方法被反射使用了,那么这些类和方法也不应该被混淆 -->
+    <keep-names>
+        <!-- class标签用来匹配类,它有access、template、ignore、stop四个属性,至少要带有access、template中的一个属性 -->
+        <!-- access通过访问权限隔离来匹配,带加号('+'),表示更宽的权限范围都可以匹配上 -->
+        <!-- template通过表达式来匹配,*标识通配符 -->
+        <!-- ignore可选,当它设置为'true'或'yes'时,类会被混淆,但是方法和属性不会被混淆 -->
+        <!-- stop可选,当它设置为'true'或'yes'时,类、方法、属性都会被混淆 -->
+        
+        <!-- stop属性,控制是否被重命名,等于true,配置的class com.company.abc.*下的类、方法、属性都会被重命名 -->
+        <class template="class com.company.abc.*" stop="true"/>
+        
+        <!-- 下面是不需要重名名的规则 -->
+        <!-- 匹配任何包下名字为'Main'的类 -->
+        <class template="class *.Main"/>
+
+        <!-- 匹配以‘Bean’结尾的类 -->
+        <class template="class *Bean">
+            <!-- 匹配所有的属性,access匹配方式 -->
+            <field access="private+"/>
+            <!-- 匹配所有public int的属性 -->
+            <field template="public int *"/>
+            <!-- 匹配所有的静态属性 -->
+            <field template="static *"/>
+            <!-- 匹配所有protected和public且为String的属性 -->
+            <field template="protected+ java.lang.String *"/>
+            <!-- 匹配所有方法 -->
+            <method template="private+ *(**)"/>
+            <!-- 匹配所有Get方法 -->
+            <method template="private+ get*(**)"/>
+            <!-- 匹配所有参数为String的方法,同时parameters="keep"会使方法的参数不会被混淆 -->
+            <method template="private+ *(java.lang.String)" parameters="keep"/>
+        </class>
+
+        <!-- 匹配序列化的类 -->
+        <class template="class * instanceof java.io.Serializable">
+            <field template="static final long serialVersionUID"/>
+            <method template="void writeObject(java.io.ObjectOutputStream)"/>
+            <method template="void readObject(java.io.ObjectInputStream)"/>
+            <method template="java.lang.Object writeReplace()"/>
+            <method template="java.lang.Object readResolve()"/>
+        </class>
+
+        <!-- 匹配所有applets -->
+        <class template="class * instanceof java.applet.Applet"/>
+        <!-- 匹配所有servlets -->
+        <class template="class * instanceof javax.servlet.Servlet"/>
+        <!-- 匹配所有 midlets -->
+        <class template="class * instanceof javax.microedition.midlet.MIDlet"/>
+    </keep-names>
+    
+    <!-- ignore-classes标签配置忽略混淆的类,被忽略混淆的类所引用的类和方法也不会被混淆 -->
+    <!-- ignore-classes的匹配规则和keep-names的匹配规则是一样的 -->
+    <ignore-classes>
+        <class template="class com.company.abc.*"/>
+        <class template="class com.company.xyz.SomeClass"/>
+    </ignore-classes>
+    
+    <!-- watermark标签是用来设置水印的标签的,它有key和value两个属性,不管jar是否混淆,都可以添加水印 -->
+    <!--  key必填,应用程序嵌入水印的密钥 -->
+    <!-- value必须,水印的具体类容,可以是版本、客户名称、公司名称等等,也可以通过额外的配置文件去配置-->
+    <watermark key="secure-key-to-extract-watermark" value="Customer: John Smith"/>
+    
+    <!-- expiry标签设置应用程序的过期时间,它有两个属性data、string -->
+    <!-- data到期日期,必填,yyyy/mm/dd格式 -->
+    <!-- string,必填,程序到期后的提示信息 -->
+    <expiry date="2017/01/01" string="EXPIRED!"/>
+
+    <!-- property标签用来设置不同混淆处理的属性,它有两个属性,name和value-->
+    <!-- name为log-file的属性是日志文件,日志文件用来从混淆后的堆栈还原原始堆栈跟踪的,它保持对名称和行号的原始映射的混淆 -->
+    <!-- value 为日志文件名或路劲加文件名,不配置的话,日志就不会被创建-->
+    <property name="log-file" value="log.xml"/>
+    
+    <!-- random-seed随机种子,不设置的情况下,每次混淆出来的jar内容其实都是不一样的,这样每次重新打包无法分析差异,以及定位问题,随机种子就保证了同一应用程序可以输出相同的混淆jar,同一应用程序的不同版本我们应该使用不同的随机种子  -->
+    <!-- 随机种子的值可以是任何文本,默认值为当前时间的毫秒数 -->
+    <property name="random-seed" value="any text here"/>
+    
+    <!-- string-encryption, encryption虽然是加密的意思,但这里这个标签我觉得应该是string字符串比较的优化,可能会导致结果与源代码的不一致-->
+    <property name="string-encryption" value="enable"/>
+    <!-- 通过apply2class设置不同的加密类型应用于不同的类下的字符串,加密类型有三种:fast、strong、custom -->
+    <!-- fast,默认类型,Allatori将使用非常快速的字符串混淆算法 -->
+    <!-- strong,Allatori将使用强大而复杂的字符串混淆算法,但是这比较缓慢 -->
+    <!-- custom,Allatori将使用指定的字符串混淆算法 -->
+    <property name="string-encryption-type" value="strong" apply2class="class com.abc.*"/>
+    <!-- string-encryption-version 混淆字符串的算法版本,默认V4,V4和V3是不同算法思想,不代表V3过时 -->
+    <property name="string-encryption-version" value="v3"/>
+    <!-- string-encryption-ignored-strings 设置该文件中包含的字符串都不会被混淆 -->
+    <property name="string-encryption-ignored-strings" value="patterns.txt"/>
+    
+    <!-- 通过apply2class启动或禁用控制流混淆处理,属性有enable 和 disable -->
+    <!-- enable默认属性,Allatori会修改方法的代码,但不会改变程序运行的行为,这会使得反编译更困难,同时使程序更小更快 -->
+    <property name="control-flow-obfuscation" value="disable" apply2class="class com.abc.*"/>
+    <!-- 配置指定的类使用控制流混淆处理,它有三种属性normal、disable、maximum -->
+    <!-- normal默认,Allatori默认混淆程序控制流,这会让程序更大更慢,Allatori也会尽量少的去转换-->
+    <!-- disable,禁用控制流混淆 -->
+    <!-- maximum,充分使用控制流混淆 -->
+    <property name="extensive-flow-obfuscation" value="maximum" apply2class="class com.abc.*"/>
+    
+    <!-- 配置默认包的名称,如果某个包下的所有类都被重命名了,该包下的类就会被移动到这个默认包下,配置空字符会使得输出包变小 -->
+    <property name="default-package" value="com.company.product"/>
+    <!-- 是否强制将所有重命名的类移动到默认包下,默认disable -->
+    <!-- disable默认,只有包下所有的类重命名了才会移动到默认包下面,否则只有重命名了,类就会被移动到默认包下 -->
+    <property name="force-default-package" value="enable"/>
+    <!-- 包混淆命名规则,有abc、123、keep、customer四种 -->
+    <!-- abc/123,包名混淆会被命名为abc/123等等字符串或数字,默认abc -->
+    <!-- keep 维持包的原名字,即不混淆 -->
+    <!-- custom(filename.txt) 自定义,名字从配置的文件中取-->
+    <property name="packages-naming" value="abc"/>
+    <!-- 类名字的混淆规则 -->
+    <!-- compact默认,尽可能的使用单字符混淆类名,可能存在a和A的class -->
+    <!-- iii/abc/123 使用罗马数字/字符串/阿拉伯数字命名 -->
+    <!-- windows 使用windows上禁用的名称作为类名('con'、'prn'、'aux'、'nul'等)-->
+    <!-- custom(filename.txt) 自定义,从自定义文件中取-->
+    <!-- unique 类名的混淆唯一 -->
+    <!-- keep-$-sign 类名重命名保留java内部的命名符号$ -->
+    <property name="classes-naming" value="abc"/>
+    <!-- 方法名混淆命名规则,跟类名混淆类似,没有 keep-$-sign,多了real和keywords -->
+    <!-- real,方法名没被配置规则所重命名就会被命名为重命名方法 -->
+    <!-- keywords,使用java的保留字命名-->
+    <property name="methods-naming" value="keywords"/>
+    <!-- 属性混淆命名,同方法名一样的规则 -->
+    <property name="fields-naming" value="keywords"/>
+    <!-- 指定的字符串会作为所有重命名类、方法、属性的前缀 -->
+    <property name="classes-naming-prefix" value="c_"/>
+    <property name="methods-naming-prefix" value="m_"/>
+    <property name="fields-naming-prefix" value="f_"/>
+    <!-- optimize默认,局部变量名优化,减少局部变量名,尽量使用同一名称 -->
+    <!-- single-name,几乎所有的局部变量名使用同一名称-->
+    <!-- abc,局部变量名使用a/b/c等字符串-->
+    <!-- remove,删除原始的局部变量名-->
+    <!-- keep-parameters,参数名不变,局部变量名被重命名-->
+    <!-- keep 保留原局部变量,但不推荐-->
+    <property name="local-variables-naming" value="single-name"/> 
+    <!-- disable默认,Allatori根据keep names规则执行类、方法和字段的重命名 -->
+    <!-- enable,不会重命名所有类、方法和字段。局部变量命名由局部变量命名属性单独控制。根据配置文件中的设置,将正常应用字符串加密、流混淆等-->
+    <property name="skip-renaming" value="enable"/>
+    <!-- 资源文件重命名,diable默认,不重命名 -->
+    <property name="update-resource-names" value="enable"/>
+    <!-- 指定资源文件内容的字符编码集 -->
+    <property name="update-resource-contents" value="enable" apply2file="*.xml"/>
+    <!-- 堆栈信息行号设置,obfuscate默认,堆栈信息行号也会被混淆,不过可以恢复-->
+    <!-- remove 移除堆栈信息行号,keep 保留原始堆栈信息行号-->
+    <property name="line-numbers" value="obfuscate"/>
+    <!-- keep 如果您使用反射来确定泛型类型,或者需要使用模糊化jar作为库来编译其他类,那么您需要保留泛型类型签名。 -->
+    <!-- remove 移除泛型 -->
+    <property name="generics" value="keep" apply2class="class com.abc.*"/>
+    <!-- Java内部类设置,keep默认混淆类的内部类会被保留 -->
+    <!-- remove 会移除信息属性和改变类结构-->
+    <property name="inner-classes" value="keep" apply2class="class com.abc.*"/>
+    <!-- Allatori将会混淆类内部的字段和方法的顺序,enable默认,random和enable相同会混淆顺序 -->
+    <!-- alphabetic字段和方法将会按照字母顺序排列,disable类内部的方法和属性顺序混淆不可用 -->
+    <property name="member-reorder" value="random" apply2class="class com.abc.*"/>
+    <!-- 设置进行类垃圾回收,disable默认,默认禁用类回收,enable 无子类的类将会被设置为final,这个设置仅用于独立应用程序 -->
+    <property name="finalize" value="enable"/>
+    <!-- Allatori将使用给定的标识符重命名方法和字段的名称,这会标记你的混淆文件,你可以用这些来标记你的演示版本 -->
+    <!-- 这个值会添加到'ALLATORI_DEMO_'后面作为你的演示版本的名称 -->
+    <property name="version-marker" value="THIS_IS_DEMO_VERSION"/>
+    <!-- 标记为复合的方法,private,all,package,protected,public,disable,根据权限来确定是否标记 -->
+    <property name="synthetize-methods" value="all" apply2class="class com.abc.*"/>
+    <!-- 标记为复合的属性,private,all,package,protected,public,disable,根据权限来确定是否标记 -->
+    <property name="synthetize-fields" value="all" apply2class="class com.abc.*"/>
+    <!-- 移除toString方法,disable默认不会移除,enable由于toString通常用于调试,故会删除toString方法 -->
+    <property name="remove-toString" value="enable" apply2class="class com.abc.*"/>
+    <!-- 移除指定方法的调用,可用于删除调试日志记录调用 -->
+    <property name="remove-calls" value="com.package.Logger.debug" apply2class="class com.abc.*"/>
+    <!-- 是否删除一些注释,可用于删除不必要的或者调试的注释 -->
+    <property name="remove-annotations" value="com.package.Annotation" apply2class="class com.abc.*"/>
+    <!-- 设置压缩级别,根据ZipOutputStream来的0不压缩,9最高压缩 -->
+    <property name="output-jar-compression-level" value="9"/>
+    <!-- 如果输入jar的同文件目录下包含了同名文件是否保留一个,remove默认保留一个 -->
+    <!-- Allatori允许同名文件的输出,但是java标准api不允许,所以你要设置JVM的‑‑illegal‑access=permit参数保留同名文件 -->
+    <property name="output-jar-duplicate-name-entries" value="keep"/>
+    <!-- 设置增量log文件,用来保证这次的混淆跟上次的混淆相同部分的一致性 -->
+    <property name="incremental-obfuscation" value="input-renaming-log.xml"/>
+    <!-- 同名方法混淆一致性的设置,disabled默认禁用,enable,同名方法和属性混淆后的名字和属性也是一致的 -->
+    <property name="unique-renaming" value="enable" apply2class="class com.abc.*"/>
+</config>
+```

+ 2 - 0
class-winter-core/enhance/obfuscation-class-winter-core.bat

@@ -0,0 +1,2 @@
+rem windows执行此bat脚本执行混淆(会弹出一个命令行窗口执行此指令,执行完毕关闭窗口即可,maven会继续往下执行)
+java -jar ./enhance/allatori-8.0.jar ./enhance/allatori.xml

+ 23 - 1
class-winter-core/pom.xml

@@ -5,7 +5,7 @@
     <parent>
         <groupId>com.idea-aedi</groupId>
         <artifactId>class-winter</artifactId>
-        <version>2.8.0</version>
+        <version>enhance-2.8.0</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
@@ -53,6 +53,28 @@
                     </execution>
                 </executions>
             </plugin>
+
+            <!-- 运行程序的插件 -->
+            <!-- 这里利用此插件,执行指令,对class-winter-core进行混淆 -->
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>exec-maven-plugin</artifactId>
+                <version>3.1.0</version>
+                <executions>
+                    <execution>
+                        <id>obfuscation-class-winter-core</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>exec</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <configuration>
+                    <executable>
+                        start cmd /k  ${basedir}/enhance/obfuscation-class-winter-core.bat
+                    </executable>
+                </configuration>
+            </plugin>
         </plugins>
     </build>
 </project>

+ 1 - 1
class-winter-core/src/main/java/winter/com/ideaaedi/classwinter/util/EncryptClassArgs.java

@@ -8,7 +8,7 @@ import java.util.Objects;
  *
  * @author <font size = "20" color = "#3CAA3C"><a href="https://gitee.com/JustryDeng">JustryDeng</a></font> <img
  * src="https://gitee.com/JustryDeng/shared-files/raw/master/JustryDeng/avatar.jpg" />
- * @since 2.8.0
+ * @since enhance-2.8.0
  */
 public class EncryptClassArgs {
     

+ 1 - 1
class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/AllTest.java

@@ -77,7 +77,7 @@ public class AllTest {
         String alreadyProtectedLibs = "encrypted-lib-have-pwd-1.0.0.jar:qwer123~";
         String jvmArgCheck = "-XX:+DisableAttachMechanism";
         String debug = "true";
-        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.0.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-enhance-2.8.0.jar"
                 + " originJarOrWar=" + originJarOrWar
                 + " includePrefix=" + includePrefix
                 + " excludePrefix=" + excludePrefix

+ 2 - 2
class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/AlreadyProtectedLibs_Test.java

@@ -67,7 +67,7 @@ public class AlreadyProtectedLibs_Test {
         String originJarOrWar = projectRootDir + Constant.LINUX_FILE_SEPARATOR + "my-project-with-encrypted-lib-no-pwd.jar";
         String includePrefix = "non-exist";
         String alreadyProtectedLibs = "encrypted-lib-no-pwd-1.0.0.jar";
-        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.0.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-enhance-2.8.0.jar"
                 + " originJarOrWar=" + originJarOrWar
                 + " includePrefix=" + includePrefix
                 + " alreadyProtectedLibs=" + alreadyProtectedLibs
@@ -110,7 +110,7 @@ public class AlreadyProtectedLibs_Test {
         String includePrefix = "non-exist";
         String alreadyProtectedLibs = "encrypted-lib-have-pwd-1.0.0.jar:qwer123~";
     
-        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.0.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-enhance-2.8.0.jar"
                 + " originJarOrWar=" + originJarOrWar
                 + " includePrefix=" + includePrefix
                 + " alreadyProtectedLibs=" + alreadyProtectedLibs

+ 2 - 2
class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/Debug_Test.java

@@ -36,7 +36,7 @@ public class Debug_Test {
         String originJarOrWar = projectRootDir + "boot-jar.jar";
         String includePrefix = "com";
         
-        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.0.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-enhance-2.8.0.jar"
                 + " originJarOrWar=" + originJarOrWar
                 + " includePrefix=" + includePrefix
                 ;
@@ -64,7 +64,7 @@ public class Debug_Test {
         String originJarOrWar = projectRootDir + "boot-jar.jar";
         String includePrefix = "com";
     
-        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.0.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-enhance-2.8.0.jar"
                 + " originJarOrWar=" + originJarOrWar
                 + " includePrefix=" + includePrefix
                 + " debug=" + true

+ 1 - 1
class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/EncryptArgParam_Test.java

@@ -67,7 +67,7 @@ public class EncryptArgParam_Test {
             includePrefix= sb.toString();
         }
         
-        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.0.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-enhance-2.8.0.jar"
                 + " originJarOrWar=" + originJarOrWar
                 + " includePrefix=" + includePrefix
                 + " debug=true"

+ 2 - 2
class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/ExcludePrefix_Test.java

@@ -38,7 +38,7 @@ public class ExcludePrefix_Test {
         String originJarOrWar = projectRootDir + "boot-jar.jar";
         String includePrefix = "com.aspire.ssm.util.AesEncryptDecryptUtil,com.aspire.ssm.util.DbSecurityBeanUtil";
         
-        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.0.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-enhance-2.8.0.jar"
                 + " originJarOrWar=" + originJarOrWar
                 + " includePrefix=" + includePrefix
                 + " debug=" + true
@@ -72,7 +72,7 @@ public class ExcludePrefix_Test {
         String includePrefix = "com.aspire.ssm.util.AesEncryptDecryptUtil,com.aspire.ssm.util.DbSecurityBeanUtil";
         String excludePrefix = "com.aspire.ssm.util.DbSecurityBeanUtil";
     
-        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.0.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-enhance-2.8.0.jar"
                 + " originJarOrWar=" + originJarOrWar
                 + " includePrefix=" + includePrefix
                 + " excludePrefix=" + excludePrefix

+ 1 - 1
class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/FinalName_Test.java

@@ -23,7 +23,7 @@ public class FinalName_Test {
         String includePrefix = "com";
         String finalName = "YiYaKaKa";
     
-        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.0.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-enhance-2.8.0.jar"
                 + " originJarOrWar=" + originJarOrWar
                 + " includePrefix=" + includePrefix
                 + " finalName=" + finalName

+ 1 - 1
class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/IncludeLibs_Test.java

@@ -42,7 +42,7 @@ public class IncludeLibs_Test {
         String includePrefix = "org.springframework.aop.target.dynamic,com.google.common.xml";
         String includeLibs = "spring-aop-5.1.8.RELEASE.jar,guava-28.2-jre.jar";
     
-        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.0.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-enhance-2.8.0.jar"
                 + " originJarOrWar=" + originJarOrWar
                 + " includePrefix=" + includePrefix
                 + " includeLibs=" + includeLibs

+ 1 - 1
class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/IncludePrefix_Test.java

@@ -39,7 +39,7 @@ public class IncludePrefix_Test {
         String originJarOrWar = projectRootDir + "boot-jar.jar";
         String includePrefix = "com.aspire.ssm.util";
     
-        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.0.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-enhance-2.8.0.jar"
                 + " originJarOrWar=" + originJarOrWar
                 + " includePrefix=" + includePrefix
                 + " debug=" + true

+ 3 - 3
class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/JvmArgCheck_Test.java

@@ -33,7 +33,7 @@ public class JvmArgCheck_Test {
     
         String jvmArg = "-XX:+DisableAttachMechanism,-Xms1024M";
         
-        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.0.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-enhance-2.8.0.jar"
                 + " originJarOrWar=" + originJarOrWar
                 + " includePrefix=" + includePrefix
                 + " jvmArgCheck=" + jvmArg
@@ -65,7 +65,7 @@ public class JvmArgCheck_Test {
     
         String jvmArg = "-XX:+DisableAttachMechanism,-Xms1024M";
         
-        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.0.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-enhance-2.8.0.jar"
                 + " originJarOrWar=" + originJarOrWar
                 + " includePrefix=" + includePrefix
                 + " jvmArgCheck=" + jvmArg
@@ -97,7 +97,7 @@ public class JvmArgCheck_Test {
     
         String jvmArg = "-XX:+DisableAttachMechanism";
         
-        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.0.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-enhance-2.8.0.jar"
                 + " originJarOrWar=" + originJarOrWar
                 + " includePrefix=" + includePrefix
                 + " jvmArgCheck=" + jvmArg

+ 2 - 2
class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/OriginJarOrWar_Test.java

@@ -32,7 +32,7 @@ public class OriginJarOrWar_Test {
         String originJarOrWar = projectRootDir + "non-exist.jar";
         String includePrefix = "com.aspire.ssm.util";
     
-        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.0.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-enhance-2.8.0.jar"
                 + " originJarOrWar=" + originJarOrWar
                 + " includePrefix=" + includePrefix
                 + " debug=" + true
@@ -58,7 +58,7 @@ public class OriginJarOrWar_Test {
         String originJarOrWar = projectRootDir + "boot-jar.jar";
         String includePrefix = "com.aspire.ssm.util";
     
-        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.0.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-enhance-2.8.0.jar"
                 + " originJarOrWar=" + originJarOrWar
                 + " includePrefix=" + includePrefix
                 + " debug=" + true

+ 3 - 3
class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/Password_Test.java

@@ -34,7 +34,7 @@ public class Password_Test {
         String includePrefix = "com";
         String password = "pwd123";
     
-        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.0.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-enhance-2.8.0.jar"
                 + " originJarOrWar=" + originJarOrWar
                 + " includePrefix=" + includePrefix
                 + " password=" + password
@@ -65,7 +65,7 @@ public class Password_Test {
         String includePrefix = "com";
         String password = "pwd123";
     
-        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.0.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-enhance-2.8.0.jar"
                 + " originJarOrWar=" + originJarOrWar
                 + " includePrefix=" + includePrefix
                 + " password=" + password
@@ -97,7 +97,7 @@ public class Password_Test {
         String includePrefix = "com";
         String password = "pwd123";
     
-        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.0.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-enhance-2.8.0.jar"
                 + " originJarOrWar=" + originJarOrWar
                 + " includePrefix=" + includePrefix
                 + " password=" + password

+ 2 - 2
class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/SupportFile_Test.java

@@ -42,7 +42,7 @@ public class SupportFile_Test {
         String originJarOrWar = projectRootDir + "normal-jar.jar";
         String includePrefix = "com";
         
-        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.0.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-enhance-2.8.0.jar"
                 + " originJarOrWar=" + originJarOrWar
                 + " includePrefix=" + includePrefix
                 ;
@@ -62,7 +62,7 @@ public class SupportFile_Test {
         String includePrefix = "com";
         String supportFile = projectRootDir + "help";
         
-        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.0.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-enhance-2.8.0.jar"
                 + " originJarOrWar=" + originJarOrWar
                 + " includePrefix=" + includePrefix
                 + " supportFile=" + supportFile

+ 3 - 3
class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/Tips_Test.java

@@ -32,7 +32,7 @@ public class Tips_Test {
         String originJarOrWar = projectRootDir + "boot-jar.jar";
         String includePrefix = "com";
     
-        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.0.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-enhance-2.8.0.jar"
                 + " originJarOrWar=" + originJarOrWar
                 + " includePrefix=" + includePrefix
                 ;
@@ -55,8 +55,8 @@ public class Tips_Test {
         String tips = "[潘嘎之交] 潘: 你别怪潘叔说话比较直白, 网络上的东西都是虚拟的, 你把握不住, 孩子! 因为这里的水很深...";
     
         // 如果tips值由一些特殊字符(如空格等)的话,可以用windows双引号(linux单引号)引起来。
-        // java -jar class-winter-core-2.8.0.jar originJarOrWar=/boot-jar.jar includePrefix=com tips="[潘嘎之交] 潘: 你别怪潘叔说话比较直白, 网络上的东西都是虚拟的, 你把握不住, 孩子! 因为这里的水很深..."
-        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.0.jar"
+        // java -jar class-winter-core-enhance-2.8.0.jar originJarOrWar=/boot-jar.jar includePrefix=com tips="[潘嘎之交] 潘: 你别怪潘叔说话比较直白, 网络上的东西都是虚拟的, 你把握不住, 孩子! 因为这里的水很深..."
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-enhance-2.8.0.jar"
                 + " originJarOrWar=" + originJarOrWar
                 + " includePrefix=" + includePrefix
                 + " tips=" + (BashUtil.IS_WINDOWS ? "\"".concat(tips).concat("\"") : "'".concat(tips).concat("'"));

+ 5 - 5
class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/War_Test.java

@@ -34,7 +34,7 @@ public class War_Test {
         String originJarOrWar = projectRootDir + "war-project.war";
         String includePrefix = "com";
     
-        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.0.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-enhance-2.8.0.jar"
                 + " originJarOrWar=" + originJarOrWar
                 + " includePrefix=" + includePrefix
                 ;
@@ -62,7 +62,7 @@ public class War_Test {
         String includePrefix = "com";
         String password = "123456";
     
-        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.0.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-enhance-2.8.0.jar"
                 + " originJarOrWar=" + originJarOrWar
                 + " includePrefix=" + includePrefix
                 + " password=" + password
@@ -93,7 +93,7 @@ public class War_Test {
         String alreadyProtectedLibs = "encrypted-lib-no-pwd.jar";
         String password = "oop857857";
     
-        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.0.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-enhance-2.8.0.jar"
                 + " originJarOrWar=" + originJarOrWar
                 + " includePrefix=" + includePrefix
                 + " alreadyProtectedLibs=" + alreadyProtectedLibs
@@ -124,7 +124,7 @@ public class War_Test {
         String alreadyProtectedLibs = "encrypted-lib-have-pwd.jar:qwer123~";
         String password = "yiyakaka";
         
-        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.0.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-enhance-2.8.0.jar"
                 + " originJarOrWar=" + originJarOrWar
                 + " includePrefix=" + includePrefix
                 + " alreadyProtectedLibs=" + alreadyProtectedLibs
@@ -160,7 +160,7 @@ public class War_Test {
         String alreadyProtectedLibs = "encrypted-lib-have-pwd.jar:qwer123~";
         String debug = "true";
     
-        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.0.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-enhance-2.8.0.jar"
                 + " originJarOrWar=" + originJarOrWar
                 + " includePrefix=" + includePrefix
                 + " excludePrefix=" + excludePrefix

+ 1 - 1
class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/Xml_Test.java

@@ -31,7 +31,7 @@ public class Xml_Test {
         String toCleanXmlChildElementName = "select";
         
         
-        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.0.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-enhance-2.8.0.jar"
                 + " originJarOrWar=" + originJarOrWar
                 + " includePrefix=" + includePrefix
                 + " includeXmlPrefix=" + includeXmlPrefix

+ 1 - 1
class-winter-maven-plugin/pom.xml

@@ -5,7 +5,7 @@
     <parent>
         <groupId>com.idea-aedi</groupId>
         <artifactId>class-winter</artifactId>
-        <version>2.8.0</version>
+        <version>enhance-2.8.0</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 

+ 15 - 1
pom.xml

@@ -9,7 +9,7 @@
     </modules>
     <groupId>com.idea-aedi</groupId>
     <artifactId>class-winter</artifactId>
-    <version>2.8.0</version>
+    <version>enhance-2.8.0</version>
 
     <!-- 配置项目的基础信息 -->
     <name>class-winter</name>
@@ -27,6 +27,20 @@
         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
     </properties>
 
+
+<!--        <distributionManagement>-->
+<!--            <repository>-->
+<!--                <id>aliyun-nexus-jd</id>-->
+<!--                <url>http://47.105.39.189:8081/repository/maven-releases/</url>-->
+<!--            </repository>-->
+
+<!--            <snapshotRepository>-->
+<!--                <id>aliyun-nexus-jd</id>-->
+<!--                <url>http://47.105.39.189:8081/repository/maven-snapshots/</url>-->
+<!--            </snapshotRepository>-->
+<!--        </distributionManagement>-->
+
+
     <build>
         <plugins>
             <!-- 打包源码 -->