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

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

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

    隨筆-67  評(píng)論-522  文章-0  trackbacks-0
        Java是開源的,是免費(fèi)的,我們強(qiáng)烈鄙視所有不公開源代碼的東東。比如,對(duì)class文件進(jìn)行加密混淆的類文件,一般情況下,我們是看不到其源代碼的。本文將對(duì)此進(jìn)行詳細(xì)闡述,說明如何隨心所欲的反編譯看源碼,體驗(yàn)一下其中的樂趣。(本文最后面有相關(guān)資源下載)
        目前在Java開發(fā)工具中,Eclipse可謂是占據(jù)著絕對(duì)的優(yōu)勢(shì),在平常使用中,大家都會(huì)有意無意的查看一下所調(diào)用JAR包的源代碼,這時(shí)如果沒有引入源文件的話,將會(huì)看不到結(jié)果。大象以dom4j-1.6.1.jar為例來進(jìn)行說明,打開demo項(xiàng)目(請(qǐng)?jiān)?span lang="EN-US">dom4j分類中查找),找到
    com.demo.database.DataBaseConnect類,按住Ctrl鍵,再用鼠標(biāo)點(diǎn)擊Element,如圖:

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

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

        2、安裝jad
           可以在 http://www.kpdus.com/jad.html#download 這個(gè)地址下載到最新的jad,而且有不同平臺(tái)的版本,本文后面也有相關(guān)下載。將下載的壓縮包解壓后復(fù)制jad.exe至你的%JAVA_HOME%\bin目錄下,這樣做的好處是使用方便。然后在Eclipse中設(shè)置一下,選擇窗口”-“首選項(xiàng)”-“Java”-“JadClipse”,在path to decompiler中輸入jad.exe的絕對(duì)路徑。這樣做是為了保證反編譯的效果。大象做過測(cè)試,只要將jad.exe放入%JAVA_HOME%\bin目錄下,就沒問題了,這個(gè)地方不設(shè)置也沒關(guān)系,不過本人還是建議大家設(shè)置一下,其它地方不用管。其實(shí)大象也不知道該怎么弄,就讓它保持默認(rèn)值好了。^_^
        
           到這里,我們的工作就做完了,現(xiàn)在再來按住Ctrl,用鼠標(biāo)點(diǎn)擊Element,怎么樣?看到源代碼了嗎?貼上部分反編譯代碼,如圖:
        
           使用jad對(duì)絕大部分的加密混淆class文件都能很好的做到反編譯,目前大象還沒遇到失敗的情況,大家也可以多測(cè)試一下。jadclipse插件體積很?。ㄖ挥?0幾K),和jad完美結(jié)合。大象強(qiáng)烈推薦!
           現(xiàn)在有人會(huì)說了,這樣一個(gè)一個(gè)的看太麻煩了,我需要一次把一個(gè)JAR包下的所有class文件反編譯成java源文件。這樣的想法是可行的,還是使用jad工具。

        3、批量反編譯
           因?yàn)橹拔覀円呀?jīng)將jad加入到了%JAVA_HOME%\bin中,只要配置了環(huán)境變量,我們就可以在命令行中方便的使用。在這里,大象還是以dom4j-1.6.1.jar為例來說明具體的操作步驟。
           解壓dom4j-1.6.1.jarjaxen-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是解壓后的文件夾的名字,整個(gè)表示org目錄下的所有class文件。你也可以寫成這樣**/*.class,這表示當(dāng)前目錄及其子目錄下所有的class文件(包含所有的子目錄)。
           反編譯dom4j-1.6.1.jar必須得有jaxen-1.1-beta-7.jar,因?yàn)?span lang="EN-US">dom4j里面有對(duì)xpath的調(diào)用,而這些東西都是引用jaxen里的API,如果不加則會(huì)有這樣的錯(cuò)誤:

        
        到此,關(guān)于反編譯的內(nèi)容全部說完了,不過我還想補(bǔ)充一點(diǎn),有可能JAR包中的class文件不是老外的,而是我們自己寫的,里面可能會(huì)有中文的情況,這時(shí),雖然反編譯通過了,但里面卻是gb2312形式的unicode編碼,因此我們還得做一個(gè)工作,將這些編碼轉(zhuǎn)換成中文。
        大象使用ant腳本來完成這個(gè)工作,內(nèi)容比較簡(jiǎn)單,加了注釋,應(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>
        有一個(gè)地方需要補(bǔ)充一下,在native2ascii元素中,srcdest這兩個(gè)屬性表示著路徑。如果反編譯后,src目錄下,有多個(gè)不同的文件夾,這時(shí)使用ant來轉(zhuǎn)換編碼,請(qǐng)先想好要對(duì)哪些文件進(jìn)行反編碼;如果按上面的寫法,將會(huì)把src目錄下的所有文件夾中的所有文件進(jìn)行反編碼。假設(shè),現(xiàn)在有comorg兩個(gè)文件夾(其實(shí)是兩個(gè)包),我只需要對(duì)com中的文件進(jìn)行反編碼,那么可以這樣改寫:src="${basedir}/com" dest="${basedir}/${build}/com"
        其它的都不變。在cmd中進(jìn)入到src路徑下,輸入ant,回車??梢钥吹饺缦陆Y(jié)果:
        
        通過上面這些操作,class文件已經(jīng)對(duì)我們完全公開,想怎么看就怎么看,呵呵~~~~寫這些,是覺得對(duì)開發(fā)工作可能會(huì)有一定的幫助,如果看后能夠?qū)δ愎ぷ骰蚴菍W(xué)習(xí)起到哪怕一點(diǎn)點(diǎn)的作用,大象就感到很滿足了;如果你早就了解這些,或是認(rèn)為寫得不好,還請(qǐng)不要扔磚頭,扔蕃茄,更不要對(duì)大象口誅筆伐,人身攻擊,就當(dāng)看了一篇白話文好了。大家如果有什么好的建議或是意見,歡迎提出來一起討論,一起學(xué)習(xí)。
        本文為菠蘿大象原創(chuàng),如要轉(zhuǎn)載請(qǐng)注明出處。
        點(diǎn)擊下載:dom4j-1.6.1.jar  jaxen-1.1-beta-7.jar
        點(diǎn)擊下載:jadclipse_3.2.4.jar  jadclipse_3.3.0.jar
        點(diǎn)擊下載:jad.exe  build.xml
    posted on 2008-09-06 23:05 菠蘿大象 閱讀(43597) 評(píng)論(7)  編輯  收藏 所屬分類: Eclipse

    評(píng)論:
    # re: 在Eclipse中反編譯Class文件完全詳解 2008-09-08 23:48 | Java_do
    不錯(cuò)學(xué)習(xí)一下  回復(fù)  更多評(píng)論
      
    # re: 在Eclipse中反編譯Class文件完全詳解 2008-09-09 09:44 | lvq810
    一直都是用的jad  回復(fù)  更多評(píng)論
      
    # re: 在Eclipse中反編譯Class文件完全詳解 2010-08-26 11:31 | 可笑
    說是java都該開源,自己寫這那點(diǎn)東西,也要加水印,文檔不錯(cuò),不鄙視你,但是可憐你  回復(fù)  更多評(píng)論
      
    # re: 在Eclipse中反編譯Class文件完全詳解 2010-08-26 12:07 | 菠蘿大象
    @可笑
    你可憐我?呵呵,我不需要你的可憐,這真像你的ID一樣,可笑,我加水印礙你什么事了?我把自己的經(jīng)驗(yàn)無償拿出來分享,在自己的作品上加上自己的logo,也做錯(cuò)了?我看是不方便你吧!  回復(fù)  更多評(píng)論
      
    # re: 在Eclipse中反編譯Class文件完全詳解 2011-05-25 14:04 | 路人錢
    @可笑
    @可笑
    @可笑
    對(duì)你有幫助就好啦,人家加水印關(guān)你什么事,不想看可以不看!找刺呢你!這個(gè)寫的很好,對(duì)于初學(xué)的我有很大幫助,多謝啦!  回復(fù)  更多評(píng)論
      
    # re: 在Eclipse中反編譯Class文件完全詳解 2012-12-06 11:42 | 聆聽隨風(fēng)
    請(qǐng)教LZ eclipse 4.2.0 安裝后木有反應(yīng)啊 why??  回復(fù)  更多評(píng)論
      
    # re: 在Eclipse中反編譯Class文件完全詳解 2012-12-11 08:47 | 菠蘿大象
    @聆聽隨風(fēng)
    eclipse 3.3以后的,都要用jadclispse_3.3.0.jar這個(gè)插件,我現(xiàn)在用的3.6版也是用的這個(gè)插件,我在3.7.2上也試過是可以的,4.2現(xiàn)在都說問題很多,沒有試過。  回復(fù)  更多評(píng)論
      

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 老外毛片免费视频播放| 亚洲日韩AV一区二区三区四区 | 国产亚洲精品成人AA片| 无码国产精品一区二区免费式影视| 亚洲AV无码成人精品区在线观看| 91国内免费在线视频| 国产亚洲人成网站在线观看| 精品国产呦系列在线观看免费| 国产精品亚洲美女久久久| jizz18免费视频| 国产AV无码专区亚洲AVJULIA| 国产成人免费AV在线播放| 亚洲AV日韩AV永久无码下载| 37pao成人国产永久免费视频| 亚洲熟妇av一区| 九九精品免费视频| 久久亚洲AV成人无码国产最大| 一本久到久久亚洲综合| 91免费在线视频| 亚洲精品国产情侣av在线| 成年午夜视频免费观看视频| 国产精品亚洲综合网站| 国产精品亚洲mnbav网站| 久久免费国产精品一区二区| 久久久久亚洲精品日久生情| 亚洲欧洲免费无码| 免费无码专区毛片高潮喷水| 亚洲精品成人片在线播放| 亚洲无砖砖区免费| 黄色a三级三级三级免费看| 亚洲AV无码一区二区二三区入口 | 好男人看视频免费2019中文| 国产亚洲精品美女2020久久 | 精品久久久久久久久免费影院| 亚洲国产精品ⅴa在线观看| 国产亚洲色视频在线| 在线看片韩国免费人成视频| 爱情岛论坛免费视频| 亚洲酒色1314狠狠做| 四只虎免费永久观看| 最近最新高清免费中文字幕|