在Eclipse中反編譯Class文件的方法

          學(xué)習(xí)中,需要反編譯Java的class文件。我的開發(fā)工具是windows xp+Eclipse3.2.2+MyEclipse。我找到了jad反編譯工具,在互聯(lián)網(wǎng)上找到了一些很有用的安裝步驟。下面記錄了我的安裝過程。

            一、下載

            1。下載 jad 工具,在官方網(wǎng)站沒有下載到,在CSDN上可以下載。

            2。下載插件 net.sf.jadclipse_3.3.0.jar。

            二、安裝

            1。安裝jad工具。下載后解壓,然后將解壓后的jad.exe文件復(fù)制到%JAVA_HOME%\bin目錄下面(可以將jad.exe放到任意位置,只要記住其存放路徑就好,下面要用到)。

            2。安裝插件。Eclipse中的插件安裝可以參考:Eclipse使用技巧(三)Eclipse中插件的安裝。

            我用復(fù)制的方法:直接把net.sf.jadclipse_3.3.0.jar拷貝到%ECLIPSE_HOME%\plugins目錄下。

            把使用link的方法拷貝到下面:建立D:\Myplugins\net.sf.jadclipse_3.3.0\eclipse\plugins的目錄結(jié)構(gòu),將jadclipse_3.2.4.jar放到plugins目錄下面(注:其中D:\Myplugins為你自己定義的一個專門放置插件的目錄)。再在%ECLIPSE_HOME%\links目錄下面建立一個net.sf.jadclipse_3.3.0.link文件(該文件名隨便取)。文件里面內(nèi)容為:path=D:/Myplugins/net.sf.jadclipse_3.3.0。

            三、配置

            1。啟動Eclipse,打開Window->Preferences->Java->JadClipse,如果找到了JadClipse,即JadClipse插件被激活了。設(shè)置jad路徑:

            

            2。在Eclipse的Windows—> Perference—>General->Editors->File Associations中修改“*.class”默認(rèn)關(guān)聯(lián)的編輯器為“JadClipse Class File Viewer”。

            四、使用jad反編譯

            1。在DOS窗口中,到class所在目錄,直接運(yùn)行 >jad DB.class,將在該目錄中生成DB.jad文件。運(yùn)行 >jad -sjava DB.class,將在該目錄中生成DB.java文件

            

            2。在Eclipse 工作臺使用:

            1)把class目錄加入項目:(這一步許多文檔都沒有寫到,花了我很多時間)

            1.1)項目--〉屬性--〉java buildpath--〉add class folder (如 a)--〉OK

            1.2)a--〉import--〉General-->File system-->Browse-->OK

            2)雙擊class 文件,出現(xiàn)可愛的java文件,編譯成功

            

            五、批量反編譯

            以下部分轉(zhuǎn)載 菠蘿大象的文章:

            現(xiàn)在有人會說了,這樣一個一個的看太麻煩了,我需要一次把一個JAR包下的所有class文件反編譯成java源文件。這樣的想法是可行的,還是使用jad工具。

            3、批量反編譯

            因為之前我們已經(jīng)將jad加入到了%JAVA_HOME%\bin中,只要配置了環(huán)境變量,我們就可以在命令行中方便的使用。在這里,大象還是以dom4j-1.6.1.jar為例來說明具體的操作步驟。

            解壓dom4j-1.6.1.jar和jaxen-1.1-beta-7.jar。為了方便,我將JAR包解壓放到F盤根目錄,在cmd中,進(jìn)入到F盤根路徑下,輸入命令:jad -o -r -s java -d src org/**/*.class

            我解釋一下這些參數(shù)的含義:

            -o:覆蓋舊文件,而且不用提示確認(rèn)。

            -r:重新加載生成包結(jié)構(gòu)。

            -s:定義輸出文件的擴(kuò)展名。jad為默認(rèn)擴(kuò)展名,我們反編譯后當(dāng)然是要.java源文件了。

            -d:輸出文件的目錄。src表示反編譯后的所有文件都放在src目錄下。

          org/**/*.classorg是解壓后的文件夾的名字,整個表示org目錄下的所有class文件。你也可以寫成這樣**/*.class,這表示當(dāng)前目錄及其子目錄下所有的class文件(包含所有的子目錄)。
                 反編譯dom4j-1.6.1.jar必須得有jaxen-1.1-beta-7.jar,因為dom4j里面有對xpath的調(diào)用,而這些東西都是引用jaxen里的API,如果不加則會有這樣的錯誤:
           


              到此,關(guān)于反編譯的內(nèi)容全部說完了,不過我還想補(bǔ)充一點(diǎn),有可能JAR包中的class文件不是老外的,而是我們自己寫的,里面可能會有中文的情況,這時,雖然反編譯通過了,但里面卻是gb2312形式的unicode編碼,因此我們還得做一個工作,將這些編碼轉(zhuǎn)換成中文。
              大象使用ant腳本來完成這個工作,內(nèi)容比較簡單,加了注釋,應(yīng)該很好明白,腳本文件名為build.xml,它放在src目錄下,和反編譯所得的包處在同一層。

          <?xml version="1.0" encoding="GBK"?>
          <project name="decompile" basedir="." default="native2ascii">
              
          <!-- 定義輸出目錄 -->
              
          <property name="build" value="build"/>
              
          <!-- 清除輸出目錄 -->
              
          <target name="clean">
                  
          <delete dir="${build}"/>
              
          </target>
              
          <!-- 創(chuàng)建輸出目錄 -->
              
          <target name="init" depends="clean">
                  
          <mkdir dir="${build}"/>
              
          </target>
              
          <!-- 編碼轉(zhuǎn)換 reverse="true"為反向轉(zhuǎn)換 -->        
              
          <target name="native2ascii" depends="init">
                  
          <native2ascii reverse="true" src="${basedir}" encoding="gb2312" dest="${basedir}/${build}" />
              
          </target>
          </project>
              有一個地方需要補(bǔ)充一下,在native2ascii元素中,srcdest這兩個屬性表示著路徑。如果反編譯后,src目錄下,有多個不同的文件夾,這時使用ant來轉(zhuǎn)換編碼,請先想好要對哪些文件進(jìn)行反編碼;如果按上面的寫法,將會把src目錄下的所有文件夾中的所有文件進(jìn)行反編碼。假設(shè),現(xiàn)在有comorg兩個文件夾(其實是兩個包),我只需要對com中的文件進(jìn)行反編碼,那么可以這樣改寫:src="${basedir}/com" dest="${basedir}/${build}/com"
              其它的都不變。在cmd中進(jìn)入到src路徑下,輸入ant,回車。可以看到如下結(jié)果:

           

           
          反編譯的內(nèi)容基本結(jié)束。

          posted on 2012-12-21 15:19 youngturk 閱讀(325) 評論(0)  編輯  收藏 所屬分類: 不明白紀(jì)錄新認(rèn)識筆記Java基礎(chǔ)


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          <2012年12月>
          2526272829301
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          導(dǎo)航

          統(tǒng)計

          公告

          this year :
          1 jQuery
          2 freemarker
          3 框架結(jié)構(gòu)
          4 口語英語

          常用鏈接

          留言簿(6)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊

          EJB學(xué)習(xí)

          Flex學(xué)習(xí)

          learn English

          oracle

          spring MVC web service

          SQL

          Struts

          生活保健

          解析文件

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 克拉玛依市| 新河县| 邢台市| 九寨沟县| 巴楚县| 日土县| 个旧市| 红原县| 颍上县| 三原县| 曲沃县| 临邑县| 黄大仙区| 波密县| 石林| 洪泽县| 香格里拉县| 来安县| 松阳县| 呼玛县| 固始县| 铅山县| 团风县| 宜章县| 金乡县| 驻马店市| 安义县| 阿鲁科尔沁旗| 怀仁县| 体育| 西昌市| 剑川县| 开封县| 安平县| 剑河县| 射阳县| 正定县| 大丰市| 荆州市| 新兴县| 武威市|