现在的JDK都是1.4/1.5用比较老的JAD和ECLIPSE的JODE进行反编译,出来的代码的可读性比较差,而且比较多错误.
以下是同一CLASS文件反编译出来的代码:
可以看出:
1、JODE出来的代码的可读性最好,不过有CLASS文件代码用JODE是反编译不出来出现异常;
2、JAD出来的代码经常要进行大量整理;
3、JODE和JAD对混混淆过的代码,变量的顺序可能会不一样,自变量的命名,JODE会好一些。
4、对于PUSH和POP,左修整时候,可以自己加自变量,临时存储;
5、JAVA对于表达式或函数参数,是从右到左进行解释的。函数参数,最后PUSH的,是最右边的参数;对于
等号赋值也是先右后左进行出栈。
/**
* jode
* @param i
* @param i_1_
* @param graphics
*/
private void b(int i, int i_1_, Graphics graphics) {
graphics.setColor(0);
if (((h) this).e.f == null)
graphics.setColor(6710886);
else {
int tmp=0;
if (((h) this).e.f.size() == 1) {
PUSH g.c;
PUSH = 64;
} else {
PUSH g.c;
PUSH = 80;
}
g.a(POP, POP, 0, 16, 16, i, i_1_, graphics);
}
StringBuffer stringbuffer = new StringBuffer();
if (((h) this).e.e > 0) {
graphics.setColor(16711680);
stringbuffer.append('[');
stringbuffer.append(((h) this).e.e);
stringbuffer.append("/u65b0/u6d88/u606f"); //新消息
stringbuffer.append(']');
}
if (((h) this).f)
graphics.setColor(16777215);
stringbuffer.append(((h) this).e.a());
graphics.drawString(a(stringbuffer.toString(), 158), i + 16 + 1,
i_1_ + 1, 20);
}
/**
* jad
* @param i
* @param j
* @param g1
*/
private void b(int i, int j, Graphics g1)
{
g1.setColor(0);
if(e.f != null) goto _L2; else goto _L1
_L1:
g1.setColor(0x666666);
goto _L3
_L2:
if(e.f.size() != 1) goto _L5; else goto _L4
_L4:
g.c;
76;
goto _L6
_L5:
g.c;
95;
_L6:
0;
19;
19;
i;
j;
g1;
g.a();
_L3:
StringBuffer stringbuffer = new StringBuffer();
if(e.e > 0)
{
g1.setColor(0xff0000);
stringbuffer.append('[');
stringbuffer.append(e.e);
stringbuffer.append("/u65B0/u6D88/u606F");
stringbuffer.append(']');
}
if(f)
g1.setColor(0xffffff);
stringbuffer.append(e.a());
g1.drawString(a(stringbuffer.toString(), 219), i + 19 + 1, j + 1, 20);
return;
}
// public final void a(boolean bool) {
// if (bool) {
// PUSH this;
// PUSH "BD";
// } else {
// PUSH this;
// PUSH "AA";
// }
// ((n) POP).d = POP;
// }
//
public final void a(boolean flag)
{
if(!flag){
this.d="AA";
}else{
this.d="BD";
}
// if(!flag) goto _L2; else goto _L1
//_L1:
// this;
// "BD";
// goto _L3
//_L2:
// this;
// "AA";
//_L3:
// d;
}