如何直接修改 java字节码文件

前言

最近项目中碰到个问题,公司有个从外包那买来的系统,这个系统外包已经停止维护了,公司的服务器上只有一堆class文件,我们也没有最新的源码,结果里面一个请求第三方接口的用到的key过期了,而这个key又是通过硬编码的形式写死在代码里的,导致这条业务失效了,需要紧急修复一下。

所以聪明的你,能想到的最简单的方式就是 ,直接修改生成的 class 文件,这样可以最小化的修改系统代码,不会导致其他功能失效,搜了一些修改方式,最后采用了比较方便的一种,成功的解决了这次问题,接下来记录一下,修改的步骤,以便后续不记得的时候查看。

这里要提醒一下,改生产文件的时候先备份,给自己留条后路。

1. 从Hello World开始

写个HelloWorld类,打印一下
HelloWorld.java

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("helloWorld......");
    }
}

image.png

编译生成class文件

image.png
HelloWorld.class

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
public class HelloWorld {
    public HelloWorld() {
    }
    public static void main(String[] args) {
        System.out.println("helloWorld......");
    }
}

执行 java HelloWorld

image.png

到这里,准备工作做好了,接下来,我们来修改一下class文件

2. idea安装jclasslib-bytecode-viewer插件

基本操作,这里就不演示了
在这里插入图片描述

下载完成后用idea打开class文件

选中class文件,点击导航栏View,点击Show Bytecode With Jclasslib

image.png

这个时候我们可以看到右侧的菜单弹出对应的class信息

image.png

我们可以看到这里已经给我们划分好了文件夹,我们尝试的这把输出的语句修改一下

修改的是字符串所以应该在常量池里,尝试着找一下,果然找到了。

image.png

修改为我们想要的值就可以了,保存完成修改

总结

从这件事中吸收教训,以后类似与这种动态配置的类型值,一定要抽离出来,坚决避免这种硬编码的形式

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曹申阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值