简单的反编译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目录的路径,再重新编译即可。如下:

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

原文地址:https://www.cnblogs.com/kavinkuan/p/9335819.html

时间: 2024-12-17 13:23:56

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

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

在没有.java源码的情况下,如果想修改一个.class文件.可以通过以下步骤实现: 修改前的class文件: 一.反编译.class文件成.java文件. 1.可以使用Java Decompiler这个工具,直接打开对应的.class文件.然后点击菜单:File→Save Source,将文件保存成.java文件.如下: PS:Java Decompiler工具还可以用来反编译jar包,有时候需要了解下jar包里的代码实现,如果开发工具里看不到,可以直接用Java Decompiler打开ja

自动生成版本信息,重新编译指定文件,一键编译IAR工程同时生成hex,bin,out文件

平台:IAR + windows_bat 1.自动生成版本信息 目的: 脚本自动更新程序svn对应的的版本号 前提: svn需要安装command line (参考 https://jingyan.baidu.com/article/a3a3f8113f89198da2eb8aed.html) 主要技术点: 具体.bat脚本主要来源于网络,文件放置在agv_dev_platform->User目录下,编译脚本将生成svnversion.h文件,文件内容仅是SVN_REVISION的一个宏,最终程

C++预编译头文件(#include "stdafx.h")

来源:http://blog.sina.com.cn/s/blog_4ac766c00100qsbd.html http://blog.csdn.net/txh0001/article/details/7031058 作为一个C++菜鸟,在预编译头文件(#include "stdafx.h")上纠结了很久,今天打算彻底弄明白它. 1.预编译头文件的概念 所谓的预编译头文件,其实我们很熟悉的,这里的头文件(Microsoft Visual C++中)一般的说就是我们常见的stdafx.h

预编译文件,预编译头文件认识

一.概念:1.预编译:就是编译器首先编译某个文件(称为预编译头文件),然后将这个编译结果保存起来,之后如果有其他源文件include了这个“预编译头文件”的时候,则自动从这个编译结果提取需要的信息进行编译.2.预编译结果文件(Precompiled header file):就是那个用来保存已经编译了的符号信息的文件(.PCH作为后缀)3.生成预编译结果文件(Create Precompiled header file):我们说源文件A通过文件B“生成预编译结果文件”是指编译A的时候将其中编译B

编译Python文件

编译Python文件 一.编译Python文件 为了提高加载模块的速度,强调强调强调:提高的是加载速度而绝非运行速度.python解释器会在__pycache__目录中下缓存每个模块编译后的版本,格式为:module.version.pyc.通常会包含python的版本号.例如,在CPython3.3版本下,spam.py模块会被缓存成__pycache__/spam.cpython-33.pyc.这种命名规范保证了编译后的结果多版本共存. Python检查源文件的修改时间与编译的版本进行对比,

VS2010遇到fatal error C1083: 无法打开预编译头文件:“xxx.pch”: No such file or directory

对C++和VS2010非常不熟悉,但是无奈赶着项目,只能看了点基础就上手,然后就碰到这个问题了. 原因分析: http://bbs.csdn.net/topics/340191697?page=1 编译器一般都是以文件为单位进行编译,如果修改了工程中的一个文件,那么将导致所有文件都要从新编译,这样的编译将耗费很长时间.      为了提高编译速度,将那些不常被修改,比较稳定,文件单独包含到一个指定的头文件中, 然后生成一个预编译头文件 *.pch . VC中默认的头文件为 stdAfx.h, 但

android反编译odex文件

关于android的反编译工具,相信大家并不陌生 如APK-TOOL,dex2jar APK-TOOL 用于反编译出布局文件 下载地址http://code.google.com/p/android-apktool/downloads/list dex2jar 用于将dex反编译成.jar包 下载地址:http://code.google.com/p/dex2jar/downloads/list 生成的jar包可用jd-gui来查看(前提是代码未被混淆) 但是如果我们从rom里面提取出的apk是

CFR - another java decompiler批量反编译jar文件(转)

CFR - another java decompiler批量反编译jar文件 jd-gui众所周知,业界公认的反编译必备工具. 笔者目前遇到一个java项目,社区版,想做一个本地化的版本,询问官方,官方说闭源,无奈之下只能反编译了. 面对那么多jar,jd-gui一个个去反编译保存,工作量的确很大.幸好在网上找到一个不错的工具 高能预警:jd-gui反编译的错误的,你敢不敢放到cfr来反编译试一试,保证有惊喜. CFR - another java decompiler 特性: CFR wil

MyEclipse反编译Class文件

对于需要查看Java Class文件源码的筒子们来说,必须在项目中导入Java源码才能查看Class文件的具体实现,这不仅十分的麻烦,因为有时我们并不可以获得Class文件对应的Java源码.今天就给大家介绍一款反编译Class文件的工具,有了它,可以查看任何Class文件的源码. 1.下载MyEclipse反编译Class文件的工具 工具的下载地址:http://download.csdn.net/detail/yulei_qq/5543635 2.工具的安装 下载后上面的工具之后,解压出来,