利用jclasslib工具直接修改第三方jar包里面的class文件(亲测可用)

article/2025/9/28 21:33:54

如果出于某些原因,需要修改第三方jar包里的class文件,我们能有什么办法呢?

直接修改肯定是运行不了的,这里我给大家介绍一个小工具jclasslib,因为我的电脑是64位的,所以这里就安装64位版

下载地址:https://github.com/ingokegel/jclasslib/releases/download/5.5.1/jclasslib_win64_5_5_1.exe

源码:https://github.com/ingokegel/jclasslib

版本系列:https://github.com/ingokegel/jclasslib/releases

jclasslib引用包,主要用在修改class的项目工程里

https://download.csdn.net/download/suwei825/15893593

一、安装

一路选择next,最后安装成功 Finish!

二、使用

接下来介绍下怎么使用这个工具,我准备了一个测试程序,我们熟悉的hello world

我们新建一个maven项目,添加一个类,里面是一个main主方法

public class testjclass {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubString str="Hello World!";System.out.println(str);}
}

执行maven打包后,我们得到一个jar包

命令行执行

我们把jar用压缩软件解压

接下来我们运行刚才安装好的jclasslib_win64_5_5_1

我们打开刚才解压的class文件

得到如下界面,我们展开methods菜单

我们点击code

就会显示java类的字节码了,我们看第一行,实际就是我们的hello world

我们点击 #2,可以转到常量池

我们再点击cp info #23,就找到hello world了

以后遇到第三方jar需要修改,我们编写一个新的java文件

引用的包,从我上面提供的jclasslib引用包下载地址下载,我们在项目根目录建一个lib目录,把包放进去,我这里用的IDEA Java编程工具

pom文件加依赖,注意引用的是本地项目目录${project.basedir}

        <dependency><groupId>org.gjt.browser</groupId><artifactId>jclasslib-browser</artifactId><version>5.5.1</version><scope>system</scope><systemPath>${project.basedir}/lib/jclasslib-browser.jar</systemPath></dependency><dependency><groupId>org.gjt.jclasslib</groupId><artifactId>jclasslib-browser</artifactId><version>5.5.1</version><scope>system</scope><systemPath>${project.basedir}/lib/jclasslib-library.jar</systemPath></dependency><dependency><groupId>org.gjt.kotlin-runtime</groupId><artifactId>kotlin</artifactId><scope>system</scope><systemPath>${project.basedir}/lib/kotlin-runtime-1.0.6.jar</systemPath></dependency><dependency><groupId>org.gjt.kotlin-stdlib</groupId><artifactId>kotlin</artifactId><scope>system</scope><systemPath>${project.basedir}/lib/kotlin-stdlib-1.0.6.jar</systemPath></dependency>

下面贴出修改代码

import com.sun.org.apache.bcel.internal.util.ClassPath;import java.io.*;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 edit {public static void main(String[] args) throws Exception {String filePath = "D:\\swjava\\ss-1.0-SNAPSHOT\\testjclass.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==23){ConstantUtf8Info uInfo = (ConstantUtf8Info) infos[i]; //刚刚那里是CONSTANT_Utf-8_info所以这里要用这个uInfo.setString("你好程序世界!");infos[i] = uInfo;}}}cf.setConstantPool(infos);fis.close();File f = new File(filePath);ClassFileWriter.writeToFile(f, cf);}
}

这里我把helloworld改成了你好程序世界!

我们编译后不报错就可以了,在代码中配置的 filePath 目录D:\\swjava\\ss-1.0-SNAPSHOT\\里,我们看testjclass.class这个文件的修改日期,就会发现这个文件已经被修改了

接下来就简单了,我们把testjclass.class替换原来jar包的class文件,有2种方式

1、解压被修改的jar包,在相应class位置覆盖原来class文件,然后把解压目录再压缩为zip格式的压缩包,把zip后缀改jar后缀

2、用压缩工具直接打开要修改的jar包,把修改了的class文件直接拖进去覆盖

这里我推荐第2种方法,因为第一种我测试会报错,而且发现第一种解压后再压缩,jar的大小变化很大,可能破坏了结构和压缩率之类的,导致不能运行。

我们再执行java -jar ss-1.0-SNAPSHOT.jar,就会输出修改后的内容了


http://chatgpt.dhexx.cn/article/kYT19vpX.shtml

相关文章

jclasslib的使用

作用&#xff1a; JClassLib不但是一个字节码阅读器而且还包含一个类库允许开发者读取,修改,写入Java Class文件与字节码 jclasslib下载&#xff1a;https://bintray.com/ingokegel/generic/jclasslib/view 我们在这里使用jclasslib查看局部变量表&#xff08;保存java中方法…

【jvm系列-02】jvm的类加载子系统以及jclasslib的基本使用

JVM系列整体栏目 内容链接地址【一】初识虚拟机与java虚拟机https://blog.csdn.net/zhenghuishengq/article/details/129544460【二】jvm的类加载子系统以及jclasslib的基本使用https://blog.csdn.net/zhenghuishengq/article/details/129610963【三】运行时私有区域之虚拟机栈…

如何利用JClassLib修改.class文件

最近在学习逆向分析和反编译&#xff0c;无意之中了解到了JClassLib。JClassLib不但是一个字节码阅读器而且还包含一个类库允许开发者读取,修改,写入Java Class文件与字节码。其他的用途我就不说了&#xff0c;先看一下效果。 第一步、准备下载工具&#xff0c;一个是jd-gui&am…

直接修改别人jar包里面的class文件 工具:jclasslib

出于某些原因 需要把别人jar包里面的class修改一下信息 配置文件*.properties MANIFEST.MF 这些东西可以直接用记事本打开修改 然后替换掉就OK.. 在网上游荡了半天&#xff0c;没有找到合适的方法 开始我是先用jd-gui反编译 把我需要修改的那个A.class文件反编译出来把代码保…

Idea中jclasslib的安装与使用

我们学习JVM的时候常常需要查看字节码指令&#xff0c;而idea中就可以下载jclasslib插件&#xff0c;进行字节码指令的查看。下面我来带大家jclasslib的安装。 安装 安装之后重启即可 使用 使用的时候只需要点开view选中下图的选项即可&#xff0c;但是要注意是编译后再使用…

jclasslib安装

学习一个jvm的知识的时候总要去研究一些字节码指令&#xff0c; 但是每一次都把class文件打开到jclasslib里面很是麻烦&#xff0c;后来google发现有人已经写好了这个插件 1、 按住 ALTCTRLS 打开setting 2、 选择 plugins 3、选择 Browse Repositories ,搜索 jclasslib 由于…

jclasslib修改jar包中class文件 IDEA

一、需求&#xff1a; 第三方jar包中的代码不符合项目的需求&#xff0c;需要对某个class文件进行修改&#xff0c;从而满足项目的需求。通常采用对class文件进行反编译&#xff0c;然后在重新生成jar包。但是反编译的结果不能100%正确&#xff0c;所以直接对class文件进行修改…

可视化已编译Java类文件字节码的神器jclasslib

1、概述 作为Java工程师的你曾被伤害过吗&#xff1f;你是否也遇到过这些问题&#xff1f; 运行着的线上系统突然卡死&#xff0c;系统无法访问&#xff0c;甚至直接OOM 想解决线上JVM GC问题&#xff0c;但却无从下手 新项目上线&#xff0c;对各种JVM参数设置一脸茫然&#x…

[JVM] Jclasslib -- 可视化反编译.class文件的工具

传统我们使用以下命令即可反编译字节码文件 javap -v xx.class Jclasslib是一个可视化已编译Java类文件和包含的字节码的工具。可以在UI中编辑类文件的许多方面。此外&#xff0c;它还包含一个库&#xff0c;使开发人员能够读写Java类文件和字节码。它有两种使用方式--软件安…

jclasslib 插件安装及使用

学习Java&#xff0c;必须要了解 JVM&#xff0c;而学习 JVM 知识时&#xff0c;总要去研究一些字节码指令 而 jclasslib 这个插件很好的解决了这个问题 jclasslib安装&#xff1a; 1.打开设置 或者按Ctrl Alt S&#xff0c;打开设置 2.找到 jclasslib 插件 点击 install …

Python实现博弈树minmax补全与α-β剪枝算法脚本简介

文章目录 前言一、题目二、使用步骤1.递归构建博弈树2.α-β剪枝算法3.博弈树可视化4.测试实例5.结果展示6.全部代码 总结 前言 使用Python编程实现博弈树的构建&#xff0c;实现利用MinMax方法补全博弈树缺失值&#xff0c;并结合α-β剪枝算法&#xff0c;实现博弈树的剪枝。…

CART的剪枝算法

CART剪枝算法从“完全生长”的决策树的底端减去一些子树&#xff0c;使决策树变小&#xff0c;从而能够对未知数据有更准确的预测。CART算法由两步组成&#xff1a;首先从生成算法产生的决策树 底端开始不断剪枝&#xff0c;直到 的根结点&#xff0c;形成一个子树序列 &#x…

α-β剪枝算法学习寄(蒟蒻向,巨佬勿入)

由于做某题时暴力分出来很低&#xff0c;但某巨佬告诉我α-β剪枝很好用于是本屑踏上了征途。作为一只屑屑在学习这个算法时到处看各种blog&#xff0c;于是乎被上界下界决策等一众本屑看不懂的词汇弄得晕头转向&#xff0c;这篇blog就用本屑的语言梳理一下α-β剪枝算法捏。 …

alpha-beta剪枝算法原理(附代码)

alpha-beta剪枝算法原理 背景Max-Min算法alpha-beta剪枝代码 背景 由于笔者最近要写人工智能课的大作业&#xff0c;所以这两天在学习博弈论相关的知识&#xff0c;但网上对alpha-beta剪枝的原理讲的都不是很清晰&#xff0c;很多细节都忽略了&#xff0c;让初学者会有一种脑子…

人工智能之AlphaBeta剪枝算法

任务描述 本关任务&#xff1a;学习人工智能博弈算法中的 AlphaBeta 剪枝技巧&#xff0c;并基于 MinMax 算法编程实现如下图博弈树最优值问题的求解。 博弈树的输入形式为字符串&#xff1a;[A, [B, (E, 3), (F, 12), (G, 8)], [C, (H, 2), (I, 4), (J, 6)], [D, (K, 14), (…

α-β剪枝算法

在写之前首先感谢&#xff1a;https://blog.csdn.net/wenjianmuran/article/details/90633418 这里主要介绍minmax算法和α-β剪枝,相当于对一下文章的翻译&#xff1a; α-β剪枝 Minmax算法 正文&#xff1a; 看了很多关于α-β剪枝算法&#xff0c;大致明白了其中的含义…

α-β剪枝算法简单原理说明

看了一大堆文章实在看不懂&#xff0c;看视频也看不懂&#xff0c;但是看着看着突然顿悟了。这篇文章只讲大概的原理&#xff0c;不讲具体过程。 好了既然会搜这个算法&#xff0c;想必已经知道最大值最小值算法了&#xff08;不知道就去搜吧&#xff09;。这里直接讲例子。 …

alpha-beta剪枝算法

实验报告 alpha-beta剪枝算法 姓名&#xff1a;张楚明 学号&#xff1a;18342125 日期&#xff1a;2021.01.15 摘要 本实验将搜索深度为4的Alpha-Beta剪枝算法应用于中国象棋中黑方走棋&#xff0c;实现了中国象棋的人机博弈。博弈过程中综合考虑了棋力、对敌方棋子的攻击力、…

透析极大极小搜索算法和α-β剪枝算法(有案例和完整代码)

文章目录 前言minimax算法完整代码算法思想代码实现算法优化 α-β剪枝算法完整代码算法思想代码实现算法对比更多案例 结语 前言 先做了一版五子棋的小项目&#xff0c;后面又做了一个功能更强大的中国象棋的项目&#xff0c;但是始终都没有实现一版“智能”AI。 明知道这类博…

决策树后剪枝算法(二)错误率降低剪枝REP

​  ​​ ​决策树后剪枝算法&#xff08;一&#xff09;代价复杂度剪枝CPP  ​​ ​决策树后剪枝算法&#xff08;二&#xff09;错误率降低剪枝REP  ​​ ​决策树后剪枝算法&#xff08;三&#xff09;悲观错误剪枝PEP  ​​ ​决策树后剪枝算法&#xff08;四&…