首页
社区
课程
招聘
[分享]Zelix KlassMaster去除调试限制
2021-3-15 23:40 9382

[分享]Zelix KlassMaster去除调试限制

2021-3-15 23:40
9382

    其他人也对这个软件感兴趣,之前去掉了时间限制,破解这个次数限制是个大工程,短时间不可能搞定,通过修改字节码调试太麻烦,效率也很低,今天研究了一下怎么进行调试,因为这个软件只要在调试模式下,直接初始化异常,报des解密错误。过掉反调试功能,能用一些IDE工具去调试就方便多了。经过研究,发现在反调试放在static代码段里,static代码段是在加载类初始化操作进行的,比main方法都要早运行,检测到有调试行为,直接初始化失败,static代码段调试也是不方便的,这个设置确实有点厉害。

    Zelix KlassMaster混淆软件,版本15.0.0,附件是已经过掉反调试指令的(其他时间等限制未做修改),只是修改了一个字符(原版软件经过recaf修改后小了差不多一半),真有兴趣的可以研究一下修改了什么,没有兴趣的可以直接拿去用。提示:检测调试行为就是获取运行参数,存在-Xdebug -Xrunjdwp -agentlib:jdwp -agentpath: -javaagent:其中一个参数,就认为存在调试行为。

    有兴趣的可以一起研究一下破解次数限制,欢迎私信。


[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

最后于 2021-4-23 11:37 被guduzhe编辑 ,原因:
上传的附件:
收藏
点赞0
打赏
分享
最新回复 (11)
雪    币: 5
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_zjwuturb 2021-3-22 12:33
2
0
次数限制在abr中
雪    币: 2801
活跃值: (4573)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
guduzhe 2021-3-22 23:05
3
0
mb_zjwuturb 次数限制在abr中
谢谢
雪    币: 5
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_zjwuturb 2021-4-20 20:34
4
0
ZKM 13.0.0
https://masterof13fps.com/forum/index.php?threads/zkm-obfuscator-13-0-0-cracked.14/
雪    币: 2801
活跃值: (4573)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
guduzhe 2021-4-23 11:50
5
0
mb_zjwuturb ZKM 13.0.0 https://masterof13fps.com/forum/index.php?threads/zkm-obfuscator-13-0-0-cracked.14/

反调试代码在com.zelix.aac.a0()中,可以通过破坏加密字符,导致解密失败,然后无法进行反射,从而过掉反调试。


Obfuscate control flow参数流程,可以通过arthas调试

void com.zelix.sk.run()


void com.zelix.auh.k(java.lang.Object[])
watch com.zelix.auh k {params[0][33]}   //Obfuscate control flow

com.zelix.i7.watch com.zelix.i7  {params[38]}   //Obfuscate control flow,参数为39,搜索ILOAD 39定位

private com.zelix.ih com.zelix.i7.a(java.lang.Object[])
watch com.zelix.i7 a {params[0][1]} 'returnObj!=null&&returnObj instanceof com.zelix.ih' -x 3   //Obfuscate control flow

public void com.zelix.abr.Y(java.lang.Object[])//类
watch com.zelix.abr Y {params[5]} -x 3  //Obfuscate control flow

int com.zelix.a0r.f(java.lang.Object[])//method
watch com.zelix.a0r f {params[0][6]} -x 2

int com.zelix.avb.c(java.lang.Object[])//code属性
watch com.zelix.avb c {method.toString(),params[0][6]} 'params.length==1&&params[0].getClass().isArray()&&params[0].length==10' -x 3

int com.zelix.a0u.b(java.lang.Object[])//code属性指令部分
watch com.zelix.a0u b {method.toString(),params[0][5]} 'params.length==1&&params[0].getClass().isArray()&&params[0].length==10' -x 3


Obfuscate control flow参数控制应该在这个方法中

public void com.zelix.abr.Y(java.lang.Object[])


大体可能为,用recaf修改

AL:

LINE AL 2208

ICONST_2

ISTORE 57


修改为

AL:

LINE AL 2208

ALOAD 56

ARRAYLENGTH

ISTORE 57



最后于 2021-4-23 11:56 被guduzhe编辑 ,原因:
雪    币: 2801
活跃值: (4573)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
guduzhe 2021-4-24 16:32
6
1

自己写了一个代理类,这个代理类破解了ZKM的反调试功能,因为java代理类不限制个数,可以用这个代理类用在你的代理类前,过掉反调试功能,或者有经验的直接修改class文件。

agent是通用的,还有enable也是通用的,其他都是针对ZKM 15.0版本的。

enable实际就是类似红框里编辑框和按钮、下拉列表等等都可以点击和修改,是有效的了。



用法如下,


比如关闭代理功能


比如关闭时间修改,打开时间修改debug


比如输出动态方法调用,这里可能是方法,也可能属性,属性就是getter和setter方法,这个根据字节码返回类型判断,如果返回是void就是setter,有返回类型就是getter

比如输出字符

输出字符还是有bug,应该是classloader重复加载类

上传的附件:
雪    币: 351
活跃值: (194)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
~Katyusha~ 2021-4-24 18:25
7
0
guduzhe 自己写了一个代理类,这个代理类破解了ZKM的反调试功能,因为java代理类不限制个数,可以用这个代理类用在你的代理类前,过掉反调试功能,或者有经验的直接修改class文件。agent是通用的,还有en ...
楼主,请问下,JAVA有啥字节码调试工具吗?类似x64dbg这样的调试的,看到现有的都是可以查看字节码,可以调试,但是不能两个结合起来的,很是头疼。
雪    币: 2801
活跃值: (4573)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
guduzhe 2021-4-24 22:13
8
0
~Katyusha~ 楼主,请问下,JAVA有啥字节码调试工具吗?类似x64dbg这样的调试的,看到现有的都是可以查看字节码,可以调试,但是不能两个结合起来的,很是头疼。
没有找到字节码级别的,调试只能根据linenumber下断点,运行也是这样。
雪    币: 2801
活跃值: (4573)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
guduzhe 2021-4-25 11:33
9
0

又加了一个匹配类名前缀和方法名打印调用堆栈的功能


雪    币: 2801
活跃值: (4573)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
guduzhe 2021-4-26 21:26
10
1

看雪的代码显示不如oschina的好看,它的左右不会换行,看起来完整,看雪代码许多都给换行,看起来有些乱。

给出zkm 15.0的类与class文件结构的关系

ClassFile {
    u4             magic;
    u2             minor_version;
    u2             major_version;
    u2             constant_pool_count;
    cp_info        constant_pool[constant_pool_count-1];
    u2             access_flags;
    u2             this_class;
    u2             super_class;
    u2             interfaces_count;
    u2             interfaces[interfaces_count];
    u2             fields_count;
    field_info     fields[fields_count];
    u2             methods_count;
    method_info    methods[methods_count];
    u2             attributes_count;
    attribute_info attributes[attributes_count];
}

com.zelix.abr
h   minor_version
H   major_version
R   constant_pool_info      com.zelix.ok{z:constant_pool_count; j:com.zelix.c5[com.zelix.ok.z]}
l   access_flags            com.zelix.ab3{l:access_flags}
v   this_class              com.zelix.c8
F   this_class              类的完整路径名
p   this_class              上面F的小写
r   this_class              上面F
I   super_class             com.zelix.c8(Object时为null)
k   interfaces_count
j   interfaces              com.zelix.c8[com.zelix.abm.k]
u   fields_count
U   fields                  com.zelix.a0t[com.zelix.abr.u]          com.zelix.a0t{p:access_flags;   n:name_index;   j:descriptor_index; o:attributes_count; k:attributes=com.zelix.ab_[com.zelix.a0t.o]}
K   methods_count
P   methods                 com.zelix.a0r[com.zelix.abr.K]          com.zelix.a0r{p:access_flags;   v:name_index    s:descriptor_index  o:attributes_count; k:attributes=com.zelix.ab_[com.zelix.a0p.o]}
s   attributes_count
A   attributes              com.zelix.ab_[com.zelix.abr.s]


雪    币: 2801
活跃值: (4573)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
guduzhe 2021-4-27 12:44
11
1
mb_zjwuturb 次数限制在abr中

三个字符对应意义

faUA1FjlOXbd1->1600955743799    到期时间
WbGOSe0eeA->2764800000   172800000*4*4=2764800000也就是32天
Vbgm0ee0A->172800000     1000*3600*24*2=172800000也就是两天

放一段时间转换的函数,这个是com.zelix.em类里的,

public static long a(String var3) {
    char[] var5 = var3.toCharArray();
    char[] var6 = new char[var5.length];

    for (int var7 = 0; var7 < var5.length; ++var7) {

        char var8 = var5[var7];
        //System.out.print(var8 + ":");

        //等于0时不处理,实际运行最后var6[var7] = var8;
        if (var8 > '0' && var8 <= '9') {//48-57
            var8 = (char) (58 - var8 + 48);//58-48+48=58=':'    58-49+48=57='9'....58-56+48=50='2'    58-57+48=49='1'
            //System.out.println(var8);
        }

        if (var8 >= 'A' && var8 <= 'J') {//65-74
            var8 = (char) (var8 - 17);//65-17=48='0'   74-17=57='9'
            //System.out.println(var8);
        }

        if (var8 >= 'K' && var8 <= 'T') {//75-84
            var8 = (char) (var8 - 27);//75-27=48='0'   84-27=57='9'
            //System.out.println(var8);
        }

        if (var8 >= 'U' && var8 <= 'Z') {//85-90
            var8 = (char) (var8 - 37);//85-37=48='0'   90-37=53='5'
            //System.out.println(var8);
        }

        if (var8 >= 'a' && var8 <= 'd') {//97-100
            var8 = (char) (var8 - 43);//97-43=54='6'   100-43=57='9'
            //System.out.println(var8);
        }

        if (var8 >= 'e' && var8 <= 'n') {//101-110
            var8 = (char) (var8 - 53);//101-53=48='0'   110-53=57='9'
            //System.out.println(var8);
        }

        if (var8 >= 'o' && var8 <= 'x') {//111-120
            var8 = (char) (var8 - 63);//111-63=48='0'   120-63=57='9'
            //System.out.println(var8);
        }

        var6[var7] = var8;
    }

    return Long.parseLong(new String(var6));
}


逆算法,由long转String


public static String a(long l) {
    char[][] chars = new char[][]{
            {'0', '9', '8', '7', '6', '5', '4', '3', '2', '1'},
            {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'},
            {'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T'},
            {'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd'},
            {'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n'},
            {'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x'}
    };

    char[] var5=(l+"").toCharArray();
    Random rom=new Random();

    for (int i = 0; i < var5.length; i++) {
        var5[i]= chars[rom.nextInt(chars.length)][Integer.parseInt(var5[i]+"")];
    }

    return new String(var5);
}


雪    币: 349
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
viogel 2021-7-12 12:00
12
0

不懂就问,虚心请教,这些包中的类是干什么用的?

游客
登录 | 注册 方可回帖
返回