Java混乱器Zelix KlassMaster逆向工程(六) for循环的混淆与修复

Author: vhly[FR]
dAtE: 2008/06/05
Zelix KlassMaster中针对for循环同样也作了代码混淆,混淆的方式和其余的循环逻辑相似,因此在此简单介绍。
vhly
对于一个for循环,最关键的就是循环条件,通常经过ZKM混淆后的条件会有所变化
比如如下代码:
        i = 0;
        if(!flag) goto _L2; else goto _L1
_L1:
        wq wq1 = (wq)arraylist1.get(i);
        ou ou1 = wq1.b;
        if(ou1 == null)
            ou1 = (ou)vq1.e().a(new dp(wq1.a));
        oq oq2 = new oq();
        oq2.a(vq1, ou1);
        arraylist.add(oq2);
        i++;
_L2:
        if(i < arraylist1.size()) goto _L1; else goto _L3
_L3:

这段代码种,可以找到几个关键点来修复
  1. _L1:上面的 i = 0; 这个可以判断是 初始化
  2. _L2: 上面的 i++ 这个是循环变量的递增
  3. if(i < arraylist1...) 这个判断实际上就是循环的判断条件

经过上述方面,可以肯定,这个实际上就是一个for循环,同样类似于while等循环,ZKM采用的是虚假变量的形式
来迷惑反编译器,使其产生类似上述代码的错误代码片断。
修复for循环
by vhly
修复方式就是调整结构,去掉虚假变量
生成代码如下:
        for (i = 0; i < arraylist1.size(); i++) {
            wq wq1 = (wq) arraylist1.get(i);
            ou ou1 = wq1.b;
            if (ou1 == null)
                ou1 = (ou) vq1.e().a(new dp(wq1.a));
            oq oq2 = new oq();
            oq2.a(vq1, ou1);
            arraylist.add(oq2);
        }

这样生成的代码就可以简单得理解了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值