EGALS引擎汉化思路
最近在搞一个egals引擎,简单记录一下。
首先该游戏如果不进行安装则无法打开,使用x32dbg简单分析,它会读取注册表,且在安装过程中会把游戏路径写入注册表,如果不进行安装游戏无法打开,或许可以写一个脚本来写入注册表,但为了方便起见还是先安装。
首先分析使用的文本显示api,可以用的是GetGlyphOutlineA,该api会根据字体信息将文本转换为图片,然后用图片进行显示。字体信息还是放在CreateFontIndirectA的。
进入游戏界面,然后用x32dbg在GetGlyphOutlineA初下断点,开始游戏显示文本,即可找到显示文本中GetGlyphOutlineA的使用位置。
另外日文通常会有编码检测,有时会用系统api(名字忘了),有时会显示文本附近,有时会在什么乱七八糟的地方。这个游戏运气比较好,


稍微有点经验就会发现这里在做的就是shift-jis的编码检测,修改的话可以改成

因为中文默认的编码gbk与shift-jis是相似的,只是编码范围大一点。
当然编码一般晚点才修改,这里只是提前说了。
汉化的话核心问题是提取文本,封回文本。
提取文本的话,一般无脑用garbro看看能不能打开,如果可以的话说明算法是公开的,不需要逆向解密算法,提取与封包问题都不大。
一般而言garbro都可以打开,这个游戏也不列外。
在garbro的源码中可以轻易的找到egals的解包算法,核心如下:




(md,b站不支持代码格式,太难受了)
可以发现分为index和pak两部分,index文件指示pak中各个文件的大小和位置,采用的都是异或加密,那就简单了,解密等价于加密。
解包后得到脚本文件,分析脚本文件:

怀疑脚本文件同样有分段,各个段的名称后面为偏移,验证后确实。
各个段的文本是没有加密的,直接提取,就可以了。
封包的时候补零对齐字节,这样可以不懂index文件。另外记得修正偏移。
只要注意到以上问题,汉化就没啥问题了。