Java .Class文件更改字符串

use*_*889 5 java

我正在尝试修改一个Minecraft mod(gravisuite),每当我按下F时,"Gravitation Engine OFF/ON",但是我想改变这个字符串,我开始将"Gravitation Engine OFF"更换为"Gravitation Engine OFF"通过使用十六进制编辑器,但之后文件不再有效:/我尝试使用像jbe和cjbe和rej这样的工具,并且该字符串在常量池中,但它只会让我删除它...

有没有办法在不破坏它的情况下更改已编译的java类中的字符串?

谢谢

Ada*_*dam 3

我通过一个小的调整编译了同一个类两次,首先使用“foo”,然后使用“foo-bar”

public class HelloWorld {
   public static final String HELLO = "foo-bar";
}
Run Code Online (Sandbox Code Playgroud)

与“富”

000000b0  74 01 00 **03** 66 6f 6f 00  21 00 02 00 03 00 00 00  |t...foo.!.......|
000000c0  01 00 19 00 04 00 05 00  01 00 06 00 00 00 02 00  |................|
000000d0  07 00 01 00 01 00 08 00  09 00 01 00 0a 00 00 00  |................|
000000e0  1d 00 01 00 01 00 00 00  05 2a b7 00 01 b1 00 00  |.........*......|
000000f0  00 01 00 0b 00 00 00 06  00 01 00 00 00 01 00 01  |................|
00000100  00 0c 00 00 00 02 00 0d                           |........|
Run Code Online (Sandbox Code Playgroud)

与“foo-bar”

000000b0  74 01 00 **07** 66 6f 6f 2d  62 61 72 00 21 00 02 00  |t...foo-bar.!...|
000000c0  03 00 00 00 01 00 19 00  04 00 05 00 01 00 06 00  |................|
000000d0  00 00 02 00 07 00 01 00  01 00 08 00 09 00 01 00  |................|
000000e0  0a 00 00 00 1d 00 01 00  01 00 00 00 05 2a b7 00  |.............*..|
000000f0  01 b1 00 00 00 01 00 0b  00 00 00 06 00 01 00 00  |................|
00000100  00 01 00 01 00 0c 00 00  00 02 00 0d              |............|
Run Code Online (Sandbox Code Playgroud)

看起来长度也被编码在结构中。注意 3 和 7...有关此结构的更多信息

对于 300 个字符的字符串,前两个字节是 01 2c。

因此,考虑到“Gravitation Engine Turned OFF”的长度为 29 个字符,我会确保将字符串之前的字节更改为 1D,目前应该为 19 个字符(“Gravitation Engine OFF/ON”为 25 个字符)