翻到的老帖,因为ZKM版本变更每个版本的混淆名称都会发生改变。
我也挺感兴趣的,于是有了下面的这篇旷世大石
[分享]Zelix KlassMaster去除调试限制-软件逆向-看雪论坛-安全社区|非营利性质技术交流社区
1. 我们可以先通过编写一个自定义的ClassLoader,重写findClass,根据类名获得指定类的字节数据 中间我们得到的字节数据拿来修改,修改成功后,调用 defineClass , 将修改完成的转为Class。
代码:
2. 在Idea编写自定义 类加载器 加载Jar ,利用反射启动,ZKM.jar
如此一来,我们就可以直接通过 Idea环境的字节码修改,来批量修改字节码了
3. 那么如何定位呢??
通过研究发现 ZKM.jar 里的 整数型 长整数型 字符串 还有各种调用都会变成一个叫 invokedynamic 的指令,那么我们如果,把他的数据拦截并修改,
是不是也能调试,甚至是破解他呢?
如上图,有大量的 rjj.a ,这个就是这个版本的 invokedynamic 混淆, 最前面的 "s" 字符串参数表示对应的 invokexxxx 。
根据线索找到该函数,后续我们编写修改字节码,重写了该函数,将其参数传递到我们工作环境,我们就更方便进行修改,和拦截 输出了。
在做完以上这些,感觉似乎是没什么用啊,没有 字符串 整数这些关键定位的。
很容易发现,每个类中如果有加密的字符串 整型,会在该类下生成一个方法,用于解密获得的结果
如上图的 b(MethodHandles.Lookup lookup, MutableCallSite mutableCallSite, String string, Object[] objectArray),就是解密字符串得到的。
我们匹配他的 desc ,让他走我们工作环境的处理即可。。。
登录后可查看完整内容
---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-289257.htm
[原创]更简单的去除Zelix KlassMaster次数限制方法
168 浏览
7 回复
大佬我在ZKM25.0上面去尝试做了破解,用字节码覆盖了时间解密的函数和把两个流混淆数量限制给去除了。不过我发现还存在一个暗桩,会在软件试用到期后在流混淆时丢出一个报错导致混淆失败,不知大佬有没有思路解决。
AnserJim
大佬我在ZKM25.0上面去尝试做了破解,用字节码覆盖了时间解密的函数和把两个流混淆数量限制给去除了。不过我发现还存在一个暗桩,会在软件试用到期后在流混淆时丢出一个报错导致混淆失败,不知大佬有没有思路 ...
我的做法是:直接给获取时间的调用System.currentTimeMillis,定死在试用期间就可以了。
大佬我在ZKM25.0上面去尝试做了破解,用字节码覆盖了时间解密的函数和把两个流混淆数量限制给去除了。不过我发现还存在一个暗桩,会在软件试用到期后在流混淆时丢出一个报错导致混淆失败,不知大佬有没有思路 ...
我的做法是:直接给获取时间的调用System.currentTimeMillis,定死在试用期间就可以了。
ciallo_dev
我的做法是:直接给获取时间的调用System.currentTimeMillis,定死在试用期间就可以了[em_014]。
不知道为什么 我按你的方法去覆盖了调用混淆的方法 将currentTimeMillis返回的结果篡改还是会报错 很奇怪 有可能是我操作有问题?
我的做法是:直接给获取时间的调用System.currentTimeMillis,定死在试用期间就可以了[em_014]。
不知道为什么 我按你的方法去覆盖了调用混淆的方法 将currentTimeMillis返回的结果篡改还是会报错 很奇怪 有可能是我操作有问题?
我试了一下, 方法不错, 但是Obfuscate control flow 里的 normal/aggressive 似乎不能用, 是这个版本的问题吗
mb_stmnoiqv
我试了一下, 方法不错, 但是Obfuscate control flow 里的 normal/aggressive 似乎不能用, 是这个版本的问题吗
可能你还有别的地方没处理好,应该是内部有关于时间的暗桩没处理好
我试了一下, 方法不错, 但是Obfuscate control flow 里的 normal/aggressive 似乎不能用, 是这个版本的问题吗
可能你还有别的地方没处理好,应该是内部有关于时间的暗桩没处理好
再更新一波,前面提到的ZKM检测调试代码在static中,其实是可以修改他的代码,我们可以从zkm的key工厂中的a0方法里的ldc字符串全部破坏即可绕过 javaagent的参数检测
ciallo_dev
再更新一波,前面提到的ZKM检测调试代码在static中,其实是可以修改他的代码,我们可以从zkm的key工厂中的a0方法里的ldc字符串全部破坏即可绕过 javaagent的参数检测
对楼主的这篇帖子很感兴趣,楼主可否提供一下zkm本体? 一直想试一下 但是没本体
再更新一波,前面提到的ZKM检测调试代码在static中,其实是可以修改他的代码,我们可以从zkm的key工厂中的a0方法里的ldc字符串全部破坏即可绕过 javaagent的参数检测
对楼主的这篇帖子很感兴趣,楼主可否提供一下zkm本体? 一直想试一下 但是没本体