1. 程式人生 > 其它 >沒有.java原始碼的情況下,反編譯.class檔案並重新編譯的實現過程

沒有.java原始碼的情況下,反編譯.class檔案並重新編譯的實現過程

在沒有.java原始碼的情況下,如果想修改一個.class檔案。可以通過以下步驟實現:

如下圖示,修改前的class檔案:

一、反編譯.class檔案成.java檔案。

  1、可以使用Java Decompiler這個工具,直接開啟對應的.class檔案。然後點選選單:File→Save Source,將檔案儲存成.java檔案。如下:

PS:Java Decompiler工具還可以用來反編譯jar包,有時候需要了解下jar包裡的程式碼實現,如果開發工具裡看不到,可以直接用Java Decompiler開啟jar包。

二、修改該.java檔案中的內容。

  可以直接用開發工具如MyEclipse,或者文字編輯器的方式對.java檔案進行修改。

三、重新編譯成.class檔案。

  前面2步比較簡單,重點是這一步。重新編譯成.class可以通過javac命令來執行。

  1.首先將.java檔案放到JDK的bin目錄下,如:“D:\Java\jdk1.6.0_10\bin\”。PS:如果要編譯的java檔案中沒有依賴其他類,單獨放就可以。如果有依賴原先專案中的其他類,可以將原先整個專案的classes檔案目錄都放進JDK資料夾的lib目錄下。

  2.右鍵.java檔案→用記事本開啟該檔案→檔案→另存為→檢查.java檔案是否是ANSI編碼,如下圖。如果是UTF-8會因為亂碼而編譯報錯,儲存成ANSI編碼。

  3.開始選單→執行...→cmd,開啟命令列工具,使用javac命令編譯java檔案。如:“javac d:/java/jdk1.6.0_10/bin/test/TestDecompile.java”。如果沒有報錯(PS:如果報缺少依賴包的錯誤請看第四步),就是編譯成功了,可以在.java檔案所在的目錄找到編譯好的.class檔案,如下:

  4.可用Java Decompiler工具,檢視.class檔案中的內容是否正確,如下:

PS:反編譯.class檔案並重新編譯的方法到這裡就講完了。

四、編譯時缺少依賴包的解決方法。

  1.如果編譯的時候報出依賴的包不存在,如下:

  2.可以將缺少的jar包放到JDK目錄下的lib目錄,再重新編譯(如果缺的是自己編寫的class檔案,處理方法相同)。

  3.如果還是識別不到,則需要配置下環境變數。右鍵我的電腦→屬性→高階系統設定→高階→環境變數→系統變數,在classpath的值最後面加上對應包的路徑,即剛放在lib目錄的路徑,再重新編譯即可。如下: