利用jclasslib修改java编译后的.class文件

时间:2021-02-04 19:58:08

java编译后的.class文件,当然是可以反编译的,但主要是反编译后的java文件不能100%的完全正确,也不能保证能编译回去,所以直接修改.class文件比较靠谱。

 

1.可以用jd-gui反编译,找到method

2.用java bytecode (jclasslib) 查找要修改的变量地址

3.使用一下代码修改:

 

利用jclasslib修改java编译后的.class文件
package com.zhahost;

import java.io.*;

import org.gjt.jclasslib.io.ClassFileWriter;
import org.gjt.jclasslib.structures.CPInfo;
import org.gjt.jclasslib.structures.ClassFile;
import org.gjt.jclasslib.structures.constants.ConstantDoubleInfo;

public class ModifyByteCode {
public void Run() {
try {
String filePath
= "C:\\ExcelExporter.class";
FileInputStream fis
= new FileInputStream(filePath);

DataInput di
= new DataInputStream(fis);
ClassFile cf
= new ClassFile();
cf.read(di);
CPInfo[] infos
= cf.getConstantPool();

int pos = 148;
if (infos[pos] != null) {
ConstantDoubleInfo uInfo
= (ConstantDoubleInfo) infos[pos];
uInfo.setDouble(
1.0);
infos[pos]
= uInfo;
}

cf.setConstantPool(infos);

fis.close();
File f
= new File(filePath);
ClassFileWriter.writeToFile(f, cf);

}
catch (Exception e) {

}
}
}