我得到了Mystic Nights的副本,这是专门在韩国实现的PS2生存恐怖游戏。游戏的文字全部在韩文(韩文书写系统)中。我提取了ISO并将其破解,希望将游戏翻译成英文,但我不知道文本的存储位置。我找到了嵌套在.RES文件(资源文件?)中的图形文件(TIM2,.TM2)。我能够使用在romhacking.net上找到的可执行文件来提取那些TIM2图像。我注意到有TIM2图像包含用于韩文的字符表。除了两个大的二进制文件DATA1.BIN和DATA2.BIN,我看不到其他任何可能包含文本的相关文件。 (每个文件的大小约为500mb)
如果这是日文游戏,我会在二进制文件中搜索JIS编码的文本...但是不幸的是,情况并非如此。

关于如何进行的任何想法?

谢谢。

评论

请添加类似10行的说明,在其中找到打印字符的游戏。这会有所帮助

#1 楼

这就是给你的。我认为如果您要翻译的话,由于公司对这款游戏的编程方式,这会变得更加复杂,但是无论如何...

我正在使用PCSX2来执行游戏和GameConqueror (在Linux上为Cheat Engine的替代方法)以检查内存。

首先,我虽然游戏是从文件中导入文本并映射图像上文本文件中的字符以图形方式显示它,在游戏中我到了显示ASCII字符的地步,如下所示:


使用GameConqueror,我搜索包含'R1'的字符串,直到到达该地址0x202a3c00,然后检查内存,我得到了这块数据

现在,我知道他们确实在使用某些ASCII,并且它们是从文件导入的,所以我将文件提取到iso映像内部,输入该文件夹,然后我开始在文件中搜索以下十六进制值:

grep -rnw '.' -e $(echo -e '\x52\x31\x20\xb9')


我得到了:

Binary file ./RES/SUBSYS.RES matches


太好了!然后,我用一个十六进制编辑器打开并搜索值。如果这样做,您会发现他们使用某种语法来告诉游戏显示什么。在这种情况下,它们显示的文本类型为“提示”。



我认为现在您可以开始翻译了,但我想超越范围并反汇编代码以对其进行修改因为如果您翻译该文件会出现问题(我稍后会解决),所以使用PCSX2调试器向0x202a3c00添加一个断点,并且我有两个函数可以访问此地址:

z_un_0014bdf0 write
z_un_00155c70 read


我使用Binary Ninja进行了更好的拆卸(PSCX2调试器很烂),但是我遇到了一些问题...我想使用Hopper,但我需要安装一些插件,这太烦人了...如果我使用IDA pro,则必须购买它因为是mips。所以我想除了翻译该文件没有别的选择。翻译该文件的问题在于,您必须提供比原来更少字节的翻译。例如。

第一张图片中的文本有57个字节。含义。如果翻译超过57个ASCII字符,那么您将不得不使用稍有不同的翻译。如果不是那么容易,因为您可以用0x20(空格)填充它。



那么,他们使用的是什么编码器?我不是编码格式方面的专家,但是我很确定他们没有使用标准格式,因此决定使用自定义格式。我之所以知道这有3个原因:


它们具有的ASCII值实际上表示ASCII值,但
非常有限。
它们没有使用Unicode块Hangul音节。游戏中的字符0xb9f6,但应该是0xbc84在游戏中0xc6b0应该是0xd2bc等。
您提取的图像包含的韩文字符不超过500个,但是Unicode Hangul表中包含11,172个字符。

更新:
感谢@IgorSkochinsky使用不同的方法检查编码器。是EUC-KR

评论


看来버是EUC-KR中的B9 F6

–伊戈尔·斯科钦斯基♦
19年6月2日在11:03

你有链接吗?我是从这里encoding.spec.whatwg.org/euc-kr.html获得的,它看起来并不像它。

–里卡多
19年2月2日在18:31

我在Notepad ++中将文件保存为EUC-KR,并查看了字节

–伊戈尔·斯科钦斯基♦
19年6月2日在21:05

@IgorSkochinsky,你是对的。好的,我想我用作参考的链接是错误的...这一匹配项i18nl10n.com/korean/euckr.html

–里卡多
19年6月2日在23:13

我只想非常感谢你们两个。我在翻译方面取得了巨大进步。当然,由于无法轻松地更改每个文本条目的字节数而无法添加更多字符有时会很烦人和残障,但这总比没有好。

–Shpack
19年6月17日在18:56

#2 楼

我会尝试CP949。当然,这假设文本数据未打包或编码,这也可能发生。也许尝试在运行时转储/搜索仿真器进程内存(在这种情况下,也添加UTF-16),然后尝试跟踪它的显示方式。

编辑我最初错过了该游戏适用于PS2 。在那种情况下,UTF-8和仿真器内存中的纯文本数据将不太可能。实际上,它们可能不使用标准编码就手动编写字形,或者只是将所有文本存储为图像(我注意到这在韩国网站上很常见)。不过,在模拟器过程中跟踪和操纵游戏的内存应该可以让您找到数据(无论是文本还是图形)。例如,查看有关通过仿真器过程跟踪提取3D模型的文章:

https://suxin.space/notes/cw-reverse-engineering-models/

评论


确实,您将文本存储为图像是正确的。这些是我从资源文件提取数据时发现的一些TIM2图像文件。 imgur.com/a/kSL6CJ0还有更多页面介绍每种可能的朝鲜语字符。我猜每个字符都是通过引用包含该特定字符的对应图像的像素子数组绘制到屏幕上的? @伊戈尔·斯科钦斯基

–Shpack
19年5月23日在3:22



@Shpack您可以使用调试器找出在哪里使用它。 github.com/mlafeldt/ps2rd。或使用ps2模拟器并调试游戏。 pcsx2有一个调试器

–里卡多
19年5月30日在3:06



@Ricardo感谢您的回复。我将作弊引擎附加到pcsx2进程上,发现一些与文本相对应的地址。我可以更改一些文本...但是,我不知道如何将这些地址追溯到文件中。

–Shpack
19年5月31日在4:17



@Shpack很聪明!还使用调试器。这是一些调试快捷方式github.com/PCSX2/pcsx2/blob/master/bin/docs/debugger.txt我今晚会尝试一下

–里卡多
19年5月31日在18:44