我用反编译工具将.class文件反编译后有一个函数中的代码如下:
public String toString()
    {
        String s;
        if(_items == 0 || _v == null)
            return super.toString();
        s = new String();
        s;
        JVM INSTR new #53  <Class StringBuffer>;
        JVM INSTR dup_x1 ;
        JVM INSTR swap ;
        String.valueOf();
        StringBuffer();
        "(";
        append();
        toString();
        s;
        int i = 0;
          goto _L1
_L3:
        s;
        JVM INSTR new #53  <Class StringBuffer>;
        JVM INSTR dup_x1 ;
        JVM INSTR swap ;
        String.valueOf();
        StringBuffer();
        _v[i].toString();
        append();
        toString();
        s;
        if(i == _items - 1)
            continue; /* Loop/switch isn't completed */
        s;
        JVM INSTR new #53  <Class StringBuffer>;
        JVM INSTR dup_x1 ;
        JVM INSTR swap ;
        String.valueOf();
        StringBuffer();
        ",";
        append();
        toString();
        s;
        i++;
_L1:
        if(i < _items) goto _L3; else goto _L2
_L2:
        s;
        JVM INSTR new #53  <Class StringBuffer>;
        JVM INSTR dup_x1 ;
        JVM INSTR swap ;
        String.valueOf();
        StringBuffer();
        ")";
        append();
        toString();
        s;
        return s;
    }
显然是不正确的,我试验了好几个反编译工具,这个函数反编译出来的都是这样。
请各位大哥出个主意。谢谢了!
分不够可以另开贴子给!

解决方案 »

  1.   

    JAVA现在的防反编译技术已经较为成熟了,有很多防反编译的工具,反编译出来的都是一些乱码。建议你反编译一次看不懂就放弃算了,因为它有可能用了防反编译技术。
    否则从成本上说是不划算的。
      

  2.   

    楼上的说的没错,都是jad内核。
    但上面的让我怎么猜呀,没头没尾的!
    谁有反编译经验,告诉我上面的代码是什么意思?
      

  3.   

    inthistime(共此时), 你说的有道理,但我想这个.class应该是没有混淆或则是简单混淆,因为其他的很多函数都没有问题,逻辑上也正确,代码也正确,就这个函数有问题。
    如果是高级混淆,我想其他的函数反编译出来的也应该有问题。这个.class文件中还有其他很多函数比这函数要复杂的多,那些函数都没有问题。
    我是准备要放弃,但有点不甘心。因为这个反编译工作多我来说很重要。这个库已经没有了,买也买不着!我只能反编译然后自己修改代码。否则我的工作就只能搁置了。
      

  4.   

    正如前面 lixiaoxue85 兄所说,目前常见的反编译软件,其内核总共也没有几个,基本都是 JAD。JAD 在反编译的时候,有时确实会出现一些异常的结果(排除混淆的原因),基本都是因为 try/catch、for、break 等流程控制语句造成的,如果你耐心多看看,多猜猜,基本也能猜出个大概。就算不能精确再现程序原貌,至少逻辑上大概差不多。比如楼主这段程序,我看差不多应该是下面的样子:public String toString() {
        if(_items == 0 || _v == null)
            return super.toString();    String s = "(";
        for (int i=0; i<_items; i++) {
            s += _v[i];
            if (i != _items-1)
                s += ",";
        }
        s += ")";
        return s;
    }
      

  5.   

    我只想说一句话!
    maquan('ma:kju)你真是个天才!
    我服了你!