反编译过来的一段代码, a方法中的label标签,是不是反编译出错了? label不是只能循环中吗? 能否指出应该如何修改

反编译过来的一段代码, a方法中的label标签,是不是反编译出错了? label不是只能循环中吗? 能否指出应该怎么修改?
本帖最后由 wdydxf1 于 2015-01-03 21:36:31 编辑
package helloWord;

public class b {
public byte[] a;
public int b;

private static final int[] c;
private static final int[] d;
private int e;
private int f;
private final int[] g;

static {
int[] arrayOfInt1 = new int[256];
arrayOfInt1[0] = -1;

c = arrayOfInt1;
int[] arrayOfInt2 = new int[256];

d = arrayOfInt2;
}

public b(int paramInt, byte[] paramArrayOfByte) {
this.a = paramArrayOfByte;
if ((paramInt & 0x8) == 0) {
}
for (int[] arrayOfInt = c;; arrayOfInt = d) {
this.g = arrayOfInt;
this.e = 0;
this.f = 0;
return;
}
}

public final boolean a(byte[] paramArrayOfByte, int paramInt1, int paramInt2) {


    if (this.e == 6) {
      return false;
    }
    int i = paramInt2 + paramInt1;
    int j = this.e;
    int k = this.f;
    int m = 0;
    byte[] arrayOfByte = this.a;
    int[] arrayOfInt = this.g;
    int n = j;
    int i1 = paramInt1;
    label57:
    int i5;
    if (i1 >= i) {
      i5 = k;
    }
    switch (n)
    {
    case 0: 
    default: 
    case 1: 
    case 2: 
    case 3: 
      for (;;)
      {
        this.e = n;
        this.b = m;
        return true;
        if (n == 0)
        {
          label115:
          if (i1 + 4 <= i)
          {
            k = arrayOfInt[(0xFF & paramArrayOfByte[i1])] << 18 | arrayOfInt[(0xFF & paramArrayOfByte[(i1 + 1)])] << 12 | arrayOfInt[(0xFF & paramArrayOfByte[(i1 + 2)])] << 6 | arrayOfInt[(0xFF & paramArrayOfByte[(i1 + 3)])];
            if (k >= 0) {
              break label267;
            }
          }
          if (i1 >= i) {
            break label57;
          }
        }
        int i2 = i1 + 1;
        int i3 = arrayOfInt[(0xFF & paramArrayOfByte[i1])];
        switch (n)
        {
        }
        label267:
        do
        {
          do
          {
            do
            {
              do
              {
                do
                {
                  do
                  {
                    i1 = i2;
                    break;
                    arrayOfByte[(m + 2)] = ((byte)k);
                    arrayOfByte[(m + 1)] = ((byte)(k >> 8));
                    arrayOfByte[m] = ((byte)(k >> 16));
                    m += 3;
                    i1 += 4;
                    break label115;
                    if (i3 >= 0)
                    {
                      n++;
                      k = i3;
                      i1 = i2;
                      break;
                    }
                  } while (i3 == -1);
                  this.e = 6;
                  return false;
                  if (i3 >= 0)
                  {
                    k = i3 | k << 6;
                    n++;
                    i1 = i2;
                    break;
                  }
                } while (i3 == -1);
                this.e = 6;
                return false;
                if (i3 >= 0)
                {
                  k = i3 | k << 6;
                  n++;
                  i1 = i2;
                  break;
                }
                if (i3 == -2)
                {
                  int i4 = m + 1;
                  arrayOfByte[m] = ((byte)(k >> 4));
                  n = 4;
                  m = i4;
                  i1 = i2;
                  break;
                }
              } while (i3 == -1);
              this.e = 6;
              return false;
              if (i3 >= 0)
              {
                k = i3 | k << 6;
                arrayOfByte[(m + 2)] = ((byte)k);
                arrayOfByte[(m + 1)] = ((byte)(k >> 8));
                arrayOfByte[m] = ((byte)(k >> 16));
                m += 3;
                i1 = i2;
                n = 0;
                break;
              }
              if (i3 == -2)
              {
                arrayOfByte[(m + 1)] = ((byte)(k >> 2));
                arrayOfByte[m] = ((byte)(k >> 10));
                m += 2;
                n = 5;
                i1 = i2;
                break;
              }
            } while (i3 == -1);
            this.e = 6;
            return false;
            if (i3 == -2)
            {
              n++;
              i1 = i2;
              break;
            }
          } while (i3 == -1);
          this.e = 6;
          return false;
        } while (i3 == -1);
        this.e = 6;
        return false;
        this.e = 6;
        return false;
        int i7 = m + 1;
        arrayOfByte[m] = ((byte)(i5 >> 4));
        m = i7;
        continue;
        int i6 = m + 1;
        arrayOfByte[m] = ((byte)(i5 >> 10));
        m = i6 + 1;
        arrayOfByte[i6] = ((byte)(i5 >> 2));
      }
    }
    this.e = 6;
    return false;

}
}

------解决思路----------------------
反编译过来的代码不一定是正确的,只能查看大致的逻辑,而且通常充斥着switch do while之类的结构,楼主可以试试用不同版本的反编译工具反编译出来的代码都各不相同,所以想直接用反编译过来的代码基本是不可能的,说下我以前反编译android的apk的过程,只尝试用apktool反编译apk得到smali形式的中间代码,smali这个有专门的语法,然后修改这个文件再打包。就是只做到在别人的基础上加上自己的逻辑或者修改已有逻辑,获取到源代码再开发我还做不到。而且我反编译的应该是没有加固过的,加固过的没试过,应该更难了
------解决思路----------------------
你反编译的哪里来的class?  估计是混淆过吧. 

不过正常通过javac编译的.class都能正确反编译出来. 我用jd-gui.exe这个工具