Selaa lähdekoodia

Merge branch 'master' into enhance-2.8.7

# Conflicts:
#	README.md
#	class-winter-core/pom.xml
#	class-winter-core/src/main/java/winter/com/ideaaedi/classwinter/util/EncryptClassArgs.java
#	class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/AllTest.java
#	class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/AlreadyProtectedLibs_Test.java
#	class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/Debug_Test.java
#	class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/EncryptArgParam_Test.java
#	class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/ExcludePrefix_Test.java
#	class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/FinalName_Test.java
#	class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/IncludeLibs_Test.java
#	class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/IncludePrefix_Test.java
#	class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/JvmArgCheck_Test.java
#	class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/OriginJarOrWar_Test.java
#	class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/Password_Test.java
#	class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/SupportFile_Test.java
#	class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/Tips_Test.java
#	class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/War_Test.java
#	class-winter-core/src/test/java/winter/com/ideaaedi/classwinter/Xml_Test.java
#	class-winter-core/src/test/resources/class-winter-core-2.8.6.jar
#	class-winter-maven-plugin/pom.xml
#	pom.xml
JustryDeng 2 vuotta sitten
vanhempi
commit
2a53b397d3
34 muutettua tiedostoa jossa 219 lisäystä ja 86 poistoa
  1. 26 18
      README.md
  2. 1 23
      class-winter-core/pom.xml
  3. 1 1
      class-winter-core/src/main/java/winter/com/ideaaedi/classwinter/Forward.java
  4. 11 11
      class-winter-core/src/main/java/winter/com/ideaaedi/classwinter/Reverses.java
  5. 25 0
      class-winter-core/src/main/java/winter/com/ideaaedi/classwinter/exception/JVMException.java
  6. 1 1
      class-winter-core/src/main/java/winter/com/ideaaedi/classwinter/util/EncryptClassArgs.java
  7. 122 0
      class-winter-core/src/main/java/winter/com/ideaaedi/classwinter/util/JVMUtil.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. BIN
      class-winter-core/src/test/resources/class-winter-core-2.8.1.jar
  24. BIN
      class-winter-core/src/test/resources/class-winter-core-2.8.2.jar
  25. BIN
      class-winter-core/src/test/resources/class-winter-core-2.8.3.jar
  26. BIN
      class-winter-core/src/test/resources/class-winter-core-2.8.5.jar
  27. BIN
      class-winter-core/src/test/resources/class-winter-core-2.8.6.jar
  28. BIN
      class-winter-core/src/test/resources/class-winter-core-2.8.7.jar
  29. BIN
      class-winter-core/src/test/resources/class-winter-core-enhance-2.8.1.jar
  30. BIN
      class-winter-core/src/test/resources/class-winter-core-enhance-2.8.2.jar
  31. BIN
      class-winter-core/src/test/resources/class-winter-core-enhance-2.8.3.jar
  32. BIN
      class-winter-core/src/test/resources/class-winter-core-enhance-2.8.5.jar
  33. 1 1
      class-winter-maven-plugin/pom.xml
  34. 1 1
      pom.xml

+ 26 - 18
README.md

@@ -1,3 +1,4 @@
+
 # 代码混淆之class-winter
 
 - [代码混淆之class-winter](#代码混淆之class-winter)
@@ -15,6 +16,12 @@
 
 ---
 
+## 仓库最新版本
+ <p>
+  <a href="https://search.maven.org/search?q=g:com.idea-aedi%20a:class-winter-maven-plugin">
+    <img alt="maven" src="https://img.shields.io/maven-central/v/com.idea-aedi/class-winter-maven-plugin?style=flat-square">
+  </a>
+
 <font face="幼圆"  color = "#F53B45">**郑重声明**</font>
 
 [**class-winter**](https://gitee.com/JustryDeng/class-winter) 是本人在学习完 [**class-final(v1.1.9)**](https://gitee.com/roseboy/classfinal) 后,仿照class-final进行编写的,部分思路与class-final一致
@@ -53,7 +60,7 @@
   <plugin>
       <groupId>com.idea-aedi</groupId>
       <artifactId>class-winter-maven-plugin</artifactId>
-      <version>enhance-2.8.6</version>
+      <version>2.8.7</version>
       <!-- 相关配置 -->
       <configuration>
           <!-- <finalName></finalName>-->
@@ -84,15 +91,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-enhance-2.8.6.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-2.8.7.jar) 主动加密</font>
 
   ```bash
-  java -jar class-winter-core-enhance-2.8.6.jar originJarOrWar=${要加密的项目.jar或.war包} includePrefix=${加密范围} [k3=v3 k4=v4 ...]
+  java -jar class-winter-core-2.8.7.jar originJarOrWar=${要加密的项目.jar或.war包} includePrefix=${加密范围} [k3=v3 k4=v4 ...]
   # 对于复杂的参数值,可以使用引号引起来
   # linux
-  java -jar class-winter-core-enhance-2.8.6.jar k1='v1' k2='v2'
+  java -jar class-winter-core-2.8.7.jar k1='v1' k2='v2'
   # windows
-  java -jar class-winter-core-enhance-2.8.6.jar k1="v1" k2="v2"
+  java -jar class-winter-core-2.8.7.jar k1="v1" k2="v2"
   ```
 
 ## <font  face="幼圆" color = "#3399EA" >加密参数</font>
@@ -308,16 +315,17 @@ linux示例:tips='请不要直接使用混淆后的jar/war'</td>
 
 
 
-
 ## <font  face="幼圆" color = "#3399EA" >解密(启动)</font>
 
-通过-javaagent指定代理进行解密启动。
+> `class-winter`支持`JVM`参数校验,通过在JVM参数中加入`-XX:+DisableAttachMechanism`来防止其他工具连接到你的Java程序。这样可以阻止运行至dump class。
+> 
+> 但是有些高级开发者可能会想要使用`sa-jdi` 的 `HSDB` 来 `dump` 字节码。从`2.8.7`版本开始,支持在启动Java解密时禁用了gHotSpotVMStructs函数,避免使用sa-jdi HSDB 来dump class,提高代码安全性。
 - #### <font  face="幼圆" color = "#86CA5E" >jar解密(启动)</font>
   ```bash
   # 假设your-project-encrypted.jar是由class-winter加密后的包,那么你可以这么启动
   java -javaagent:/your-project-encrypted.jar -jar /your-project-encrypted.jar
-  # 也可以用class-winter-core-enhance-2.8.6.jar
-  # java -javaagent:/class-winter-core-enhance-2.8.6.jar -jar /your-project-encrypted.jar
+  # 也可以用class-winter-core-2.8.7.jar
+  # java -javaagent:/class-winter-core-2.8.7.jar -jar /your-project-encrypted.jar
   # 或者指定参数
   # java -javaagent:/your-project-encrypted.jar=debug=true,password=pwd12345 -jar /your-project-encrypted.jar
   # 参数可以引起来(linux)
@@ -333,9 +341,9 @@ linux示例:tips='请不要直接使用混淆后的jar/war'</td>
     编辑tomcat/bin/catalina.sh文件,在最上面加上
 
     ```bash
-    # 如果你有参数, 那么 -javaagent:/class-winter-core-enhance-2.8.6.jar=k1=v1,k2=v2
+    # 如果你有参数, 那么 -javaagent:/class-winter-core-2.8.7.jar=k1=v1,k2=v2
     # tomcat启动往往需要通过decryptProjectPathPrefix指定要解密的路径
-    CATALINA_OPTS="$CATALINA_OPTS -javaagent:/class-winter-core-enhance-2.8.6.jar=debug=true,decryptProjectPathPrefix=/usr/local/xxx/";
+    CATALINA_OPTS="$CATALINA_OPTS -javaagent:/class-winter-core-2.8.7.jar=debug=true,decryptProjectPathPrefix=/usr/local/xxx/";
     export CATALINA_OPTS;
     ```
   
@@ -344,9 +352,9 @@ linux示例:tips='请不要直接使用混淆后的jar/war'</td>
     在tomcat/bin目录下创建setenv.sh文件,并写上
   
     ```bash
-    # 如果你有参数, 那么 -javaagent:/class-winter-core-enhance-2.8.6.jar=k1=v1,k2=v2
+    # 如果你有参数, 那么 -javaagent:/class-winter-core-2.8.7.jar=k1=v1,k2=v2
     # tomcat启动往往需要通过decryptProjectPathPrefix指定要解密的路径
-    JAVA_OPTS="$JAVA_OPTS -javaagent:/class-winter-core-enhance-2.8.6.jar=debug=true,decryptProjectPathPrefix=/usr/local/xxx/";
+    JAVA_OPTS="$JAVA_OPTS -javaagent:/class-winter-core-2.8.7.jar=debug=true,decryptProjectPathPrefix=/usr/local/xxx/";
     export JAVA_OPTS;
     ```
 
@@ -355,9 +363,9 @@ linux示例:tips='请不要直接使用混淆后的jar/war'</td>
     编辑tomcat/bin/catalina.bat文件,在@echo off后加上catalina参数
   
     ```bash
-    rem 如果你有参数, 那么 -javaagent:D:/class-winter-core-enhance-2.8.6.jar=k1=v1,k2=v2
+    rem 如果你有参数, 那么 -javaagent:D:/class-winter-core-2.8.7.jar=k1=v1,k2=v2
     rem tomcat启动往往需要通过decryptProjectPathPrefix指定要解密的路径
-    set CATALINA_OPTS="-javaagent:D:/class-winter-core-enhance-2.8.6.jar=decryptProjectPathPrefix=/D:/tmp/"
+    set CATALINA_OPTS="-javaagent:D:/class-winter-core-2.8.7.jar=decryptProjectPathPrefix=/D:/tmp/"
     ```
   
   - windows方式二
@@ -365,9 +373,9 @@ linux示例:tips='请不要直接使用混淆后的jar/war'</td>
     在tomcat/bin目录下创建setenv.bat文件,并写上
   
     ```bash
-    rem 如果你有参数, 那么 -javaagent:D:/class-winter-core-enhance-2.8.6.jar=k1=v1,k2=v2
+    rem 如果你有参数, 那么 -javaagent:D:/class-winter-core-2.8.7.jar=k1=v1,k2=v2
     rem tomcat启动往往需要通过decryptProjectPathPrefix指定要解密的路径
-    set JAVA_OPTS="-javaagent:D:/class-winter-core-enhance-2.8.6.jar=decryptProjectPathPrefix=/D:/tmp/"
+    set JAVA_OPTS="-javaagent:D:/class-winter-core-2.8.7.jar=decryptProjectPathPrefix=/D:/tmp/"
     ```
   
 - #### <font  face="幼圆" color = "#86CA5E" >IDE解密(启动)</font>
@@ -478,7 +486,7 @@ linux示例:tips='请不要直接使用混淆后的jar/war'</td>
       <parent>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-parent</artifactId>
-          <version>enhance-2.8.6</version>
+          <version>2.8.7</version>
           <relativePath/> <!-- lookup parent from repository -->
       </parent>
       <groupId>com.example</groupId>

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

@@ -5,7 +5,7 @@
     <parent>
         <groupId>com.idea-aedi</groupId>
         <artifactId>class-winter</artifactId>
-        <version>enhance-2.8.6</version>
+        <version>2.8.7</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
@@ -53,28 +53,6 @@
                     </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/Forward.java

@@ -17,7 +17,7 @@ public class Forward {
     
     /**
      * 入口
-     *
+     * <p>
      * 假设是这么java -jar -class-winter-core-1.0.0.jar k1=v1 k2=v2 k3=v3  启动项目的,
      * 那么args的内容形如["k1=v1", "k2=v2", "k3=v3"]
      */

+ 11 - 11
class-winter-core/src/main/java/winter/com/ideaaedi/classwinter/Reverses.java

@@ -3,15 +3,7 @@ package winter.com.ideaaedi.classwinter;
 import winter.com.ideaaedi.classwinter.author.JustryDeng;
 import winter.com.ideaaedi.classwinter.exception.ClassWinterException;
 import winter.com.ideaaedi.classwinter.executor.DecryptExecutor;
-import winter.com.ideaaedi.classwinter.util.Cache;
-import winter.com.ideaaedi.classwinter.util.Constant;
-import winter.com.ideaaedi.classwinter.util.ExceptionUtil;
-import winter.com.ideaaedi.classwinter.util.IOUtil;
-import winter.com.ideaaedi.classwinter.util.JarUtil;
-import winter.com.ideaaedi.classwinter.util.JavaagentCmdArgs;
-import winter.com.ideaaedi.classwinter.util.Logger;
-import winter.com.ideaaedi.classwinter.util.Pair;
-import winter.com.ideaaedi.classwinter.util.StrUtil;
+import winter.com.ideaaedi.classwinter.util.*;
 
 import java.io.File;
 import java.io.IOException;
@@ -66,7 +58,15 @@ public class Reverses {
             // 是否启动debug,同步给Logger
             Logger.ENABLE_DEBUG.set(javaagentCmdArgs.isDebug());
         }
-        
+        // 禁用gHotSpotVMStructs函数,避免使用sa-jdi HSDB 来dump class,提高代码安全性
+        try {
+            long structs = JVMUtil.getSymbol("gHotSpotVMStructs");
+            JVMUtil.putAddress(structs, 0);
+            Logger.debug(Reverses.class, "Disabled VM Structs");
+        } catch (Exception e) {
+            Logger.error(Reverses.class, ExceptionUtil.getStackTraceMessage(e));
+            exit(null);
+        }
         // 要忽略的解密处理逻辑的项目路径(ProtectionDomain.getCodeSource().getLocation().getPath())
         Set<String> skipProjectPathPrefixSet = new HashSet<>();
         String skipProjectPathPrefix = javaagentCmdArgs.getSkipProjectPathPrefix();
@@ -227,7 +227,7 @@ public class Reverses {
                             return null;
                         }
                     }
-                    
+
                     /// ============================================ 处理class文件
                     // 判断是否应该解密
                     if (DecryptExecutor.checklistContain(projectPath, className) && DecryptExecutor.verifySeal(projectPath, classfileBuffer)) {

+ 25 - 0
class-winter-core/src/main/java/winter/com/ideaaedi/classwinter/exception/JVMException.java

@@ -0,0 +1,25 @@
+package winter.com.ideaaedi.classwinter.exception;
+
+
+/**
+ * JVM异常
+ *
+ * @author wang
+ */
+public class JVMException extends RuntimeException {
+
+    public JVMException() {
+    }
+
+    public JVMException(String message) {
+        super(message);
+    }
+
+    public JVMException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    public JVMException(Throwable cause) {
+        super(cause);
+    }
+}

+ 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 enhance-2.8.1
+ * @since 2.8.1
  */
 public class EncryptClassArgs {
     

+ 122 - 0
class-winter-core/src/main/java/winter/com/ideaaedi/classwinter/util/JVMUtil.java

@@ -0,0 +1,122 @@
+package winter.com.ideaaedi.classwinter.util;
+
+import sun.misc.Unsafe;
+import winter.com.ideaaedi.classwinter.exception.JVMException;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.NoSuchElementException;
+
+/**
+ * JVM 工具类,用于处理 JVM 相关操作。
+ *
+ * @author wang
+ */
+public class JVMUtil {
+
+    /**
+     * 用于查找本地库中的符号的反射方法。
+     */
+    private static final Method findNative;
+
+    /**
+     * 用于加载本地库的类加载器。
+     */
+    private static final ClassLoader classLoader;
+
+    /**
+     * Unsafe 类的实例,用于执行底层的内存操作。
+     */
+    public static final Unsafe unsafe = getUnsafe();
+
+    static {
+        // 检测操作系统类型
+        String os = System.getProperty("os.name").toLowerCase();
+        if (os.contains("windows")) {
+            // 在 Windows 操作系统上加载相应的 jvm.dll
+            String vmName = System.getProperty("java.vm.name");
+            String dll = vmName.contains("Client VM") ? "/bin/client/jvm.dll" : "/bin/server/jvm.dll";
+            try {
+                System.load(System.getProperty("java.home") + dll);
+            } catch (UnsatisfiedLinkError e) {
+                throw new JVMException("Cannot find jvm.dll. Unsupported JVM?");
+            }
+            classLoader = JVMUtil.class.getClassLoader();
+        } else {
+            classLoader = null;
+        }
+        try {
+            // 获取 ClassLoader 类的 findNative 方法并设置访问权限
+            findNative = ClassLoader.class.getDeclaredMethod("findNative", ClassLoader.class, String.class);
+            findNative.setAccessible(true);
+        } catch (NoSuchMethodException e) {
+            throw new JVMException("Method ClassLoader.findNative not found");
+        }
+    }
+
+    /**
+     * 获取指定符号的地址。
+     *
+     * @param name 符号名称
+     * @return 符号的地址
+     * @throws NoSuchElementException 如果找不到指定符号
+     */
+    public static long getSymbol(String name) {
+        long address = JVMUtil.lookup(name);
+        if (address == 0) {
+            throw new NoSuchElementException("No such symbol: " + name);
+        }
+        return getLong(address);
+    }
+
+    /**
+     * 从指定地址读取 long 类型的值。
+     *
+     * @param addr 地址
+     * @return 读取的 long 值
+     */
+    public static long getLong(long addr) {
+        return unsafe.getLong(addr);
+    }
+
+    /**
+     * 将指定值写入指定地址。
+     *
+     * @param addr 地址
+     * @param val  要写入的值
+     */
+    public static void putAddress(long addr, long val) {
+        unsafe.putAddress(addr, val);
+    }
+
+    /**
+     * 查找本地库中指定名称的符号的地址。
+     *
+     * @param name 符号名称
+     * @return 符号的地址
+     */
+    public static long lookup(String name) {
+        try {
+            return (Long) findNative.invoke(null, classLoader, name);
+        } catch (InvocationTargetException e) {
+            throw new JVMException(e.getTargetException());
+        } catch (IllegalAccessException e) {
+            throw new JVMException(e);
+        }
+    }
+
+    /**
+     * 获取 Unsafe 类的实例。
+     *
+     * @return Unsafe 类的实例
+     */
+    private static Unsafe getUnsafe() {
+        try {
+            java.lang.reflect.Field f = Unsafe.class.getDeclaredField("theUnsafe");
+            f.setAccessible(true);
+            return (Unsafe) f.get(null);
+        } catch (Exception e) {
+            throw new JVMException("Unable to get Unsafe", e);
+        }
+    }
+}

+ 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-enhance-2.8.6.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.7.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-enhance-2.8.6.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.7.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-enhance-2.8.6.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.7.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-enhance-2.8.6.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.7.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-enhance-2.8.6.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.7.jar"
                 + " originJarOrWar=" + originJarOrWar
                 + " includePrefix=" + includePrefix
                 + " debug=" + true

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

@@ -70,7 +70,7 @@ public class EncryptArgParam_Test {
             includePrefix= sb.toString();
         }
         
-        String startBat = "java -jar " + projectRootDir + "class-winter-core-enhance-2.8.6.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.7.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-enhance-2.8.6.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.7.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.*.DbSecurityBeanUtil";
     
-        String startBat = "java -jar " + projectRootDir + "class-winter-core-enhance-2.8.6.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.7.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-enhance-2.8.6.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.7.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-.*.RELEASE.jar,guava-28.2-jre.jar";
     
-        String startBat = "java -jar " + projectRootDir + "class-winter-core-enhance-2.8.6.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.7.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.*.util";
     
-        String startBat = "java -jar " + projectRootDir + "class-winter-core-enhance-2.8.6.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.7.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-enhance-2.8.6.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.7.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-enhance-2.8.6.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.7.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-enhance-2.8.6.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.7.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-enhance-2.8.6.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.7.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-enhance-2.8.6.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.7.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-enhance-2.8.6.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.7.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-enhance-2.8.6.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.7.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-enhance-2.8.6.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.7.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-enhance-2.8.6.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.7.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-enhance-2.8.6.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.7.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-enhance-2.8.6.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.7.jar"
                 + " originJarOrWar=" + originJarOrWar
                 + " includePrefix=" + includePrefix
                 ;
@@ -55,8 +55,8 @@ public class Tips_Test {
         String tips = "[潘嘎之交] 潘: 你别怪潘叔说话比较直白, 网络上的东西都是虚拟的, 你把握不住, 孩子! 因为这里的水很深...";
     
         // 如果tips值由一些特殊字符(如空格等)的话,可以用windows双引号(linux单引号)引起来。
-        // java -jar class-winter-core-enhance-2.8.6.jar originJarOrWar=/boot-jar.jar includePrefix=com tips="[潘嘎之交] 潘: 你别怪潘叔说话比较直白, 网络上的东西都是虚拟的, 你把握不住, 孩子! 因为这里的水很深..."
-        String startBat = "java -jar " + projectRootDir + "class-winter-core-enhance-2.8.6.jar"
+        // java -jar class-winter-core-2.8.7.jar originJarOrWar=/boot-jar.jar includePrefix=com tips="[潘嘎之交] 潘: 你别怪潘叔说话比较直白, 网络上的东西都是虚拟的, 你把握不住, 孩子! 因为这里的水很深..."
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.7.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-enhance-2.8.6.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.7.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-enhance-2.8.6.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.7.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-enhance-2.8.6.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.7.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-enhance-2.8.6.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.7.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-enhance-2.8.6.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.7.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-enhance-2.8.6.jar"
+        String startBat = "java -jar " + projectRootDir + "class-winter-core-2.8.7.jar"
                 + " originJarOrWar=" + originJarOrWar
                 + " includePrefix=" + includePrefix
                 + " includeXmlPrefix=" + includeXmlPrefix

BIN
class-winter-core/src/test/resources/class-winter-core-2.8.0.jar → class-winter-core/src/test/resources/class-winter-core-2.8.1.jar


BIN
class-winter-core/src/test/resources/class-winter-core-2.8.2.jar


BIN
class-winter-core/src/test/resources/class-winter-core-2.8.3.jar


BIN
class-winter-core/src/test/resources/class-winter-core-2.8.5.jar


BIN
class-winter-core/src/test/resources/class-winter-core-2.8.6.jar


BIN
class-winter-core/src/test/resources/class-winter-core-2.8.7.jar


BIN
class-winter-core/src/test/resources/class-winter-core-enhance-2.8.1.jar


BIN
class-winter-core/src/test/resources/class-winter-core-enhance-2.8.2.jar


BIN
class-winter-core/src/test/resources/class-winter-core-enhance-2.8.3.jar


BIN
class-winter-core/src/test/resources/class-winter-core-enhance-2.8.5.jar


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

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

+ 1 - 1
pom.xml

@@ -9,7 +9,7 @@
     </modules>
     <groupId>com.idea-aedi</groupId>
     <artifactId>class-winter</artifactId>
-    <version>enhance-2.8.6</version>
+    <version>2.8.7</version>
 
     <!-- 配置项目的基础信息 -->
     <name>class-winter</name>