2014-11-08 229 views
0

在Tomcat瀏覽器中有一個正在Windows上運行的Web應用程序。 應用程序用戶.jar文件的數量作爲其邏輯的存儲。編譯或不編譯.class文件

當我打開一個jar文件,我需要改變一個邏輯,我看到一堆.class文件。 (我認爲是Java編譯的類)。當我嘗試在文本編輯器中打開.class文件時,我看到一個半可讀的亂碼。

當我將這個編譯後的.class提供給像showmycode.com這樣的服務時,我可以看到實際的java代碼。 在這一點上,我根據自己的需要更改代碼,並希望將更新的.class文件供應用程序使用(將其放回到jar中)。

是強制性的,我將.class文件編譯爲「半可讀的亂碼」,或者我可以把它作爲源代碼文件(可能不是,但認爲我會問以防萬一)。 如果我必須編譯atered代碼,我可以在沒有在某個Java IDE中啓動項目的情況下執行它,只需通過命令行將其編譯到.class中?

+1

爲什麼要進行反編譯 - 編譯 - 重新編譯週期?你不應該這樣做。只需處理原始的,記錄在案的未經模糊處理的源代碼,並在您的代碼準備就緒後進行編譯。這樣你總是有可讀的,記錄在案的代碼。 – 2014-11-08 12:44:47

+0

看到你的背景是C# - 你在做什麼類似於反編譯.NET DLL/EXE,編輯代碼,然後重新編譯它們。作爲一個工作流程沒有多大意義。如果你需要反編譯一個文件 - 執行_once_,然後記錄下來,理解它,然後從這一點開始使用source_。 – 2014-11-08 12:46:17

+0

我在更改一個我無法訪問源的應用程序。 – 2014-11-08 13:01:22

回答

0

有兩種主要的編輯應用程序的方法,你沒有它的源代碼。

第一個,你發現是反編譯,編輯,重新編譯。好處是你不必知道字節碼的任何內容,因爲它只是反編譯爲Java。主要缺點是即使是最好的反編譯器也不能保證產生可重編譯的代碼。如果應用程序完全被混淆,則可以忘記重新編譯。

另一種方法是反彙編,編輯,重組。我建議Krakatau這(披露,我寫了它)。另一種選擇是ASM,但是它是爲了編程修改而設計的,而不是手動編輯,而且它更笨拙。

字節碼編輯的主要優點是,即使應用程序被模糊處理,它仍然可以正常工作。缺點是它顯然要求你理解並能夠直接用字節碼編程。