需求及准备
需求
现在有一个.jar文件,要修改其中某个文件的代码。
准备
-
确保JRE已安装且环境变量已配置。
-
安装Java Decompiler。官方地址为:
http://java-decompiler.github.io/
选择其中的JD-GUI进行下载。
-
安装winrar。
提取class内容并修改
打开JD-GUI,将.jar拖进来。JD-GUI会将jar包反编译为java源码。
在JD-GUI中可以看到反编译源码,但不能直接修改。找到要修改的文件,复制。
创建一个与.class同名的空白.java文件(为了后续生成.class不冲突,建议放在一个单独目录下),将复制的内容粘贴到该文件中。对其代码进行修改。
编译
打开CMD,定位到上面创建的.java所在目录下,输入:
javac xxx.java
编译后,会生成同名的.class文件。
注意此方式只能编译不依赖其他模块的.java文件。对于依赖其他模块的,需要分析并定位.class的虚拟机代码后,创建java工程引入jclasslib修改。可以参考修改jar中的class:杀戮尖塔修改教程。
替换jar中class文件
替换jar中class有两种方式:
- 借助rar直接替换。
- 解压jar为文件夹,替换class后重新打包为jar。
借助winrar直接替换
使用winrar直接打开.jar文件,进入指定目录后,将刚才编译生成的class直接拖进来替换即可。
解压jar为文件夹,替换class后重新打包为jar
使用winrar将.jar文件解压为文件夹,然后替换class。
设该文件夹名称为xxx。打开CMD并定位到该文件夹所在目录下,输入:
jar cvfm xxx.jar xxx\META-INF\MANIFEST.MF -C xxx /
其含义为:使用xxx\META-INF\MANIFEST.MF作为配置文件,并调用-C
切换路径为xxx
文件夹下。然后打包出.jar文件。
注意-C xxx /
最后的文件夹名称xxx与/
之间有个空格,不可省略。