编辑 .class 文件中的字符串

Editing a String in a .class file

问题

嘿嘿。我一直在开发一个游戏,在游戏中,我显示的是版本“1.0.13”,我很快意识到这是完全错误的,它应该显示“1.9”。我在 Eclipse 中编辑我的代码,我没有为每个版本的代码做备份,所以我不能只从 Eclipse 编辑字符串。我尝试使用 .jar 反编译器 反编译游戏的 .jar 文件。我下载了源代码(.java 文件)并将其放入 Eclipse Neon。将 .java 文件放入后,我意识到出现了一些错误。我修复了它们和 运行 程序。游戏的许多机制都被完全破坏了。我意识到这行不通,所以我用 WinRAR 提取了 .jar,然后尝试使用 WinRAR 手动编辑 .class 文件(这是一个愚蠢的想法) =22=]记事本++。使用他们的 built-in 工具后,我迅速替换了所有“1.0.13"s with "1.9”。保存代码和 运行 .jar 文件后,出现 window 标题 "Java Virtual Machine Launcher" 和文本 "Error":发生 JNI 错误,请检查您的安装并尝试再次”。然后我 运行 跨过一个名为 JBE(Java 字节码编辑器) 的程序。在使用该程序时,我不确定如何编辑常量变量,并且我搜索了使用该程序的教程并找到了 none.

我只想编辑一个字符串,我花了几个小时研究,但我什至找不到解决方案。如果您知道如何解决这种情况,请发表评论。提前致谢。

信息

因为我 "need at least 10 reputation to post more thank 2 links." 我只是 post 一个你可以阅读的 single PasteBin link 将 link 我在本文中谈到的所有网站和程序post.

不反编译,不编辑字节码。

如果您使用标准的十六进制编辑器 (http://www.hexedit.com/),您可以打开二进制 class 文件。仔细查看那里,您可能可以在某个地方找到旧版本号。您可以更改单个字节(不要忘记它是 UTF-16 编码的!)并保存二进制更改。

关键是 class 中没有其他内容移动或改变位置。记事本将插入或删除字符,这将破坏 class 文件。当您找到文字时,您必须用 space 个字符填充字符串(您不能更改字符串文字的长度)。也就是说,将它们所在的字符更改为新数字,或更改为 space 个字符,但不要添加或删除任何内容。

除了表示 class 文件中的字符串的字节外,没有任何变化。