如何利用JClassLib修改.class文件

article/2025/9/28 21:41:13

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


第一步、准备下载工具,一个是jd-gui,阅读jar包和.class源码的工具,jclasslib就修改.class文件的包

下载地址

第二步、示范
1、比如说这个就是原来的java文件,很简单就是输出 google 这个字符串
package com.qx;public class Main {public static void main(String[] args) {print();}static void print() {System.out.println("google");}
}


2、编译之后,控制台执行结果为 google,为什么用 javac -d . Main.java 去编译java文件,这个我就不解释了,不懂的话去恶补一下


3、找到Main.class文件,并用 jd-gui打开,效果如下


4、在这里很明显看到源码,可惜不能修改呀,现在就准备修改工具,搞定它。解压jclasslib,目录如下

5、在eclipse里面创建一个java工程,然后把src文件覆盖到工程目录下,并且执行BrowserApplication.java,得到一个工具叫做Bytecode viewer,如下图

6、现在咱们可以利用工具找到我们修改的部分,我们就是要修改Main.class文件中google,修改成 baidu。
结构目录很清楚,methods就是方法,print是打印google字符串的方法,main是主函数,在这里我们找到print并打开

7、打开code,我们会看到第二行 lbc #4 <google>,这时我们点击#4

8、这个效果如下,通过这个,我们知道google字符串的地址在哪里了,在#21, 这个时候 点击 cp info #21

9、这时,我们看到的google字符是在[21]这个位置,并且CONSTANT_Utf-8_info,这些信息待会修改的时候 很有用。


10、现在我们可以用代码去把 google 修改成 baidu。首先创建一个工程,把刚刚下载jclasslib文件夹下bin目录下jclasslib.jar引入,如下图

11、Main.java函数代码如下
package cc.cc.c;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.ConstantUtf8Info;public class Main {public static void main(String[] args) throws Exception {String filePath = "C:\\Main.class";FileInputStream fis = new FileInputStream(filePath);DataInput di = new DataInputStream(fis);ClassFile cf = new ClassFile();cf.read(di);CPInfo[] infos = cf.getConstantPool();int count = infos.length;for (int i = 0; i < count; i++) {if (infos[i] != null) {System.out.print(i);System.out.print(" = ");System.out.print(infos[i].getVerbose());System.out.print(" = ");System.out.println(infos[i].getTagVerbose());if (i == 21) {//刚刚找到的是21位置ConstantUtf8Info uInfo = (ConstantUtf8Info) infos[i]; //刚刚那里是CONSTANT_Utf-8_info所以这里要用这个uInfo.setBytes("baidu".getBytes());infos[i] = uInfo;}}}//这种方式也可以,一样的
/*		if(infos[count] != null) {ConstantUtf8Info uInfo = (ConstantUtf8Info) infos[i]; //刚刚那里是CONSTANT_Utf-8_info所以这里要用这个uInfo.setBytes("baidu".getBytes());infos[count] = uInfo;}*/cf.setConstantPool(infos);fis.close();File f = new File(filePath);ClassFileWriter.writeToFile(f, cf);}
}
12、不报错,就代表成功了,然后再执行Main.class文件


这个时候,我们就把class文件中google修改成baidu了,怎么用这个工具就看你怎么玩了,有什么问题请随时留言。


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

相关文章

直接修改别人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;四&…

C++实现的基于αβ剪枝算法五子棋设计

资源下载地址&#xff1a;https://download.csdn.net/download/sheziqiong/85883881 资源下载地址&#xff1a;https://download.csdn.net/download/sheziqiong/85883881 基于αβ剪枝算法的五子棋 五子棋介绍 简介&#xff1a; 五子棋是世界智力运动会竞技项目之一&#x…

决策树后剪枝算法(四)最小错误剪枝MEP

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

计算机博弈 基础算法 阿尔法-贝塔剪枝算法 α-β剪枝算法

计算机博弈大赛中 α-β剪枝算法剪枝算法是极大极小算法的一种优化&#xff0c;可以更快的搜索博弈树 预备知识&#xff1a; 广度优先搜索(BFS) 深度优先搜索(DFS) 极大极小算法(MaxMin算法) 介绍 剪枝算法来源于极大极小算法&#xff0c;在博弈树分枝过多时可以使用这个方法…