翻译一个韩文独家PS2游戏~韩文编码?

逆向工程 拆卸 二进制 编码
2021-06-15 09:22:37

我拿到了 Mystic Nights 的副本,这是一款仅在韩国发行的 PS2 生存恐怖游戏。游戏文字全部使用韩文(韩文书写系统)。我提取了 ISO 并将其打开,希望将游戏翻译成英文,但我无法弄清楚文本的存储位置。我找到了嵌套在 .RES 文件(资源文件?)中的图形文件(TIM2、.TM2),我能够使用在 romhacking.net 上找到的可执行文件来提取这些 TIM2 图像。我注意到有 TIM2 图像保存着韩文的字符表。除了两个大型二进制文件 DATA1.BIN 和 DATA2.BIN 之外,我真的看不到任何其他相关文件可能包含文本。(每个大约 500mb 大小)如果这是一个日本游戏,我会在二进制文件中搜索 JIS 编码文本……但不幸的是,情况并非如此。

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

谢谢。

2个回答

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

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

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

这是给你的。我认为如果你要翻译它会比你想象的更复杂,因为公司编程这个游戏的方式,但无论如何......

我正在使用 PCSX2 来执行游戏和 GameConqueror(Linux 上的作弊引擎的替代品)来检查内存。

首先,我认为游戏是从文件导入文本并将文本文件中的字符映射到图像上以图形方式显示,所以我在游戏中显示ASCII字符,如下所示: 在此处输入图片说明

使用 GameConqueror,我搜索包含“R1”的字符串,直到到达该地址,0x202a3c00然后我检查内存并获得了这一块数据在此处输入图片说明

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

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

我有:

Binary file ./RES/SUBSYS.RES matches

伟大的!然后我用十六进制编辑器打开并搜索值。如果你这样做,你会注意到他们使用某种类型的语法来告诉游戏要显示什么。在这种情况下,它们显示文本类型“TIP”

在此处输入图片说明

我认为现在你可以开始翻译了,但我想超越并反汇编代码来修改它,因为如果你翻译那个文件就会出现问题(我稍后会解决这个问题)所以我用 PCSX2 调试器添加了一个断点to0x202a3c00 和我有两个函数可以访问这个地址:

z_un_0014bdf0 write
z_un_00155c70 read

我使用 Binary Ninja 更好地反汇编它(PSCX2 调试器很烂)但是我遇到了一些问题...我想使用 Hopper 但我需要安装一些插件而且太烦人了...如果我使用 IDA pro 我必须购买它因为是 mips .... 所以我想除了翻译那个文件没有其他选择。翻译该文件的问题在于,您必须使用比现有更少字节的翻译。例如。

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

在此处输入图片说明

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

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

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