java修改class文件

最近因为工作需要修改class文件中一个变量的值,特此记录

1、首先使用bytecode viewer打开class文件(下载地址:链接:https://pan.baidu.com/s/1fo6SWTfoNZ5usEQU_R4JmA    提取码:zecz)

 2、找到要修改的变量所在的地址

 3、创建一个java工程、并且将jclasslib.jar导入、执行以下代码即可

 1 package cc.cc.c;
 2  
 3 import java.io.*;
 4 import org.gjt.jclasslib.io.ClassFileWriter;
 5 import org.gjt.jclasslib.structures.CPInfo;
 6 import org.gjt.jclasslib.structures.ClassFile;
 7 import org.gjt.jclasslib.structures.constants.ConstantUtf8Info;
 8  
 9 public class Main {
10     public static void main(String[] args) throws Exception {
11  
12         String filePath = "C:\\Main.class";
13         FileInputStream fis = new FileInputStream(filePath);
14         DataInput di = new DataInputStream(fis);
15         ClassFile cf = new ClassFile();
16         cf.read(di);
17         CPInfo[] infos = cf.getConstantPool();
18  
19         int count = infos.length;
20         for (int i = 0; i < count; i++) {
21             if (infos[i] != null) {
22                 System.out.print(i);
23                 System.out.print(" = ");
24                 System.out.print(infos[i].getVerbose());
25                 System.out.print(" = ");
26                 System.out.println(infos[i].getTagVerbose());
27                 if (i == 21) {//刚刚找到的是21位置
28                     ConstantUtf8Info uInfo = (ConstantUtf8Info) infos[i]; //刚刚那里是CONSTANT_Utf-8_info所以这里要用这个
29                     uInfo.setBytes("baidu".getBytes());
30                     infos[i] = uInfo;
31                 }
32             }
33         }
34         //这种方式也可以,一样的
35 /*        if(infos[count] != null) {
36             ConstantUtf8Info uInfo = (ConstantUtf8Info) infos[i]; //刚刚那里是CONSTANT_Utf-8_info所以这里要用这个
37             uInfo.setBytes("baidu".getBytes());
38             infos[count] = uInfo;
39         }*/
40         
41         cf.setConstantPool(infos);
42         fis.close();
43         File f = new File(filePath);
44         ClassFileWriter.writeToFile(f, cf);
45     }
46 }

 本修改方式参考了https://blog.csdn.net/betterandroid/article/details/14520667

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值