JAVA软件逆向之去除Java混淆器Zelix KlassMaster的试用时间限制

声明:本文内容仅供学习交流,请勿用于非法用途

Zelix KlassMaster是一款优秀的Java混淆器,但试用版有时间限制,偶然间从一个群里获得了ilanyu上传的ZMK9.0.8试用版,尝试运行时发现已经过期。


目前的ZKM已经不再屏蔽中国大陆IP了,但是下载试用版有个限制,就是需要用公司邮箱,不能用免费的邮箱如Hotmail, Yahoo, Gmail等等。

公司邮箱,如果有的话建议优先使用公司邮箱。如果实在没有或者公司限制邮箱的使用范围可以用下面的方法。

仔细推敲里面的描述我们发现,不能使用免费邮箱,那么大体上可能能使用独立域名邮箱,自己买个域名,买个云服务器,搭建一个邮件服务器就可以实现。

ZKM试用版下载:http://www.zelix.com/klassmaster/download1.html

试用版官方有两个限制

1.每个类最多混淆2个方法

2.试用时间只有30天

本文只谈论去除试用时间的限制,不讨论方法数目的限制

首先试用-verbose参数输出其启动过程

java -verbose -jar ZKM.jar

输出结果如下


为了简化这个输出过程,我们可以使用-javaagent写代码过滤Java本身的类

参考这篇文章的输出所有类,将代码

public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException {
        System.out.println(className);      
        return null;
    }

改成

@Override
	public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined,
			ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException {
		if (className.startsWith("com/zelix/")) {
			System.out.println(className);
		}
		return null;
	}

打包成ZKMAgent.jar

执行如下命令

java -javaagent:ZKMAgent.jar -jar ZKM.jar

输出


推测判断时间在com/zelix/lh类里

至于具体是什么意思呢,反编译看下


只凭这点还真不好找,好在从网上找到了一个8.0的破解版

下载地址:https://download.csdn.net/download/luffybaby/9915433

新版肯定是在旧版基础上改的,用上面的方法找到旧版中的这个类


旧版a方法比新版的a少一个参数,功能上我们暂且认为是一样的。

我们直接修改a方法体,直接返回0,发现时间变了

所以说,这个方法的返回值会影响时间,但是直接将这个值成很大的数9999999999000L,也只影响到了Evaluation has expired后面输出的时间值,没有弹出窗口。

注意到8.0里面判断了传入的参数,然后返回不同的值,我们这里仿照它,先重写方法体调用System.out.println输出这个参数


可以看到,输出了三个值,说明这个方法调用了三次,把这三个值按照同样的判断重写方法体。修改成功!



猜你喜欢

转载自blog.csdn.net/gsls200808/article/details/80067617