首页
社区
课程
招聘
[原创]更简单的去除Zelix KlassMaster次数限制方法
发表于: 2025-11-30 13:33 1991

[原创]更简单的去除Zelix KlassMaster次数限制方法

2025-11-30 13:33
1991


翻到的老帖,因为ZKM版本变更每个版本的混淆名称都会发生改变。


我也挺感兴趣的,于是有了下面的这篇旷世大石


[分享]Zelix KlassMaster去除调试限制-软件逆向-看雪论坛-安全社区|非营利性质技术交流社区




通过修改字节码调试太麻烦了,有没有一种更简单,更高效的方法?


本方法需要在idea环境,添加过调试检测的 javaagent , 因为idea会自带一个 javaagent。

但是又因为ZKM检测调试代码在static中,我们无法修改他的字节码(,只能先编写一个过调试的jar


具体看老帖作者的操作



1. 我们可以先通过编写一个自定义的ClassLoader,重写findClass,根据类名获得指定类的字节数据

    中间我们得到的字节数据拿来修改,修改成功后,调用 defineClass , 将修改完成的转为Class。


代码:


2. 在Idea编写自定义 类加载器 加载Jar ,利用反射启动,ZKM.jar



如此一来,我们就可以直接通过 Idea环境的字节码修改,来批量修改字节码了


3. 那么如何定位呢??


通过研究发现 ZKM.jar 里的 整数型 长整数型 字符串 还有各种调用都会变成一个叫 invokedynamic 的指令,那么我们如果,把他的数据拦截并修改,


是不是也能调试,甚至是破解他呢?



如上图,有大量的 rjj.a ,这个就是这个版本的 invokedynamic 混淆, 最前面的 "s" 字符串参数表示对应的  invokexxxx 。


根据线索找到该函数,后续我们编写修改字节码,重写了该函数,将其参数传递到我们工作环境,我们就更方便进行修改,和拦截 输出了。



在做完以上这些,感觉似乎是没什么用啊,没有 字符串 整数这些关键定位的。


很容易发现,每个类中如果有加密的字符串 整型,会在该类下生成一个方法,用于解密获得的结果




传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2025-11-30 13:58 被ciallo_dev编辑 ,原因: 为什么会吞代码?
收藏
免费 2
支持
分享
最新回复 (2)
雪    币: 3
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
大佬我在ZKM25.0上面去尝试做了破解,用字节码覆盖了时间解密的函数和把两个流混淆数量限制给去除了。不过我发现还存在一个暗桩,会在软件试用到期后在流混淆时丢出一个报错导致混淆失败,不知大佬有没有思路解决。
2025-12-19 23:26
0
雪    币: 930
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
AnserJim 大佬我在ZKM25.0上面去尝试做了破解,用字节码覆盖了时间解密的函数和把两个流混淆数量限制给去除了。不过我发现还存在一个暗桩,会在软件试用到期后在流混淆时丢出一个报错导致混淆失败,不知大佬有没有思路 ...
我的做法是:直接给获取时间的调用System.currentTimeMillis,定死在试用期间就可以了
5天前
0
游客
登录 | 注册 方可回帖
返回