Files
Knowledge/0 编程/java/傻瓜式修改jar包里的某段代码里的某个方法.md

73 lines
2.5 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
原创 阿伟的水杯 阿伟的水杯
 _2026年4月15日 17:01_ _广东_
现在有一个打包好的jar包,如果我想修改jar包里某个类的某段代码,但是我又不会写字节码,那要如何操作呢?
很简单,主要是利用了javassist库去直接操作打包好的字节码
先引入:
```
<dependency>   
```
然后直接上代码:
```
public static void main(String[] args) throws Exception {
```
运行,就会把那个class单独打包出来了,把class覆盖回jar包就可以了。
使用命令
```
jar uvf xxxx.jar com/xxx/af/f/e.class
```
就可以直接替换jar包里的类了。
解析:
首先是引入包,以及类,这个很简单,使用压缩软件打开jar包就知道对应的类名是什么了:
```
ClassPoolclassPool= ClassPool.getDefault();
```
接着重点就是构造内容:
```
//要改动的方法
```
有多种方法获取对应方法:
![图片](https://mmbiz.qpic.cn/mmbiz_png/MPssKKkDEqphrlZV6nfbLeYlXv5qaH3w3icqk95t0YfM1fmduJ5sJT3ZhME9BuJMgtK6NG1rAjickZhYZfylT7ArxCnv5IAK9pooBFreSdASs/640?wx_fmt=png&from=appmsg&watermark=1&tp=wxpic&wxfrom=5&wx_lazy=1#imgIndex=0)
根据方法的参数情况选择对应的处理方法即可。
接着是构造方法体的代码:
javassist不需要写字节码,完全按普通java代码写即可。只要改几个地方:
1. 类名,因为类名涉及import,所以一般用类的全名,可以有效规避import的问题,不用import类。
2.入参写法,入参要使用**`$1, $2...`**代表方法的第 1、2... 个参数
其他的特殊符号还包括:
![图片](https://mmbiz.qpic.cn/mmbiz_png/MPssKKkDEqqAdK6P3sg9pzYK0csAAyGicDr5N2nHIVhYJbTl9dIMVVX4aRXISV5VMe7UGULNuN7INwuApGYuk3XJ0zPNlAic4G2vibSAXEYJeE/640?wx_fmt=png&from=appmsg&watermark=1&tp=wxpic&wxfrom=5&wx_lazy=1#imgIndex=1)
编写完成后,覆盖方法的时候,有几种常见覆盖方法:
![图片](https://mmbiz.qpic.cn/sz_mmbiz_png/MPssKKkDEqpLLUCj9Zm8dicSNg5yZBX4jTJqNv933tThjZicLo450uLeT4michPcH48ZdZiaDKpRt0CbKJOj57jTK6zedV9dwBIehU9cP8yhNTY/640?wx_fmt=png&from=appmsg&watermark=1&tp=wxpic&wxfrom=5&wx_lazy=1#imgIndex=2)
无论是哪个方法,多行代码的内容前后都要添加大括号
![图片](https://mmbiz.qpic.cn/mmbiz_png/MPssKKkDEqopibGAtSwt1UibHygVgodKicv2KVibKTkXeNibEeQpKEibfS9TjFBId0MIj8tOL14szfPnw2jpBhicdlO1PqNbBSt8FefQbYZfQKSpKk/640?wx_fmt=png&from=appmsg&watermark=1&tp=wxpic&wxfrom=5&wx_lazy=1#imgIndex=3)
总结:简单的修改jar包内容,在缺失源码的情况下想修改某个功能时,可以很好的派上用场