ClassFinal加密的jar文件解密

ClassFinal资料介绍:

ClassFinal: Java字节码加密工具

根据ClassFinal的介绍可知道,需要解密ClassFinal的加密文件,前提是获取到了加密的密码。

至于如何获取到加密的密码,这里就无法具体分析了。因为ClassFinal加密的jar文件启动方式可以各种各样的触发,但是加密密码一定会在启动命令里加上,用于启动后的解密:

java -javaagent:test.jar="-pwd 123456" -jar test.jar

大家需要自己找到启动jar文件的入口才能找到具体的加密密码。

使用ClassFinal加密后,ClassFinal会将解密代码同样打包到jar文件中,但是由于ClassFinal只会加密指定的文件,不会加密自身的文件,因此可以使用ClassFinal自身的代码去解密加密的文件,

ClassFinal会将加密后的文件存放在META-INF/.classes/目录下面,运行时解密该目录下的文件。解密方法便是:net/roseboy/classfinal/JarDecryptor.class#doDecrypt

我们首先可以先反编译jar文件,得到net/roseboy/classfinal目录下的java代码,再直接使用JarDecryptor类的解密方法doDecrypt去解密文件即可。

以下是本人根据该方法写的解密方法:

/**
     * classfinal加密文件破解解密
     *
     * @param args
     */
    public static void main(String[] args) {
        String projectPath = "C:\\Users\\Downloads\\jar_Decompiler";//项目路径,META-INF文件夹的父级路径
        String classPath = "C:\\Users\\Downloads\\jar_Decompiler\\META-INF\\.classes";//加密文件所在的路径
        char[] password = "123456".toCharArray();//加密密码
        JarDecryptor jarDecryptor = JarDecryptor.getInstance();
        // 获取加密文件目录下的所有文件
        File directory = new File(classPath);
        File[] files = directory.listFiles();
        if (files != null) {
            for (File file : files) {
                if (file.isFile()) {
                    //开始解密
                    byte[] bytes = jarDecryptor.doDecrypt(projectPath, file.getName(), password);
                    File fileNew = new File(file.getName() + ".class");
                    IoUtils.writeFile(fileNew, bytes);
                    System.out.println("解密完成:" + file.getName());
                }
            }
        } else {
            System.out.println("目录为空或无法读取。");
        }
        System.out.println("解密完成");
    }

以下是解密前后对比:

更新2025.06.18:

根据下方评论里各位朋友遇到的情况,需要在这里特别补充一点说明。

具体的如何解密是依据于如何加密而决定的,因此大家需要参考一下下面的资料。

根据官方文档的介绍,加密方式有3种(咱们排除不加密的情况):

1、启动时,启动命令直接密码解密。上方文章所遇到的例子便是这种情况,同时在这里也对各位的误导抱歉,上面说了一些“一定”这样绝对性的描述词,仅适用于这种解密方式。

2、启动时,需要在绑定机器码的电脑上,启动命令里使用密码解密。

3、启动时,启动命令不解密,然后在启动控制台里输入密码解密,或者这里也绑定了机器码。

由此可见,当密码并不写在启动命令里的时候(这里引申为泛指密码没有存在本地的场景),而是需要在控制台里输入密码的情况,那基本上就是没戏了。因为是AES加密,没办法逆推出来源文件的。密码相当于口口相传了,没密码也没办法AES解密了。

强烈建议各位去上方的链接看看官方文档,里面都有这方面的加密介绍,避免走弯路。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值