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文件。

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