IDEA利用jclasslib 修改class文件

idea安装jclasslib-bytecode-viewer插件

file–>settings–>plugis ,搜索安装jclasslib-bytecode-viewer,重启idea。

在这里插入图片描述

准备好class文件

把要修改的class文件用idea打开。

使用jclasslib

view–>show bytecode with jclasslib.
常量池,使用过滤器过滤文本。找到对应的指向数字。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

使用下列代码更改内容。

package com.yys.screendisplay.controller;

import java.io.*;

import com.sun.org.apache.bcel.internal.classfile.ConstantString;
import org.gjt.jclasslib.io.ClassFileWriter;
import org.gjt.jclasslib.structures.ClassFile;
import org.gjt.jclasslib.structures.Constant;
import org.gjt.jclasslib.structures.constants.ConstantDoubleInfo;
import org.gjt.jclasslib.structures.constants.ConstantUtf8Info;
import org.gjt.jclasslib.structures.constants.ConstantStringInfo;
public class Test {
    public static void main(String[] args) throws Exception {

        String filePath = "C:\\Users\\HMS\\Desktop\\AppService.class";
        FileInputStream fis = new FileInputStream(filePath);

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

        int count = infos.length;
        for (int i = 0; i < count; i++) {
            if (infos[i] != null) {
                if(i==1813){
                    System.out.print(i);
                    System.out.print(" = ");
                    System.out.print(infos[i].getVerbose());
                    System.out.print(" = ");
                    System.out.println(infos[i]);
                    System.out.println(infos[i].getClass().getSimpleName());
                    ConstantUtf8Info uInfo = (ConstantUtf8Info)infos[i];//根据对应的类型转换
                    uInfo.setString("");
                    infos[i]=uInfo;
                }
            }
        }
        cf.setConstantPool(infos);
        fis.close();
        File f = new File(filePath);
        ClassFileWriter.writeToFile(f, cf);
    }
}


其他

对应的jar包可以在idea安装的插件里面找。
默认在c盘的用户下

报java.lang.ClassNotFoundException: kotlin.jvm.internal.Reflection,加上



<dependency>
    <groupId>com.fasterxml.jackson.module</groupId>
        <artifactId>jackson-module-kotlin</artifactId>
    <version>2.9.4.1</version>
</dependency>


  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
idea是一款功能强大的集成开发环境,可以用于开发和编译各种编程语言的程序。class文件是Java编译后的字节码文件,包含了程序的整体结构和逻辑。反编译class文件是将已编译的字节码文件转化为可读的Java源代码文件的过程。 通过idea反编译class文件可以查看和理解原本编译后的程序逻辑,方便进行代码分析和调试。然而,对于修改已编译的class文件这一行为,我认为是不推荐的。 首先,修改已编译的class文件可能会导致程序运行出现未知的错误。由于class文件是编译后的字节码文件,直接修改其中的内容可能会导致程序出现逻辑错误、运行异常甚至崩溃。这样的行为会对程序的稳定性和可维护性造成负面影响。 其次,修改已编译的class文件可能违反软件使用许可协议和法律法规。在商业和开源软件中,往往对源代码和编译后的class文件有相应的使用限制和授权条款。未经许可或违反使用条款的修改class文件属于侵权行为,可能会引发法律纠纷。 为了避免不必要的问题和风险,我们在使用idea时应当尊重他人的知识产权和软件许可条款。如果需要修改程序的逻辑或功能,应当通过正规的方式进行编码开发,遵循软件开发的规范和流程。只有在拥有相关授权或合法使用许可的情况下,才可以对class文件进行修改。 因此,虽然idea可以反编译class文件,但是修改class文件的行为是不被推荐的,并且也应该遵循相关的法律法规和软件许可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值