Kaynağa Gözat

第三轮整体测试,代码优化、逻辑完善、bug修复

JustryDeng 5 yıl önce
ebeveyn
işleme
68cd20c935

+ 3 - 1
class-winter-core/src/main/java/winter/com/ideaaedi/classwinter/Forward.java

@@ -27,6 +27,7 @@ public class Forward {
         String includePrefix = parseValueByPrefixFromTail("includePrefix=", args);
         String excludePrefix = parseValueByPrefixFromTail("excludePrefix=", args);
         String finalName = parseValueByPrefixFromTail("finalName=", args);
+        String password = parseValueByPrefixFromTail(".password=", args);
         String includeLibs = parseValueByPrefixFromTail("includeLibs=", args);
         String alreadyProtectedLibs = parseValueByPrefixFromTail("alreadyProtectedLibs=", args);
         String tips = parseValueByPrefixFromTail("tips=", args);
@@ -48,8 +49,9 @@ public class Forward {
         EncryptExecutor encryptExecutor = EncryptExecutor.builder()
                 .originJarOrWar(originJarOrWar)
                 .includePrefix(includePrefix)
-                .finalName(finalName)
                 .excludePrefix(excludePrefix)
+                .finalName(finalName)
+                .password(password)
                 .includeLibs(includeLibs)
                 .alreadyProtectedLibs(alreadyProtectedLibs)
                 .debug(Boolean.parseBoolean(debug))

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

@@ -3,12 +3,15 @@ package winter.com.ideaaedi.classwinter;
 import winter.com.ideaaedi.classwinter.author.JustryDeng;
 import winter.com.ideaaedi.classwinter.executor.EncryptExecutor;
 import winter.com.ideaaedi.classwinter.util.BashUtil;
-import winter.com.ideaaedi.classwinter.util.Constant;
-import winter.com.ideaaedi.classwinter.util.Logger;
 import winter.com.ideaaedi.classwinter.util.PathUtil;
 
 /**
  * 全参数测试
+ * P.S.
+ * 注:本人提供的用于测试的my-project-with-encrypted-lib-have-pwd.jar包,貌似所有类都能正常加密,
+ *    没出现class not find的情况,所以不需要指定supportFile。
+ *    即: 本case略有不足之处, 没有把参数supportFile的作用体现出来,  再构造一个满足全部测试场景的jar/war太麻烦了,就这样吧。
+ *    注: supportFile参数的作用见{@link SupportFile_Test}。
  *
  * @author {@link JustryDeng}
  * @since 2021/5/6 23:25:24
@@ -35,7 +38,7 @@ public class AllTest {
         String projectRootDir = PathUtil.getProjectRootDir(AllTest.class);
         EncryptExecutor encryptExecutor = EncryptExecutor.builder()
                 //(必须)-> 加密spring-boot可执行jar包
-                .originJarOrWar(projectRootDir + "boot-jar.jar")
+                .originJarOrWar(projectRootDir + "my-project-with-encrypted-lib-have-pwd.jar")
                 // 加密普通jar包
                 // .originJarOrWar(projectRootDir + "normal-jar.jar")
                 // 加密war包
@@ -43,11 +46,11 @@ public class AllTest {
                 
                 // (必须)-> 前缀匹配的方式,指定需要加密的class
                 // 逗号后面有没有空格都可以
-                .includePrefix("com.aspire.ssm,com.zaxxer.hikari,com.fasterxml.jackson")
+                .includePrefix("com.szlaozicl,com.aspire.ssm,org.springframework.aop.target.dynamic,com.fasterxml.jackson")
                 
                 // (可选)-> 前缀匹配的方式,指定需要忽略加密的class,用于对includePrefix指定的范围中的目标进行排除
                 // 逗号后面有没有空格都可以
-                .excludePrefix("com.aspire.config,com.aspire.util.Person")
+                .excludePrefix("com.aspire.ssm.config,com.aspire.ssm.util.Person")
                 
                 // (可选)-> 指定加密后的jar包的名称, 会在同目录下生成abc-encrypted.jar
                 // 若与原jar(or war)同名,则会覆盖原来的jar(or war)包.
@@ -59,7 +62,7 @@ public class AllTest {
                 
                 // (可选)-> 前缀匹配的方式,指定还需额外对jar的依赖包libs中的哪些jar进行加密,更多解释详见net.jd.classwinter.executor.EncryptExecutor.includeLibSet上面的javadoc
                 // 逗号后面有没有空格都可以
-                .includeLibs("HikariCP-3.2.0.jar,jackson-core-2.9.9.jar")
+                .includeLibs("spring-aop-5.2.7.RELEASE.jar,jackson-core-2.10.4.jar")
                 
                 // (可选)-> 提示信息,当用户直接启动项目而不使用javaagent启动时,程序提示tips信息后会停止
                 .tips("方法已经被class-winter加密保护了,请不要直接使用java -jar xxx.jar启动项目,请使用java -javaagent:xxx.jar -jar xxx.jar启动项目.")
@@ -89,7 +92,7 @@ public class AllTest {
                 // 进一步说明了
                 //     要加密的jar包没有把mybatis的lib包打进去。
                 // 这时,我们就可以通过指定此字段的值为mybatisjar包的全路径名(如/tmp/lib/mybatis-3.5.1.jar)来解决问题。
-                .supportFile(projectRootDir + "help2")
+                // .supportFile("D:/tmp/jackson-databind-2.10.4.jar")
                 
                 // (可选)-> 是否开启debug模型以获取更多日执行信息(默认为false)
                 .debug(true)

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

@@ -0,0 +1,180 @@
+package winter.com.ideaaedi.classwinter;
+
+import winter.com.ideaaedi.classwinter.author.JustryDeng;
+import winter.com.ideaaedi.classwinter.executor.EncryptExecutor;
+import winter.com.ideaaedi.classwinter.util.BashUtil;
+import winter.com.ideaaedi.classwinter.util.PathUtil;
+
+/**
+ * 这里只讲war包进行混淆, 需要执行使用web容器(如tomcat)启动war包
+ *
+ * @author {@link JustryDeng}
+ * @since 2021/6/12 14:34:45
+ */
+public class War_Test {
+    
+    public static void main(String[] args) {
+        // 杀下进程(以保证端口没有被占用)
+        BashUtil.killProcessByPorts("8080");
+//        test0();
+        test1();
+//        test2();
+//        test3();
+//        test4();
+    }
+    
+    /**
+     * 第一个war
+     *
+     * 输出:
+     * 请使用web容器(如tomcat)启动war包:E:/Git/Repository/class-winter/class-winter-core/target/test-classes/war-project-encrypted.war
+     * 其中参数附加 -javaagent:class-winter-core.jar
+     */
+    public static void test0() {
+        String projectRootDir = PathUtil.getProjectRootDir(AlreadyProtectedLibs_Test.class);
+        // 加密(模拟命令行输入对jar包进行加密)
+        String originJarOrWar = projectRootDir + "war-project.war";
+        String includePrefix = "com";
+    
+        String startBat = "java -jar class-winter-core.jar"
+                + " originJarOrWar=" + originJarOrWar
+                + " includePrefix=" + includePrefix
+                ;
+    
+        String[] args = startBat.replace("java -jar class-winter-core.jar" , "").trim().split(" ");
+        Forward.main(args);
+        
+        String encryptedWar = originJarOrWar.replace(".war", "-encrypted.war");
+        System.err.println();
+        System.err.println("请使用web容器(如tomcat)启动war包:" + encryptedWar);
+        System.err.println("其中参数附加 -javaagent:class-winter-core.jar");
+        // System.err.println("其中参数附加 -javaagent:class-winter-core.jar=debug=true,password=pwd123");
+        System.err.println();
+    }
+    
+    /**
+     * 第二个war
+     *
+     * 输出:
+     * 请使用web容器(如tomcat)启动war包:E:/Git/Repository/class-winter/class-winter-core/target/test-classes/my-project-with-normal-lib-encrypted.war
+     * 其中参数附加 -javaagent:class-winter-core.jar=password=123456
+     */
+    public static void test1() {
+        String projectRootDir = PathUtil.getProjectRootDir(AlreadyProtectedLibs_Test.class);
+        // 加密(模拟命令行输入对jar包进行加密)
+        String originJarOrWar = projectRootDir + "my-project-with-normal-lib.war";
+        String includePrefix = "com";
+        String password = "123456";
+    
+        String startBat = "java -jar class-winter-core.jar"
+                + " originJarOrWar=" + originJarOrWar
+                + " includePrefix=" + includePrefix
+                + " password=" + password
+                + " debug=" + true
+                ;
+    
+        String[] args = startBat.replace("java -jar class-winter-core.jar" , "").trim().split(" ");
+        Forward.main(args);
+    
+        String encryptedWar = originJarOrWar.replace(".war", "-encrypted.war");
+        System.err.println();
+        System.err.println("请使用web容器(如tomcat)启动war包:" + encryptedWar);
+        System.err.println("其中参数附加 -javaagent:class-winter-core.jar=password=" + password);
+        // System.err.println("其中参数附加 -javaagent:class-winter-core.jar=debug=true,password=pwd123");
+        System.err.println();
+    }
+    
+    /**
+     * 第三个war
+     *
+     * 输出:
+     * 请使用web容器(如tomcat)启动war包:E:/Git/Repository/class-winter/class-winter-core/target/test-classes/my-project-with-encrypted-lib-no-pwd-encrypted.war
+     * 其中参数附加 -javaagent:class-winter-core.jar=password=oop857857
+     */
+    public static void test2() {
+        String projectRootDir = PathUtil.getProjectRootDir(AlreadyProtectedLibs_Test.class);
+        // 加密(模拟命令行输入对jar包进行加密)
+        String originJarOrWar = projectRootDir + "my-project-with-encrypted-lib-no-pwd.war";
+        String includePrefix = "com";
+        String alreadyProtectedLibs = "encrypted-lib-no-pwd-1.0.0.jar";
+        String password = "oop857857";
+    
+        String startBat = "java -jar class-winter-core.jar"
+                + " originJarOrWar=" + originJarOrWar
+                + " includePrefix=" + includePrefix
+                + " alreadyProtectedLibs=" + alreadyProtectedLibs
+                + " password=" + password
+                ;
+    
+        String[] args = startBat.replace("java -jar class-winter-core.jar" , "").trim().split(" ");
+        Forward.main(args);
+    
+        String encryptedWar = originJarOrWar.replace(".war", "-encrypted.war");
+        System.err.println();
+        System.err.println("请使用web容器(如tomcat)启动war包:" + encryptedWar);
+        System.err.println("其中参数附加 -javaagent:class-winter-core.jar=password=" + password);
+        // System.err.println("其中参数附加 -javaagent:class-winter-core.jar=debug=true,password=pwd123");
+        System.err.println();
+    }
+    
+    /**
+     * 第四个war
+     *
+     * 输出:
+     * 请使用web容器(如tomcat)启动war包:E:/Git/Repository/class-winter/class-winter-core/target/test-classes/my-project-with-encrypted-lib-have-pwd-encrypted.war
+     * 其中参数附加 -javaagent:class-winter-core.jar=password=yiyakaka
+     */
+    public static void test3() {
+        String projectRootDir = PathUtil.getProjectRootDir(AlreadyProtectedLibs_Test.class);
+        // 加密(模拟命令行输入对jar包进行加密)
+        String originJarOrWar = projectRootDir + "my-project-with-encrypted-lib-have-pwd.war";
+        String includePrefix = "com";
+        String alreadyProtectedLibs = "encrypted-lib-have-pwd-1.0.0.jar:qwer123~";
+        String password = "yiyakaka";
+        
+        String startBat = "java -jar class-winter-core.jar"
+                + " originJarOrWar=" + originJarOrWar
+                + " includePrefix=" + includePrefix
+                + " alreadyProtectedLibs=" + alreadyProtectedLibs
+                + " password=" + password
+                ;
+    
+        String[] args = startBat.replace("java -jar class-winter-core.jar" , "").trim().split(" ");
+        Forward.main(args);
+    
+        String encryptedWar = originJarOrWar.replace(".war", "-encrypted.war");
+        System.err.println();
+        System.err.println("请使用web容器(如tomcat)启动war包:" + encryptedWar);
+        System.err.println("其中参数附加 -javaagent:class-winter-core.jar=password=" + password);
+        // System.err.println("其中参数附加 -javaagent:class-winter-core.jar=debug=true,password=pwd123");
+        System.err.println();
+    }
+    
+    /**
+     * 第五个war
+     *
+     * 输出:
+     * 请使用web容器(如tomcat)启动war包:E:/Git/Repository/class-winter/class-winter-core/target/test-classes/jd.war
+     * 其中参数附加 -javaagent:class-winter-core.jar=password=pwd12345
+     */
+    public static void test4() {
+        String projectRootDir = PathUtil.getProjectRootDir(AllTest.class);
+        EncryptExecutor encryptExecutor = EncryptExecutor.builder()
+                .originJarOrWar(projectRootDir + "my-project-with-encrypted-lib-have-pwd.war")
+                .includePrefix("com.szlaozicl,com.aspire.ssm,org.springframework.aop.target.dynamic,com.fasterxml.jackson")
+                .excludePrefix("com.aspire.ssm.config,com.aspire.ssm.util.Person")
+                .finalName("jd")
+                .password("pwd12345")
+                .includeLibs("spring-aop-5.2.7.RELEASE.jar,jackson-core-2.10.4.jar")
+                .tips("方法已经被class-winter加密保护了,请不要直接使用java -jar xxx.jar启动项目,请使用java -javaagent:xxx.jar -jar xxx.jar启动项目.")
+                .alreadyProtectedLibs("encrypted-lib-have-pwd-1.0.0.jar:qwer123~")
+                .build();
+        
+        String encryptedWar = encryptExecutor.process();
+        System.err.println();
+        System.err.println("请使用web容器(如tomcat)启动war包:" + encryptedWar);
+        System.err.println("其中参数附加 -javaagent:class-winter-core.jar=password=pwd12345");
+        // System.err.println("其中参数附加 -javaagent:class-winter-core.jar=debug=true,password=pwd123");
+        System.err.println();
+    }
+}

BIN
class-winter-core/src/test/resources/help2/metrics-core-3.0.2.jar


BIN
class-winter-core/src/test/resources/help2/metrics-healthchecks-3.2.0.0.jar


BIN
class-winter-core/src/test/resources/help2/micrometer-core-1.0.0.jar


BIN
class-winter-core/src/test/resources/help2/simpleclient-0.9.0.jar