java反編譯心得

來源:互聯網
上載者:User

現在的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;
    }

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.