简单的反编译class文件并重新编译的方法

Posted kavinkuan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单的反编译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:Javajdk1.6.0_10in”。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目录的路径,再重新编译即可。如下:

技术分享图片

 

原文路径:https://www.cnblogs.com/pcheng/p/6929855.html

以上是关于简单的反编译class文件并重新编译的方法的主要内容,如果未能解决你的问题,请参考以下文章

怎么替换指定jar中的class文件

如何防止SBT重新编译修改后的.class文件?

Android 反编译代码,资源修改,重新签名

tomcat 每次启动编译文件classes 为啥还用ANT进行重新编译? 和maven有啥区别

如何反编译android应用并重新打包

我用myeclipse开发web程序,其中myeclipse有一个重新编译的功能,我不明白怎么重新编译,