Java反編譯工具CFR,Procyon簡介


Java反編譯工具有很多,個人覺得使用最方便的是jd-gui,當然jad也不錯,jd-gui主要提供了圖形界面,操作起來很方便,但是jd-gui很久沒有更新了,java 7出來很久了,jd-gui在反編譯java 7的class文件時候會遇到部分語法不支持的問題,下面我舉幾個例子,我使用的是jd-gui035。

    

   這是java7支持的在switch中使用String,下面可以看jd-gui反編譯的結果:

   

     反編譯結果看起來有點繞,當然結果是一樣的,只是代碼意圖不直接。

     下面看下java 7的資源自動關閉:

     

    jd-gui反編譯的結果為:

   

    我使用的這個jd-gui反編譯報錯,可能是我的版本不是最新的。

    再看下java 7的語法糖功能:

    

     jd-gui反編譯結果:

     

    反編譯結果正確,綜上,jd-gui對java 7的資源自動關閉語法不支持。

    下面我介紹2個支持java 7語法的反編譯工具,cfr和procyon,可能大家聽說過,我會做個實際例子看下怎么用。

     (一)cfr簡介

     cfr官網鏈接:

     http://www.benf.org/other/cfr/

    

Java代碼   收藏代碼
  1. CFR will decompile modern Java features - Java 8 lambdas (pre and post Java beta 103 changes), Java 7 String switches etc, but is written entirely in Java 6  

    這是官網的描述,Jar在附件提供下載。

    語法:

    反編譯單個class文件:

 

Java代碼   收藏代碼
  1. java -jar cfr_0_59.jar SwitchTest.class  

   反編譯整個Jar包:

  

Java代碼   收藏代碼
  1. java -jar cfr_0_61.jar java7_jar.jar --outputdir D:/Java/tmp  

 

    下面是具體使用,仍以上面的class為例,使用cfr進行反編譯:

     

   這個和jd-gui結果一樣,可以看到java7的語法糖只是顯示處理好看些,反編譯出來還是原始的數據類型。

    

   cfr對java 7的自動關閉語法反編譯的結果是顯式在finally里面添加close方法。

    

    cfr反編譯Switch String使用了Goto 語句,在Goto中使用equals字符串比較,比jd-gui反編譯的結果稍微好看些。

    

    可以看出cfr使用還是很方便的。

 

   (二)procyon簡介

    procyon官網鏈接:

    https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler

    使用語法:

    幫助

   

Java代碼   收藏代碼
  1. java -jar decompiler.jar  

    反編譯單個class文件

   

Java代碼   收藏代碼
  1. java -jar procyon-decompiler-0.5.24.jar AutoCloseableExample.class  

    反編譯整個Jar包

   

Java代碼   收藏代碼
  1. java -jar procyon-decompiler.jar -jar myJar.jar -o out  

    提醒:

   

Java代碼   收藏代碼
  1. Java 7 is required to run  

    procyon需要java 7環境。

    

    下面仍以上面的class為例,看procyon反編譯的結果

     

     和cfr一樣,procyon反編譯顯式的在finally中關閉資源。

     

    procyon反編譯java 7語法糖顯示原始數據類型。

    

    可以看出procyon對Switch String的反編譯結果最直接。

    

    procyon反編譯Jar也是支持的。

   

    反編譯工具還有 Krakatau,使用了Python 2.7編譯,個人電腦是Python 3.3,運行不了,就沒測試了,感興趣的朋友可以自己測試下。

    鏈接地址:

   

Java代碼   收藏代碼
  1. https://github.com/Storyyeller/Krakatau  

 

    如果需要反編譯java 7的class,個人推薦使用procyon,其次是cfr。

   

    文章為原創,轉載請注明出處。寫的不好的地方請指出。如果有需要但下載不了附件,請發郵件到1329186624@qq.com,我會把附件cfr和procyon發給你,謝謝。

    全文完。

 

from: http://53873039oycg.iteye.com/blog/2015192


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM