Language Patch
这篇Digivice Ver. Portable逆向工程教程写的太好了,涉及从逆向到发布的全过程与工具链,我觉得没必要再多说什么了。
汉化相关
Usually Chinese Language Patchs are based on Japanese Games.
Typically only the Character Set size used by the Japanese games is large enough to fit in COMMON Chinese characters.
传统汉化方法
Hint
码表:即编码字节同字符的对应表。
字库:即储存字体字形图像的文件。
从二进制文件中检测潜在的字符串并生成<偏移量,字符数,字符内容>的一张表。通过这张表可以方便地对源文件进行替换和修改。
为了检测潜在的字符串,需要编码字节与字符的对应表,即“码表”
由于游戏通常采用SHIFT-JIS编码,而该编码中汉字字符数量极为有限。
因而人们会修改字体文件,即“字库”,将原来的SHIFT-JIS字节序列对应的日文字符图像修改为其他的汉字字符图像。
此时字节序列同字符的对应关系已然发生改变。
因而又要重新写一张字符和编码字节的对应表,将翻译后的文本映射到新的字节序列上。
此时再对源二进制文件中的字符序列进行替换修改,便完成了文本的汉化过程。
参考资料
码表相关
理想情况
能够从二进制文件和资源文件中找到字符串和字库,直接进行修改。
在2010年左右,WQSG
和CrystalScript
用于处理码表、检测二进制文件中潜在的字符串,CrystalTile
用于处理二级制文件中的图片和字库。
参考资料 CrystalTile
无法获得字符串或字库
由于加密等问题,汉化工作者有时无法从二进制文件中寻找到字符串和字库。此时往往有以下两种方法。
近似汉化
在无法获得字库时,使用SHIFT-JIS中已有的同汉字相近的日文字符作为对应汉字的替代。
近似字符表:https://github.com/ultrapre/GBK_SJIS/blob/master/gbksjisTBL/README.md
内存汉化
无法在源文件中获得字符串或字库,但由于游戏运行时未加密的字符串和字库会加载到内存中,因而可以通过插件在游戏运行时对内存相应区域进行替换修改。
具体实现
都是2010年前后,上个时代的资料了。现在的人应该用更现代的语言来表述。使用现代的工具链!
仅仅对文件修改
按照传统的汉化方法,只需要对资源文件和可执行文件中出现的代表字符串的字节序列
和字库
进行修改汉化工作便完成了。这一步的难点就在文件格式的解密上。
具体来讲,对于PSP
汉化,可以通过PPSSPP
的调试功能逐步分析文件格式。可以参考《诡计对逻辑》汉化研究
关于提取,也可以参考“南德小学生”在B站发布的相关汉化视频。
修改可执行文件/添加外部插件
对于一些需要使用内存汉化法或者调用的是系统字库的游戏,则需要进行程序逻辑的修改或者编写新的插件。也就是要进行反汇编、注入、劫持等操作。这更接近于本网站的主题。
常见格式
储存在资源文件中的图像具有多种格式。
其中主流格式有:
+ 索尼官方支持的GIM
:可以使用GimConv
或GitHub上有关脚本进行转换
+ 通过Crystal Tile进行分析
+ ...
检测资源文件中存在的SJIS字符串
- TODO