|
|
@@ -196,48 +196,78 @@ public class EncryptExecutor {
|
|
|
|
|
|
// step0. 解压jar到jarRootDir下
|
|
|
JarUtil.unJarWar(originJarOrWar, targetRootDir);
|
|
|
+ showProcess("step00", "step11", "un-jar-war");
|
|
|
|
|
|
// step1. jar中的某些lib可能也需要加密,这里先(将那些需要加密的lib)进行解压,(解压到对应的临时目录,以便后面进行加密处理)
|
|
|
unLibJar();
|
|
|
+ showProcess("step01", "step11", "un-lib-jar");
|
|
|
|
|
|
// step2. 找到需要加密混淆的class文件
|
|
|
File targetRootDirFile = new File(targetRootDir);
|
|
|
List<File> allFiles = IOUtil.listSubFile(targetRootDirFile, 1);
|
|
|
List<File> allNeedEncryptedClassFileList = filterClasses(allFiles);
|
|
|
+ showProcess("step02", "step11", "filter-classes");
|
|
|
|
|
|
// step3.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的全类名的清单文件
|
|
|
generateChecklistFile(allAlreadyEncryptedClassFileList);
|
|
|
+ showProcess("step03", "step11", "un-jar-war");
|
|
|
|
|
|
// step4. 记录印章(在解密时,可通过 checklist + 印章 判断一个class是否是被class-winter加密过)
|
|
|
generateSealFile();
|
|
|
+ showProcess("step04", "step11", "encrypt-classes");
|
|
|
|
|
|
// step5. 混淆原.class文件(即:清空方法体)
|
|
|
clearClassMethod(allNeedEncryptedClassFileList);
|
|
|
+ showProcess("step05", "step11", "clear-class-method");
|
|
|
|
|
|
// step6. 清除META-INF/maven下pom.xml中关于class-winter-plugin的相关信息
|
|
|
clearWinterPluginInfo();
|
|
|
+ showProcess("step06", "step11", "clear-winter-plugin-info");
|
|
|
|
|
|
// step7. 添加class-winter的用于javaagent解密的代码
|
|
|
addClassWinterAgent();
|
|
|
+ showProcess("step07", "step11", "add-class-winter-agent");
|
|
|
|
|
|
// step8. 汇总那些在本次加密前本身就已经是被class-winter混淆的lib的相关信息到当前项目中
|
|
|
collectAlreadyProtectedLibInfo();
|
|
|
+ showProcess("step08", "step11", "collect-already-protected-lib-info");
|
|
|
|
|
|
// step9. 与step1项对应,将临时目录还原为原来的lib(此时得到的lib是加密后的)
|
|
|
doLibJar();
|
|
|
+ showProcess("step09", "step11", "do-lib-jar");
|
|
|
|
|
|
// step10. 压缩targetRootDir目录为绝对文件路径名为generatedJarWar的jar(or war)包
|
|
|
String generatedJarWar = generateJarWarPath(this.originIsJar);
|
|
|
JarUtil.doJarWar(targetRootDir, generatedJarWar);
|
|
|
+ showProcess("step10", "step11", "generate-jar-war-path");
|
|
|
|
|
|
// step11. 删除临时目录
|
|
|
IOUtil.delete(targetRootDirFile);
|
|
|
+ showProcess("step11", "step11", "delete-tmp-dir");
|
|
|
return generatedJarWar;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * showProcess
|
|
|
+ *
|
|
|
+ * @param completedStep
|
|
|
+ * 已完成步骤
|
|
|
+ * @param lastStep
|
|
|
+ * 最后步骤
|
|
|
+ * @param stepDesc
|
|
|
+ * 步骤描述
|
|
|
+ */
|
|
|
+ private void showProcess(String completedStep, String lastStep, String stepDesc) {
|
|
|
+ if (EncryptExecutor.invokerIsPlugin) {
|
|
|
+ Logger.simpleInfo(completedStep + "/" + lastStep + "\t" + stepDesc + " completed.");
|
|
|
+ } else {
|
|
|
+ Logger.info(completedStep + "/" + lastStep + "\t" + stepDesc + " completed.");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 清除META-INF/maven下pom.xml中关于class-winter-plugin的相关信息
|
|
|
*
|