原创 阿伟的水杯 阿伟的水杯  _2026年4月15日 17:01_ _广东_ 现在有一个打包好的jar包,如果我想修改jar包里某个类的某段代码,但是我又不会写字节码,那要如何操作呢? 很简单,主要是利用了javassist库去直接操作打包好的字节码 先引入: ```     ``` 然后直接上代码: ``` 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包内容,在缺失源码的情况下想修改某个功能时,可以很好的派上用场