|
|
@@ -109,7 +109,6 @@ public class EncryptExecutor {
|
|
|
*/
|
|
|
private final String password;
|
|
|
|
|
|
-
|
|
|
/**
|
|
|
* 要加密的xml文件的zipEntry名前缀(如:)
|
|
|
*/
|
|
|
@@ -124,7 +123,6 @@ public class EncryptExecutor {
|
|
|
* xml中要清除的(根节点的)子节点名称
|
|
|
*/
|
|
|
private final Set<String> toCleanXmlChildElementNameSet;
|
|
|
-
|
|
|
|
|
|
/**
|
|
|
* 要加密的类的全类名前缀(也可以精确匹配)
|
|
|
@@ -254,62 +252,63 @@ public class EncryptExecutor {
|
|
|
showProcess("step00", lastStep, "un-jar-war");
|
|
|
List<String> filePathList = JarUtil.unJarWar(originJarOrWar, targetRootDir);
|
|
|
|
|
|
+ // step1. 混淆xml
|
|
|
showProcess("step01", lastStep, "clean-xml-files");
|
|
|
File targetRootDirFile = new File(targetRootDir);
|
|
|
if (includeXmlPrefixSet != null && includeXmlPrefixSet.size() > 0) {
|
|
|
cleanXmlFiles(filePathList, targetRootDirFile);
|
|
|
}
|
|
|
|
|
|
- // step1. jar中的某些lib可能也需要加密,这里先(将那些需要加密的lib)进行解压,(解压到对应的临时目录,以便后面进行加密处理)
|
|
|
+ // step2. jar中的某些lib可能也需要加密,这里先(将那些需要加密的lib)进行解压,(解压到对应的临时目录,以便后面进行加密处理)
|
|
|
showProcess("step02", lastStep, "un-lib-jar");
|
|
|
unLibJar();
|
|
|
|
|
|
- // step2. 找到需要加密混淆的class文件
|
|
|
+ // step3. 找到需要加密混淆的class文件
|
|
|
showProcess("step03", lastStep, "filter-classes");
|
|
|
List<File> allFiles = IOUtil.listSubFile(targetRootDirFile, 1);
|
|
|
List<File> allNeedEncryptedClassFileList = filterClasses(allFiles);
|
|
|
|
|
|
showProcess("step04", lastStep, "encrypt-classes");
|
|
|
- // step3.1. 根据原.class文件,生成加密后的.class文件,并存至Constant.ENCRYPTED_CLASSES_SAVE_DIR
|
|
|
+ // step4.1. 根据原.class文件,生成加密后的.class文件,并存至Constant.ENCRYPTED_CLASSES_SAVE_DIR
|
|
|
List<String> allAlreadyEncryptedClassFileList = encryptClasses(allNeedEncryptedClassFileList, new File(targetRootDir,
|
|
|
Constant.DEFAULT_ENCRYPTED_CLASSES_SAVE_DIR));
|
|
|
- // step3.2. 生成记录已加密class的全类名的清单文件
|
|
|
+ // step4.2. 生成记录已加密class的全类名的清单文件
|
|
|
generateChecklistFile(allAlreadyEncryptedClassFileList);
|
|
|
|
|
|
- // step4. 记录印章(在解密时,可通过 checklist + 印章 判断一个class是否是被class-winter加密过)
|
|
|
+ // step5. 记录印章(在解密时,可通过 checklist + 印章 判断一个class是否是被class-winter加密过)
|
|
|
showProcess("step05", lastStep, "record-seal");
|
|
|
generateSealFile();
|
|
|
|
|
|
- // step5. 设置启动jar包时需要检查的jvm参数项
|
|
|
+ // step6. 设置启动jar包时需要检查的jvm参数项
|
|
|
showProcess("step06", lastStep, "setting-jvm-arg-check-items");
|
|
|
settingJvmArgCheckItems();
|
|
|
|
|
|
- // step6. 混淆原.class文件(即:清空方法体)
|
|
|
+ // step7. 混淆原.class文件(即:清空方法体)
|
|
|
clearClassMethod(allNeedEncryptedClassFileList);
|
|
|
showProcess("step07", lastStep, "clear-class-method");
|
|
|
|
|
|
- // step7. 清除META-INF/maven下pom.xml中关于class-winter-plugin的相关信息
|
|
|
+ // step8. 清除META-INF/maven下pom.xml中关于class-winter-plugin的相关信息
|
|
|
clearWinterPluginInfo();
|
|
|
showProcess("step08", lastStep, "clear-winter-plugin-info");
|
|
|
|
|
|
- // step8. 添加class-winter的用于javaagent解密的代码
|
|
|
+ // step9. 添加class-winter的用于javaagent解密的代码
|
|
|
addClassWinterAgent();
|
|
|
showProcess("step09", lastStep, "add-class-winter-agent");
|
|
|
|
|
|
- // step9. 汇总那些在本次加密前本身就已经是被class-winter混淆的lib的相关信息到当前项目中
|
|
|
+ // step10. 汇总那些在本次加密前本身就已经是被class-winter混淆的lib的相关信息到当前项目中
|
|
|
collectAlreadyProtectedLibInfo();
|
|
|
showProcess("step10", lastStep, "collect-already-protected-lib-info");
|
|
|
|
|
|
- // step10. 与step1项对应,将临时目录还原为原来的lib(此时得到的lib是加密后的)
|
|
|
+ // step11. 与step2项对应,将临时目录还原为原来的lib(此时得到的lib是加密后的)
|
|
|
doLibJar();
|
|
|
showProcess("step11", lastStep, "do-lib-jar");
|
|
|
|
|
|
- // step11. 压缩targetRootDir目录为绝对文件路径名为generatedJarWar的jar(or war)包
|
|
|
+ // step12. 压缩targetRootDir目录为绝对文件路径名为generatedJarWar的jar(or war)包
|
|
|
String generatedJarWar = generateJarWarPath(this.originIsJar);
|
|
|
JarUtil.doJarWar(targetRootDir, generatedJarWar, new SimpleFileOrderSupport(filePathList));
|
|
|
showProcess("step12", lastStep, "generate-jar-war-path");
|
|
|
|
|
|
- // step12. 删除临时目录
|
|
|
+ // step13. 删除临时目录
|
|
|
IOUtil.delete(targetRootDirFile);
|
|
|
showProcess(lastStep, lastStep, "delete-tmp-dir");
|
|
|
return generatedJarWar;
|
|
|
@@ -688,7 +687,7 @@ public class EncryptExecutor {
|
|
|
}
|
|
|
content = sb.toString();
|
|
|
}
|
|
|
- Logger.debug(EncryptExecutor.class, "SeDtting jvmArgCheckItems -> " + content);
|
|
|
+ Logger.debug(EncryptExecutor.class, "Setting jvmArgCheckItems -> " + content);
|
|
|
byte[] encryptedBytes = EncryptUtil.encrypt(content.getBytes(StandardCharsets.UTF_8), obtainPassword());
|
|
|
IOUtil.toFile(Base64.getEncoder().encode(encryptedBytes), new File(targetRootDir, Constant.JVM_ARG_CHECK_FILE), true);
|
|
|
}
|