JAVA类文件更改字符串
我试图修改一个minecraft mod(gravisuite),每当我按下F键时,它就会“关闭/打开重力引擎”,但是我想改变这个字符串,我开始使用十六进制编辑器将“重力引擎关闭”替换为“重力引擎关闭”,但之后该文件不再有效:/我尝试使用jbe、cjbe和rej等工具,该字符串位于常量池中,但它只允许我删除它
有没有办法在编译的java类中更改字符串而不破坏它
谢谢
你可以在下面搜索框中键入要查询的问题!
我试图修改一个minecraft mod(gravisuite),每当我按下F键时,它就会“关闭/打开重力引擎”,但是我想改变这个字符串,我开始使用十六进制编辑器将“重力引擎关闭”替换为“重力引擎关闭”,但之后该文件不再有效:/我尝试使用jbe、cjbe和rej等工具,该字符串位于常量池中,但它只允许我删除它
有没有办法在编译的java类中更改字符串而不破坏它
谢谢
# 1 楼答案
这些文件有校验和:
# 2 楼答案
我对同一个类进行了两次编译,首先是“foo”,然后是“foobar”
用“foo”
用“富吧”
似乎长度也被编码在结构中。注意3和7。。。有more information on this structure
对于300个字符的字符串,前两个字节是01 2c
如果“重力引擎关闭”是29个字符长,我会确保您将字符串前面的字节更改为1D,它当前应该是19个字符(25个字符表示“重力引擎关闭/打开”)
# 3 楼答案
你可以看看Apache BCEL (ByteCode Engineering Library)。它包含一个非常强大的类^{} 。它是一个可以接受输入类的类,在执行时创建一个类,在编译和执行时创建输入类
什么
对。假设您有一个包含一些字符串的类,如下所示:
现在,您可以编译它,以获得
ClassContainingStrings.class
文件。此文件可以馈送到BCELifier
,如下所示:它将创建一个名为
ClassContainingStringsCreator.java
的文件。对于给定的示例,如下所示:(是的,这看起来很可怕,但这并不重要)。重要的是原始类中的字符串,即
"Some string"
和"Printed string"
可以在其中找到。现在,您可以更改这些字符串,然后编译并执行这个creator类它将使用修改后的字符串创建一个新的
ClassContainingStrings.class
# 4 楼答案
jar文件是类的zip文件,我想你已经明白了。最好的方法是加载一个带有反编译器插件的JavaIDE(非常确定Intellij内置了这个插件)。反编译完成后,可以更改生成的源代码并重新编译
这不是微不足道的java内容,但也不是那么复杂。如果您以前做过一些java项目开发,那就不难了