1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Java 反編譯工具哪家強?

        共 3996字,需瀏覽 8分鐘

         ·

        2021-05-25 21:09

        點擊上方藍色字體,選擇“標星公眾號”

        優(yōu)質文章,第一時間送達

        76套java從入門到精通實戰(zhàn)課程分享

        一、前言

        1、什么是反編譯?

        大家都知道,將源代碼轉換成二進制執(zhí)行代碼的過程叫編譯,比如將C源代碼編譯成.exe可執(zhí)行文件;那么把二進制執(zhí)行代碼轉換成源代碼的過程就叫“反編譯,比如把exe轉換為C源代碼就叫“反編譯”。

               由于主流的C的編譯器都進行了代碼的優(yōu)化,因此把C編譯生成的exe文件反編譯成C代碼非常困難。但是像Java、.net這樣基于虛擬機技術的編程語言則反編譯非常容易,Java平臺下有Jad、Jode、JD等反編譯器,.net平臺下則有Reflector等反編譯器,他們的反編譯質量非常高,甚至和源代碼幾乎沒什么差別。


        2、反編譯得到的是源代碼嗎?

             反編譯得到的代碼是非常接近于源代碼,但是或多或少與源代碼有一些差異的,比如一些表達式被優(yōu)化掉了,比如,下面的源代碼:

         int i=1+1;

        學過《編譯原理》的同學知道有“常量優(yōu)化”這個編譯優(yōu)化算法,因此上邊的源代碼一般會被優(yōu)化為:int i=2;

        由于在編譯過程中已經(jīng)進行了優(yōu)化,把“1+1”這個原始的信息丟掉了,因此反編譯出來的代碼只能是:

        int i=2;

        可以看到反編譯得到的代碼和源代碼是有區(qū)別的。

        比如:andriod中

        download = (Button)findViewById(R.id.xiaz);

        被優(yōu)化成了download = (Button)findViewById(0x7f070018);


        3、程序可以反編譯豈不是很不安全?

        可以采用代碼混淆等技術來加大反編譯的難度,和降低反編譯代碼的可讀性,但是完全避免反編譯是不可能的。


        4、反編譯器的原理是什么?

        由于Java、.net這樣的基于虛擬機技術的語言平臺,都是采用了Byte Code的二進制結構,因此很容易將ByteCode轉化為“抽象語法樹”(簡稱AST,《編譯原理》這門課中的概念),然后采用反編譯器就可以將AST轉換為代碼了。


        二、反編譯工具和插件有哪些?

        1、 JD-GUI【推薦】


        JD-GUI是屬于Java Decompiler項目(JD項目)下個的圖形化運行方式的反編譯器。

        JD-Eclipse屬于Java Decompiler項目(JD項目)下個Eclipse插件化運行方式的反編譯插件。

        JD-IntelliJ屬于Java Decompiler項目(JD項目)下個Intellij插件化的運行方式的反編譯插件。


        JD-GUI 是一個用 C++ 開發(fā)的 Java 反編譯工具,由 Pavel Kouznetsov開發(fā),支持Windows、Linux和蘋果Mac Os三個平臺。而且提供了Eclipse平臺下的插件JD-Eclipse,Intellij平臺下的插件JD-Intellij。JD-GUI不需要安裝,直接點擊運行,可以反編譯jar,class文件。

        支持jar包級的反編譯,可將整個jar包直接保存為*.src.zip源代碼包,反編譯迅速,錯誤率極少。

        JD分為JD-GUI、JD-Eclipse/JD-Intellij兩種運行方式,JD-GUI是以單獨的程序的方式運行,JD-Eclipse/JD-Intellji則是以一個Eclipse/IDEA插件的方式運行。


        Java Decompiler項目”旨在開發(fā)一些工具,以便反編譯和分析Java 5以及更高本的Java的“字節(jié)代碼”。

        JD-Core是一個庫,是一個從一個或多個“.class”文件中重建Java源代碼的庫。JD-Core可用于恢復丟失的源代碼并探索運行時Java的源代碼。支持Java 5的新功能,例如注釋,泛型或類型“枚舉”。JD-GUI和JD-Eclipse包括JD-Core庫。


        2、Jad 

        jad是一款使用非常廣泛地Java反編譯工具,Jadclipse就是基于jad的反編譯插件,JAD 文件包含 MIDlet 套件的標題信息,例如開發(fā)應用程序的公司、應用程序名稱和大小。

        3、XJad (比較好用,不過目前版本是2.2,是2006發(fā)布的了,一直沒更新了,而且有bug,不推薦了)

        XJad是基于Jad核心的Java源程序反編譯軟件,內(nèi)置Jad1.5.8e2;

        可處理多個*.class文件,可以處理文件夾內(nèi)的所有文件,甚至可以處理*.jar文件;

        帶有多頁面文本編輯器,也可集成在資源管理器中,隨時點擊右鍵都可進行操作;

        支持java語法的高亮顯示;


        4、Luyten

        比較精準的一個java反編譯工具,沒用過,用的人比較少。

        ......

        還有很多反編譯工具,但是主要推薦JD-GUI,其次是XJad。

        ----------------------

        反編譯工具下載:

        1、JD-GUI(Java反編譯工具) 0.3.6 綠色免費版.zip 【免安裝,直接解壓運行】-CSDN下載  http://download.csdn.net/download/chenchunlin526/10024535


        2、Java反編譯工具(XJad) v2.2 中文綠色版.zip 【免安裝,直接解壓運行】-CSDN下載  http://download.csdn.net/download/chenchunlin526/10029995


        三、反編譯工具JD-GUI的使用

        作為一個軟件開發(fā)人員,在自學的成長道路上,不可避免的會借鑒別人開發(fā)完成的功能實現(xiàn)方法,js/css/html可以通過瀏覽器直接捕獲,沒有源碼的能拿到calss文件也是一件幸事,那么如何查看class文件呢?這就要用到反編譯工具了。

        ① JD-GUI這款Java反編譯工具是純綠色,完全免費的,非常適合開發(fā)者,其界面也簡潔大方


        ② 鼠標單擊“file”從中選擇“Open File ...“選項,彈出一個文件選擇框,可以選擇要打開的文件,或者直接單擊文件夾圖標,直接彈出文件選擇框


        ③ 從打開的文件的左側可以看到文件的保存位置,類及方法,右側顯示類的具體內(nèi)容,注釋不會顯示,同時它會把這個類所在的包下的其他類也反編譯成源碼:


        如需將預覽的.class文件轉換成.java文件,只需點擊File菜單里的save即可。


        ④ 還有一種方法是直接打開jar包,鼠標單擊文件夾圖標,彈出文件選擇框,選擇一個jar包,單擊‘確定’


        ⑤ 從打開的界面中可以看到整個jar包中的.class文件的反編譯結果



        順便說一下XJad 的使用(使用方法和JD-GUI都差不多),雖然版本比較老,且官方10多年沒更新了,算是已經(jīng)放棄了。

        不過也可以可用:

        使用說明:

        ========

        1、打開一個或者多個*.class文件,XJad反編譯后,重命名為*.java文件,

        保存至當前文件夾,并在編輯器中打開查看;

        2、打開一個文件夾,XJad將該文件夾下所有*.class文件進行反編譯,并保存至該文件夾下,

        依據(jù)包路徑信息生成文件夾路徑,如com.spring.framework.*,

        將建立com\spring\framework的文件夾結構;

        3、打開一個*.jar文件,XJad將該Jar文件中的所有*.class文件解壓縮到臨時目錄并進行反編譯,

        并將源文件帶包路徑信息保存至當前文件夾下名稱為“~” + *.jar 的文件夾中;


        ① 單個文件反編譯



        反編譯好之后,會在原來的.class所在文件夾下生成一個同名的.java源碼文件:


        且XJad會自動打開反編譯后生成的源碼文件:



        ② 整個文件夾反編譯,可以選擇一個文件夾,XJad會把該文件夾下的所有.class文件全部反編譯好。

        比如,我的D盤新建一個文件夾,F(xiàn)indPassword,里面只有個FindPasswordController.class文件


        然后選擇 反編譯文件夾:



        確定之后:


        提示已經(jīng)反編譯成功,我們現(xiàn)在到 D:\FindPassword 里查看,里面已經(jīng)生成了一個按層次結構排行的源碼文件包了



        點進去看一下,文件夾里有剛反編譯好的源碼文件了:


        記事本打開看一下,源碼正常,只是沒有了注釋了



        ③ jar包反編譯



        確定之后


        反編譯之后,會在jar包所在的文件下,生成一個以“~”開頭的源碼文件夾:


        打開進去看一下:



        好了,JD-GUI 和 XJad的使用介紹到此介紹了。


        ----------------------

        工具下載:

        1、JD-GUI(Java反編譯工具) 0.3.6 綠色免費版.zip-CSDN下載  http://download.csdn.net/download/chenchunlin526/10024535


        2、Java反編譯工具(XJad) v2.2 中文綠色版.zip 【免安裝,直接解壓運行】-CSDN下載  http://download.csdn.net/download/chenchunlin526/10029995



        版權聲明:本文為博主原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權協(xié)議,轉載請附上原文出處鏈接和本聲明。

        本文鏈接:

        https://blog.csdn.net/chenchunlin526/article/details/78259682





        粉絲福利:Java從入門到入土學習路線圖

        ??????

        ??長按上方微信二維碼 2 秒


        感謝點贊支持下哈 

        瀏覽 101
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            丁香五月婷婷五月 | rihanhuangpian | 裸模大尺度私拍 | 天天做夜夜做狠狠做 | 影音先锋男人的天堂 | 日本一道本精品网站 | 少妇高潮av久久久久久 | 97香蕉久久夜色精品国产 | 97精品国产手机 | 91蝌蚪在线视频 |