解密 ClassFinal 加密的 Java Jar 包
引用:https://wener.me/story/decrypt-classfinal-jar
ClassFinal 是一款java class文件安全加密工具,支持直接加密jar包或war包,无需修改任何项目代码,兼容spring-framework;可避免源码泄漏或字节码被反编译。
要点
- 拿到 password
- 可能内置了
- META-INF/.classes/org.springframework.config.Pass
 
 - 可能需要通过外部方式获取
- 命令行参数或者环境变量或者拦截 Class 加载
 
 - 总的来说比较容易获取
 
 - 可能内置了
 - 将 jar 添加到 classpath - 方便直接调用 net.roseboy.classfinal 内内容
- 通过 IDE 或者通过命令行参数
 
 - 解压 jar 到当前 目录 tmp
 - 解密 class
 - 反编译得到 java
 - 添加 lib 目录到 classpath
 - 通过 IDEA 可直接调用原始 jar 里内容或直接启动 Application
- 可能需要修改反编译后的 java 文件 - 部分反编译语法错误
 
 
DecryptClassFinal.java
package main;
import net.roseboy.classfinal.JarDecryptor;
import net.roseboy.classfinal.util.EncryptUtils;
import net.roseboy.classfinal.util.StrUtils;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
public class DecryptClassFinal {
    public static void main(String[] args) throws IOException {
        String src =System.getProperty("user.dir") +  "/tmp/META-INF/.classes";
        String dst = System.getProperty("user.dir") + "/src/main/class";
        File srcDir = new File(src);
        JarDecryptor.getInstance();
        // 默认 password 位置
        String pass = Files.readString(Path.of(src+"/org.springframework.config.Pass"));
        char[] password =  EncryptUtils.md5(pass.toCharArray());