|
@@ -3,66 +3,72 @@ package winter.com.ideaaedi.classwinter;
|
|
|
import winter.com.ideaaedi.classwinter.author.JustryDeng;
|
|
import winter.com.ideaaedi.classwinter.author.JustryDeng;
|
|
|
import winter.com.ideaaedi.classwinter.executor.EncryptExecutor;
|
|
import winter.com.ideaaedi.classwinter.executor.EncryptExecutor;
|
|
|
import winter.com.ideaaedi.classwinter.util.BashUtil;
|
|
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.Logger;
|
|
|
import winter.com.ideaaedi.classwinter.util.PathUtil;
|
|
import winter.com.ideaaedi.classwinter.util.PathUtil;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
- * 混合测试
|
|
|
|
|
|
|
+ * 全参数测试
|
|
|
*
|
|
*
|
|
|
* @author {@link JustryDeng}
|
|
* @author {@link JustryDeng}
|
|
|
* @since 2021/5/6 23:25:24
|
|
* @since 2021/5/6 23:25:24
|
|
|
*/
|
|
*/
|
|
|
-public class MixTest {
|
|
|
|
|
|
|
+public class AllTest {
|
|
|
|
|
|
|
|
public static void main(String[] args) {
|
|
public static void main(String[] args) {
|
|
|
- Logger.info(MixTest.class, encryptTest());
|
|
|
|
|
|
|
+ // 杀下进程(以保证端口没有被占用)
|
|
|
|
|
+ BashUtil.killProcessByPorts("8080");
|
|
|
|
|
+
|
|
|
|
|
+ // 加密
|
|
|
|
|
+ String encryptedJar = encryptTest();
|
|
|
|
|
+
|
|
|
|
|
+ // 解密(模拟启动加密后的jar包)
|
|
|
|
|
+ // String javaagentArgs = "";
|
|
|
|
|
+ String javaagentArgs = "=debug=true,password=pwd12345";
|
|
|
|
|
+ BashUtil.runCmdAndPrint(String.format("java -javaagent:%s%s -jar %s", encryptedJar, javaagentArgs, encryptedJar));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
- * 加密测试
|
|
|
|
|
|
|
+ * 加密
|
|
|
*/
|
|
*/
|
|
|
public static String encryptTest() {
|
|
public static String encryptTest() {
|
|
|
-
|
|
|
|
|
- // 杀下进程(以保证端口没有被占用)
|
|
|
|
|
- BashUtil.killProcessByPorts("8080");
|
|
|
|
|
- String projectRootDir = PathUtil.getProjectRootDir(MixTest.class);
|
|
|
|
|
-
|
|
|
|
|
|
|
+ String projectRootDir = PathUtil.getProjectRootDir(AllTest.class);
|
|
|
EncryptExecutor encryptExecutor = EncryptExecutor.builder()
|
|
EncryptExecutor encryptExecutor = EncryptExecutor.builder()
|
|
|
//(必须)-> 加密spring-boot可执行jar包
|
|
//(必须)-> 加密spring-boot可执行jar包
|
|
|
-// .originJarOrWar(projectRootDir + Constant.LINUX_FILE_SEPARATOR + "boot-jar.jar")
|
|
|
|
|
|
|
+ .originJarOrWar(projectRootDir + "boot-jar.jar")
|
|
|
// 加密普通jar包
|
|
// 加密普通jar包
|
|
|
-// .originJarOrWar(projectRootDir + "normal-jar.jar")
|
|
|
|
|
- .originJarOrWar(projectRootDir + "tmp/my-project-with-encrypted-lib-have-pwd.jar")
|
|
|
|
|
|
|
+ // .originJarOrWar(projectRootDir + "normal-jar.jar")
|
|
|
// 加密war包
|
|
// 加密war包
|
|
|
// .originJarOrWar(projectRootDir + "war-project.war")
|
|
// .originJarOrWar(projectRootDir + "war-project.war")
|
|
|
|
|
|
|
|
// (必须)-> 前缀匹配的方式,指定需要加密的class
|
|
// (必须)-> 前缀匹配的方式,指定需要加密的class
|
|
|
// 逗号后面有没有空格都可以
|
|
// 逗号后面有没有空格都可以
|
|
|
- //.includePrefix("com.aspire.ssm.config,com.aspire.ssm.util,com.zaxxer.hikari,com.fasterxml.jackson")
|
|
|
|
|
- .includePrefix("com.aspire.ssm123")
|
|
|
|
|
|
|
+ .includePrefix("com.aspire.ssm,com.zaxxer.hikari,com.fasterxml.jackson")
|
|
|
|
|
+
|
|
|
|
|
+ // (可选)-> 前缀匹配的方式,指定需要忽略加密的class,用于对includePrefix指定的范围中的目标进行排除
|
|
|
|
|
+ // 逗号后面有没有空格都可以
|
|
|
|
|
+ .excludePrefix("com.aspire.config,com.aspire.util.Person")
|
|
|
|
|
|
|
|
// (可选)-> 指定加密后的jar包的名称, 会在同目录下生成abc-encrypted.jar
|
|
// (可选)-> 指定加密后的jar包的名称, 会在同目录下生成abc-encrypted.jar
|
|
|
// 若与原jar(or war)同名,则会覆盖原来的jar(or war)包.
|
|
// 若与原jar(or war)同名,则会覆盖原来的jar(or war)包.
|
|
|
// 若不指定,则生成的 加密后的jar(or war)包名为 = 原名-encrypted.jar
|
|
// 若不指定,则生成的 加密后的jar(or war)包名为 = 原名-encrypted.jar
|
|
|
- //.finalName("abc-encrypted")
|
|
|
|
|
|
|
+ .finalName("jd")
|
|
|
|
|
|
|
|
// (可选)-> 指定加密密码(若不指定,则系统会自动生成)
|
|
// (可选)-> 指定加密密码(若不指定,则系统会自动生成)
|
|
|
-// .password("qwer123~")
|
|
|
|
|
-
|
|
|
|
|
- // (可选)-> 前缀匹配的方式,指定需要忽略加密的class,用于对includePrefix指定的范围中的目标进行排除
|
|
|
|
|
- // 逗号后面有没有空格都可以
|
|
|
|
|
- //.excludePrefix("com.aspire.ssm.util.EmployeePO,com.aspire.ssm.util.ClazzDumpCustomAgent")
|
|
|
|
|
|
|
+ .password("pwd12345")
|
|
|
|
|
|
|
|
// (可选)-> 前缀匹配的方式,指定还需额外对jar的依赖包libs中的哪些jar进行加密,更多解释详见net.jd.classwinter.executor.EncryptExecutor.includeLibSet上面的javadoc
|
|
// (可选)-> 前缀匹配的方式,指定还需额外对jar的依赖包libs中的哪些jar进行加密,更多解释详见net.jd.classwinter.executor.EncryptExecutor.includeLibSet上面的javadoc
|
|
|
// 逗号后面有没有空格都可以
|
|
// 逗号后面有没有空格都可以
|
|
|
- //.includeLibs("HikariCP-3.2.0.jar,jackson-core-2.9.9.jar")
|
|
|
|
|
|
|
+ .includeLibs("HikariCP-3.2.0.jar,jackson-core-2.9.9.jar")
|
|
|
|
|
|
|
|
// (可选)-> 提示信息,当用户直接启动项目而不使用javaagent启动时,程序提示tips信息后会停止
|
|
// (可选)-> 提示信息,当用户直接启动项目而不使用javaagent启动时,程序提示tips信息后会停止
|
|
|
- //.tips("方法已经被class-winter加密保护了,请不要直接使用java -jar xxx.jar启动项目,请使用java -javaagent:xxx.jar -jar xxx.jar启动项目.")
|
|
|
|
|
|
|
+ .tips("方法已经被class-winter加密保护了,请不要直接使用java -jar xxx.jar启动项目,请使用java -javaagent:xxx.jar -jar xxx.jar启动项目.")
|
|
|
|
|
|
|
|
// (可选)-> 指明当前项依赖来的lib中,有哪些lib是本身就已经是被class-winter混淆了的
|
|
// (可选)-> 指明当前项依赖来的lib中,有哪些lib是本身就已经是被class-winter混淆了的
|
|
|
// 格式形如 xxx.jar:password, 多个之间使用逗号分割, 如果当初对该lib进行混淆时没有主动指定密码,那么可以不写
|
|
// 格式形如 xxx.jar:password, 多个之间使用逗号分割, 如果当初对该lib进行混淆时没有主动指定密码,那么可以不写
|
|
|
- //.alreadyProtectedLibs("encrypted-lib-no-pwd.jar")
|
|
|
|
|
|
|
+ //.alreadyProtectedLibs("xxx1.jar,xxx2.jar")
|
|
|
|
|
+ //.alreadyProtectedLibs("xxx1.jar:pwd1,xxx2.jar")
|
|
|
|
|
+ //.alreadyProtectedLibs("xxx1.jar:pwd1,xxx2.jar:pwd2")
|
|
|
.alreadyProtectedLibs("encrypted-lib-have-pwd-1.0.0.jar:qwer123~")
|
|
.alreadyProtectedLibs("encrypted-lib-have-pwd-1.0.0.jar:qwer123~")
|
|
|
|
|
|
|
|
// (可选)-> 加密时,额外往加密上下文中添加的jar文件(或者jar文件所在的目录)
|
|
// (可选)-> 加密时,额外往加密上下文中添加的jar文件(或者jar文件所在的目录)
|
|
@@ -83,7 +89,7 @@ public class MixTest {
|
|
|
// 进一步说明了
|
|
// 进一步说明了
|
|
|
// 要加密的jar包没有把mybatis的lib包打进去。
|
|
// 要加密的jar包没有把mybatis的lib包打进去。
|
|
|
// 这时,我们就可以通过指定此字段的值为mybatisjar包的全路径名(如/tmp/lib/mybatis-3.5.1.jar)来解决问题。
|
|
// 这时,我们就可以通过指定此字段的值为mybatisjar包的全路径名(如/tmp/lib/mybatis-3.5.1.jar)来解决问题。
|
|
|
-// .supportFile("E:\\Maven\\Repository\\org\\mybatis\\mybatis\\3.5.1\\mybatis-3.5.1.jar")
|
|
|
|
|
|
|
+ .supportFile(projectRootDir + "help2")
|
|
|
|
|
|
|
|
// (可选)-> 是否开启debug模型以获取更多日执行信息(默认为false)
|
|
// (可选)-> 是否开启debug模型以获取更多日执行信息(默认为false)
|
|
|
.debug(true)
|
|
.debug(true)
|