java编译后的.class文件,当然是可以反编译的,但主要是反编译后的java文件不能100%的完全正确,也不能保证能编译回去,所以直接修改.class文件比较靠谱。
1.可以用jd-gui反编译,找到method
2.用java bytecode (jclasslib) 查找要修改的变量地址
3.使用一下代码修改:
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) { } } }
留着备用,一般人看不懂...