<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    大魚

    在Eclipse中反編譯Class文件完全詳解

    Java開源的,是免費的,我們強烈鄙視所有不公開源代碼的東東。比如,對class文件進行加密混淆的類文件,一般情況下,我們是看不到其源代碼的。本文將對此進行詳細闡述,說明如何隨心所欲的反編譯看源碼,體驗一下其中的樂趣。(本文最后面有相關資源下載)
        目前在Java開發工具中,Eclipse可謂是占據著絕對的優勢,在平常使用中,大家都會有意無意的查看一下所調用JAR包的源代碼,這時如果沒有引入源文件的話,將會看不到結果。大象以dom4j-1.6.1.jar為例來進行說明,打開demo項目(請在dom4j分類中查找),找到com.demo.database.DataBaseConnect類,按住Ctrl鍵,再用鼠標點擊Element,如圖:


        dom4j是開源的,可以在sourceforge.net下載到它的完整版,里面當然包含源代碼。大象想說的是,在做開發的時候,需要用到大量的JAR包,你不可能每個都去down一個源碼下來,而且我們用不到這么多的源碼,只是在需要的時候,看下其中的代碼,解決一時的問題。
        大象通過查看網上其他人的研究成果再結合自己的分析,總結了一些經驗,現在整合起來和大家分享一下。
        1、安裝jadclipse插件
           選擇插件時,本人曾經使用過網上評論非常好的Jode開發的Eclipse插件,不過效果不是很好,對有些加密的類不能反編譯,后來發現很多人用jadclipse,結果試驗了一下,很不錯的說。
           使用jadclipse插件一定要注意Eclipse版本。jadclipse_3.2.4,它對應的是Eclipse3.2版,jadclipse_3.3.0可以用于Eclipse3.3M6以上版。大家千萬不要把jadclipse_3.3.0放到Eclipse3.2中,也不要把jadclipse_3.2.4放到Eclipse3.3中,這樣做是沒什么任何效果滴!大象全部都測試過!
           下面來說下安裝過程,其實很簡單,網上也有相關的資料。將jadclipse插件(版本自己選擇)直接copyEclipse目錄中的plugins文件夾下,然后打開Eclipse,選擇"窗口"-"首選項"-"常規"-"編輯器"-"文件關聯",點擊文件關聯中的*.class,下面就會看到"JadClipse Class File Viewer",選中它,點擊缺省值,點擊OK,將它設置為默認的類查看器。如圖:


           另外在用jadclipse的時候,一定要加入jad.exe這個程序,如果只有插件而沒有jad,那么還是不能反編譯成功,會顯示如下所示的錯誤,因此我們還要安裝jad。

        2、安裝jad
           可以在http://www.kpdus.com/jad.html#download 這個地址下載到最新的jad,而且有不同平臺的版本,本文后面也有相關下載。將下載的壓縮包解壓后復制jad.exe至你的%JAVA_HOME%\bin目錄下,這樣做的好處是使用方便。然后在Eclipse中設置一下,選擇窗口”-“首選項”-“Java”-“JadClipse”,在path to decompiler中輸入jad.exe的絕對路徑。這樣做是為了保證反編譯的效果。大象做過測試,只要將jad.exe放入%JAVA_HOME%\bin目錄下,就沒問題了,這個地方不設置也沒關系,不過本人還是建議大家設置一下,其它地方不用管。其實大象也不知道該怎么弄,就讓它保持默認值好了。^_^

           到這里,我們的工作就做完了,現在再來按住Ctrl,用鼠標點擊Element,怎么樣?看到源代碼了嗎?貼上部分反編譯代碼,如圖:

           使用jad對絕大部分的加密混淆class文件都能很好的做到反編譯,目前大象還沒遇到失敗的情況,大家也可以多測試一下。
           現在有人會說了,這樣一個一個的看太麻煩了,我需要一次把一個JAR包下的所有class文件反編譯成java源文件。這樣的想法是可行的,還是使用jad工具。

        3、批量反編譯
           因為之前我們已經將jad加入到了%JAVA_HOME%\bin中,只要配置了環境變量,我們就可以在命令行中方便的使用。在這里,大象還是以dom4j-1.6.1.jar為例來說明具體的操作步驟。
           解壓dom4j-1.6.1.jarjaxen-1.1-beta-7.jar。為了方便,我將JAR包解壓放到F盤根目錄,在cmd中,進入到F盤根路徑下,輸入命令:jad -o -r -s java -d src org/**/*.class
           我解釋一下這些參數的含義:
           -o:覆蓋舊文件,而且不用提示確認。
           -r:重新加載生成包結構。
           -s:定義輸出文件的擴展名。jad為默認擴展名,我們反編譯后當然是要.java源文件了。
           -d:輸出文件的目錄。src表示反編譯后的所有文件都放在src目錄下。
           org/**/*.classorg是解壓后的文件夾的名字,整個表示org目錄下的所有class文件。你也可以寫成這樣**/*.class,這表示當前目錄及其子目錄下所有的class文件(包含所有的子目錄)。
           反編譯dom4j-1.6.1.jar必須得有jaxen-1.1-beta-7.jar,因為dom4j里面有對xpath的調用,而這些東西都是引用jaxen里的API,如果不加則會有這樣的錯誤:


        到此,關于反編譯的內容全部說完了,不過我還想補充一點,有可能JAR包中的class文件不是老外的,而是我們自己寫的,里面可能會有中文的情況,這時,雖然反編譯通過了,但里面卻是gb2312形式的unicode編碼,因此我們還得做一個工作,將這些編碼轉換成中文。
        大象使用ant腳本來完成這個工作,內容比較簡單,加了注釋,應該很好明白,腳本文件名為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>
        
    <!-- 創建輸出目錄 -->
        
    <target name="init" depends="clean">
            
    <mkdir dir="${build}"/>
        
    </target>
        
    <!-- 編碼轉換 reverse="true"為反向轉換 -->        
        
    <target name="native2ascii" depends="init">
            
    <native2ascii reverse="true" src="${basedir}" encoding="gb2312" dest="${basedir}/${build}" />
        
    </target>
    </project>
        有一個地方需要補充一下,在native2ascii元素中,srcdest這兩個屬性表示著路徑。如果反編譯后,src目錄下,有多個不同的文件夾,這時使用ant來轉換編碼,請先想好要對哪些文件進行反編碼;如果按上面的寫法,將會把src目錄下的所有文件夾中的所有文件進行反編碼。假設,現在有comorg兩個文件夾(其實是兩個包),我只需要對com中的文件進行反編碼,那么可以這樣改寫:src="${basedir}/com"dest="${basedir}/${build}/com"
        其它的都不變。在cmd中進入到src路徑下,輸入ant,回車??梢钥吹饺缦陆Y果:

        通過上面這些操作,class文件已經對我們完全公開,想怎么看就怎么看,呵呵~~~~寫這些,是覺得對開發工作可能會有一定的幫助,如果看后能夠對你工作或是學習起到哪怕一點點的作用,大象就感到很滿足了;如果你早就了解這些,或是認為寫得不好,還請不要扔磚頭,扔蕃茄,更不要對大象口誅筆伐,人身攻擊,就當看了一篇白話文好了。大家如果有什么好的建議或是意見,歡迎提出來一起討論,一起學習。
        本文為菠蘿大象原創,如要轉載請注明出處。
        點擊下載:dom4j-1.6.1.jar  jaxen-1.1-beta-7.jar
        點擊下載:jadclipse_3.2.4.jar  jadclipse_3.3.0.jar
        點擊下載:jad.exe build.xml

    posted on 2009-03-17 14:05 大魚 閱讀(911) 評論(1)  編輯  收藏 所屬分類: eclipse

    評論

    # re: 在Eclipse中反編譯Class文件完全詳解[未登錄] 2009-03-30 10:38 落葉

    GOOD!謝謝分享  回復  更多評論   


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


    網站導航:
     
    主站蜘蛛池模板: 亚洲熟女综合一区二区三区| 亚洲另类精品xxxx人妖| 美女黄色免费网站| 破了亲妺妺的处免费视频国产| 91亚洲视频在线观看| 成人免费激情视频| 亚洲已满18点击进入在线观看| 日本成年免费网站| 国产人成亚洲第一网站在线播放| 成人午夜视频免费| 真正全免费视频a毛片| 亚洲毛片av日韩av无码| 中文字幕乱码一区二区免费| 亚洲高清视频在线播放| 久久精品免费全国观看国产| 亚洲中文无码永久免费| 免费中文字幕在线观看| a级毛片100部免费观看| 亚洲精品国产免费| 日韩免费无砖专区2020狼| 深夜a级毛片免费无码| 亚洲αv在线精品糸列| 9277手机在线视频观看免费| 中文字幕亚洲综合小综合在线| 女人被弄到高潮的免费视频| 国产偷国产偷亚洲高清人| 国产亚洲精品免费视频播放| 亚在线观看免费视频入口| 亚洲依依成人亚洲社区| 亚洲女同成人AⅤ人片在线观看| 久久久久久AV无码免费网站| 亚洲fuli在线观看| 亚洲色一色噜一噜噜噜| 最近中文字幕免费2019| 综合一区自拍亚洲综合图区| 久久被窝电影亚洲爽爽爽| 野花高清在线观看免费3中文| 成年大片免费高清在线看黄| 亚洲AV第一页国产精品| 性感美女视频在线观看免费精品 | 亚洲天堂中文字幕在线|