BetaCat_HA
BetaCat_HA
Published on 2024-03-27 / 79 Visits
0
0

Java的反编译:直接修改class字节码文件

前段时间接到一个需求,要求修改收费系统的收费倍率,由于系统年代久远,没有源代码,需要反编译再修改。

用到的软件如下:

情况一:参数为静态变量

此时修改比较简单,方法如下:

  1. 直接用IDEA打开class文件,可以找到相关的变量
    Snipaste_2024-03-27_10-47-48.png

  2. 在菜单中选择View->Show Bytecode with Jclasslib
    Snipaste_2024-03-27_10-48-29.png

  3. 在弹出的侧栏中找到相关字段
    Snipaste_2024-03-27_10-47-31.png

情况二:参数在方法内部

在大多数情况下,需要对整个项目进行反编译,以研究系统的运行机制,此时可以利用jd-gui进行反编译。

  1. 双击"jd-gui.jar"打开软件,并找到class文件路径。
    Snipaste_2024-03-27_11-00-38.png

  2. 此时可以找到方法内的费率参数,可以看到类型是double
    CleanShot 2024-03-27 at 11.03.26@2x.png

  3. 返回IDEA,利用Show Bytecode with Jclasslib功能,打开常量池,找到double常量,并修改

⚠️注意:由于Java的机制,修改常量池会影响该class文件内所有使用相同常量的函数,请确保没有其它函数在使用这个常量

Snipaste_2024-03-27_11-13-34.png


Comment