Java混乱器Zelix KlassMaster逆向工程(五) 针对 ZKM处理 for/while/switch的介绍

随着逆向工程的深入,越来越多的代码被整理, vhly
其中有一些代码基本相似,类似于如下代码:
        gy gy1;
        Iterator iterator;
        boolean flag;
        flag = ec.b;
        gy1 = (gy)hashmap.get(ou1);
        if(gy1 != null)
            break MISSING_BLOCK_LABEL_153;
        gy1 = new gy(27, 5, 5);
        HashMap hashmap1 = new HashMap(27);
        ou1.a(hashmap1);
        iterator = hashmap1.entrySet().iterator();
        if(!flag) goto _L2; else goto _L1
_L1:
        java.util.Map.Entry entry = (java.util.Map.Entry)iterator.next();
        ss ss1 = (ss)entry.getKey();
        Integer integer = (Integer)entry.getValue();
        String s = ss1.b();
        mt mt1 = yo1.a(s);
        gy1.a(ss1.s(), mt1, integer, integer);
_L2:
        if(iterator.hasNext()) goto _L1; else goto _L3
_L3:
        hashmap.put(ou1, gy1);
        return gy1;

这段代码最开始看,感觉有点乱,但是只要仔细看看就可以明白了
这段代码中唯一一个有问题的地方就是 if(!flag) goto _L2; else goto _L1了,
这一句可以说是ZKM处理流程时的关键,
实际上 flag永远 = false也就是,相当于 goto 首先到 _L2 之后 通过 hasNext()条件 来 定位到_L1
当_L1执行到 _L2的时候再判断, 这段代码就可以认为是 一个 do{}while(xxx)
或者更清楚地看作 while(xxx.hasNext()){}的处理。
整理后的代码如下:
        gy gy1;
        Iterator iterator;
        gy1 = (gy) hashmap.get(ou1);
        if (gy1 == null) {  // 此处作了条件判断的转义
            gy1 = new gy(27, 5, 5);
            HashMap hashmap1 = new HashMap(27);
            ou1.a(hashmap1);
            iterator = hashmap1.entrySet().iterator();
            while (iterator.hasNext()) {         // 此处通过while(...)的转换
                java.util.Map.Entry entry = (java.util.Map.Entry) iterator.next();
                ss ss1 = (ss) entry.getKey();
                Integer integer = (Integer) entry.getValue();
                String s = ss1.b();
                mt mt1 = yo1.a(s);
                gy1.a(ss1.s(), mt1, integer, integer);
            }
            hashmap.put(ou1, gy1);
        }
        return gy1;

从上述代码可以看出 Zelix KlassMaster
实际上在针对for while switch的混淆时候,采用的是跳转代替来转换,但是执行逻辑保持不变,
因此,混淆器应该采用类似的手段来进行代码的保护
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值