java 反編譯之修改源代碼(包括了jar包和war包的修改方式)

需求

這兩天公司有一個需求就是有一個來自於別人的項目,只有tomcat下部署的war包和一個配合程序使用的jar包,額。。。。於是狼來了(問題來了。。呵呵),我需要將class文件反編譯成java文件,這樣一看,很簡單啊,找個編譯軟件不就行了,但是等等,真正難點如下:

  • 批量編譯時大多數文件或者內容可能都相對準確,但是有些內容不一定是對的,比如:我這邊有一個類傳入的參數是枚舉類型,但是編譯後。。。呵呵,成了整形的一個數值。
  • 爲了降低出錯率,我選擇了只反編譯自己要修改的類,額。。。但是又出問題了,每個類之間相互是有引用的,這導致了類與類之間的相互依賴,如果我使用javac進行單文件編譯,然後。。。然後就報錯了。。。。因爲當你單個文件進行編譯時找不到這個java文件被引用的類
  • 這個還好解決,我創建了一個項目,在項目中引入了原先的jar 包項目,並創建了與該類相同的包路徑,將該類放在該路徑下,然後進行編譯就會發現編譯成功。可以具體操作可以查看這個鏈接https://blog.csdn.net/tomcat_zhu/article/details/79240011
  • 但是,在tomcat下面有個web 項目仍需要進行反編譯並進行修改,由於war包部署的項目並不像jar包項目可以直接將項目引入,這樣又回到了原點,要修改的java文件無法找到引入的類,怎麼辦呢,經過本人不斷跋山涉水,歷盡艱辛的查找,終於想到一個辦法,就是將所有的war包項目下的class文件通過命令打成jar包後再進行引入,發現編譯成功。

解決方式

首先必須下載相關的反編譯軟件,可以使用jda,jdax,Luyten等等,如下所示:

個人測試過,建議使用Luyten這個軟件反編譯的準確率相對較高一些,但是如果是中文顯示的是:Unicode編碼格式的字符串。而,jad,jadx可以完全編譯中文內容。


第二步:解壓jar包,並獲取要修改的class文件,由於比較簡單我就不多說了


第三步:創建maven項目工程,並將獲取到的文件放入項目中。這裏要注意一個地方,如果直接將文件放入項目會是這個樣子

 

而且也會出現以下報錯:

所以要創建相同的包路徑,或者修改包路徑,正確的應該是這個樣子:


第四步:引入jar包

如果你的項目是jar包項目可以在Eclipse中直接: 右鍵項目 —— Build Path —— Add External Archives... 將原項目導入到創建的項目中。

如果是war包方式,則可以將xxx.war文件後綴修改爲xxx.zip進行解壓,如果是已經部署在tomcat則需要找到所有的java文件,並將該文件打包成jar包,注意:只需要java文件,而且一定要注意包的路徑,打包方式請查看:https://blog.csdn.net/qq_40929531/article/details/99310180  當打包完成後按照下方步驟將jar包引入項目中

 


第五步:修改代碼並且將項目重新打包成jar包或者war包,通過解壓jar包或war獲取class文件,並替換原來項目中的class文件。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章