Author:
vhly[FR]
dAtE: 2008/06/05
Zelix KlassMaster中针对for循环同样也作了代码混淆,混淆的方式和其余的循环逻辑相似,因此在此简单介绍。
vhly
对于一个for循环,最关键的就是循环条件,通常经过ZKM混淆后的条件会有所变化
比如如下代码:
这段代码种,可以找到几个关键点来修复
经过上述方面,可以肯定,这个实际上就是一个for循环,同样类似于while等循环,ZKM采用的是虚假变量的形式
来迷惑反编译器,使其产生类似上述代码的错误代码片断。
修复for循环
by vhly
修复方式就是调整结构,去掉虚假变量
生成代码如下:
这样生成的代码就可以简单得理解了。
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:
这段代码种,可以找到几个关键点来修复
- _L1:上面的 i = 0; 这个可以判断是 初始化
- _L2: 上面的 i++ 这个是循环变量的递增
- 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);
}
这样生成的代码就可以简单得理解了。