javassist 反编译修改jar包里class

编程教程 > Java (2256) 2024-11-26 14:39:04
某些情况,我们需要对jar进行反编译修改部分代码,通过源码编译太麻烦就直接通过javassist工具对具体的方法进行修改。下面是一些简单javassist使用说明。

一 引入javassist Maven依赖

<dependency>
    <groupId>org.javassist</groupId>
    <artifactId>javassist</artifactId>
    <version>3.28.0-GA</version>
</dependency>
 

二、编写修改.class文件

public static void main(String[] args) {
        // 获取 Jar 包
        ClassPool classPool = ClassPool.getDefault();
        classPool.insertClassPath("D:\\test\\test.jar");
        // 参数为jar包里的 .class 文件全类名,对应要修改的方法的类
        CtClass c2 = classPool.getCtClass("com.xqlee.A");
        // A类有参方法
        CtMethod aMethod = c2.getDeclaredMethod("methodName", new CtClass[]{classPool.makeClass("java.lang.String")});
        // 重置方法体,方法体里面的参数要用$1,$2...代替, 涉及的类要用全类名
        aMethod.setBody("{ return $1; }");
        // A类无参方法
        CtMethod bMethod = c2.getDeclaredMethod("methodName");
        // 重置方法体,涉及的类要用全类名
        bMethod.setBody("{//方法体内容}");
        c2.writeFile();
}

提示:

  • 修改后的class文件生成到当前项目中,对应的包是他自己的包,例如上面会生成到当前项目的 com.xqlee包里面
  • 注意修改的方法如果有入参,则方法名和参数必须与class里面一致才行否则报错没找到类(可以通过jd-gui等可视化反编译工具先查看清楚class里面的方法和参数列表)

三、替换class类

用压缩工具(这里以7z为例)打开jar文件,用生成的A.class 替换原来目录中的A.class文件。替换后可以通过jd-gui工具再次查看。


 

评论
User Image
提示:请评论与当前内容相关的回复,广告、推广或无关内容将被删除。

相关文章
某些情况,我们需要对jar进行反编译修改部分代码,通过源码编译太麻烦就直接通过javassist工具对具体的方法进行修改。下面是一些简单javassist使用说明。一 引入javassist M...
最近要用到jdeli-imageio包里面一个功能,进行了去水印处理。首先新建一个空白maven项目,并引入javassist依赖 &lt;dependency&gtl; ...
mongodb修改数据命令
Linux系统修改静态IP #vi /etc/sysconfig/network-script/ifcfg-eth0修改为:DEVICE="eth0"BOOTP
eolinker开源版修改数据库配置配置文件目录:eolinker_os/server/RTP/config编辑: vi eo_config.php配置内容:(
Spring Boot tomcat 版本修改在maven pom.xml配置文件中,properties 节点里面加入&lt;tomcat.version&gtl;9.0.
以下内容仅供学习研究使用切勿商业用途​​​​​​​以下操作仅以19.6版本为参考其他版本可能有所不同aspose-slides 主要用来PPT转图片/PPT转PDF 支持.ppt/.pptx
idea配置类注释模板和方法注释模板打开idea的setting菜单,File-&gtl;Settings..打开设置 找到Live Templates模板组创建 新建一个分组test新建模板分...
Bootstrap 的导航菜单navba的高度修改,需要重写以下几个属性的高度,不推荐修改源文件,自己写一个名字一样的覆盖.navbar-nav&gtl;li&gtl;a {p
summernote 获取纯文本方法首先我们可以通过summernote api提供的方法获取到包含html标签的内容
JDK 11 String 新方法使用教程
本文主要讲解rocketmq的使用。并且这里的rocketmq已经是由阿里移交至apache基金的版本。也就是4.x版本。在本文编写的时候,apache还未提供编译好的rocketmq下载。只能...
前言学习使用Google GSON库将Java对象序列化为JSON表示形式,并将JSON字符串反序列化为等效的Java对象
Postman 请求前修改密码为MD5值Postman请求参数设置 选择Pre-request Script栏目 获取明文密码并md5加密后设置到变量中 脚本://获取明文密码 let pwd...
Spring Boot定时任务阻塞解决方式一:修改定时任务的线程数量修改spring boot项目的application配置文件,将下面的配置修改为合适的值,默认1表示所有定时任务都是一个线程...