EGALS引擎漢化思路
最近在搞一個egals引擎,簡單記錄一下。
首先該游戲如果不進(jìn)行安裝則無法打開,使用x32dbg簡單分析,它會讀取注冊表,且在安裝過程中會把游戲路徑寫入注冊表,如果不進(jìn)行安裝游戲無法打開,或許可以寫一個腳本來寫入注冊表,但為了方便起見還是先安裝。
首先分析使用的文本顯示api,可以用的是GetGlyphOutlineA,該api會根據(jù)字體信息將文本轉(zhuǎn)換為圖片,然后用圖片進(jìn)行顯示。字體信息還是放在CreateFontIndirectA的。
進(jìn)入游戲界面,然后用x32dbg在GetGlyphOutlineA初下斷點(diǎn),開始游戲顯示文本,即可找到顯示文本中GetGlyphOutlineA的使用位置。
另外日文通常會有編碼檢測,有時會用系統(tǒng)api(名字忘了),有時會顯示文本附近,有時會在什么亂七八糟的地方。這個游戲運(yùn)氣比較好,


稍微有點(diǎn)經(jīng)驗就會發(fā)現(xiàn)這里在做的就是shift-jis的編碼檢測,修改的話可以改成

因為中文默認(rèn)的編碼gbk與shift-jis是相似的,只是編碼范圍大一點(diǎn)。
當(dāng)然編碼一般晚點(diǎn)才修改,這里只是提前說了。
漢化的話核心問題是提取文本,封回文本。
提取文本的話,一般無腦用garbro看看能不能打開,如果可以的話說明算法是公開的,不需要逆向解密算法,提取與封包問題都不大。
一般而言garbro都可以打開,這個游戲也不列外。
在garbro的源碼中可以輕易的找到egals的解包算法,核心如下:




(md,b站不支持代碼格式,太難受了)
可以發(fā)現(xiàn)分為index和pak兩部分,index文件指示pak中各個文件的大小和位置,采用的都是異或加密,那就簡單了,解密等價于加密。
解包后得到腳本文件,分析腳本文件:

懷疑腳本文件同樣有分段,各個段的名稱后面為偏移,驗證后確實(shí)。
各個段的文本是沒有加密的,直接提取,就可以了。
封包的時候補(bǔ)零對齊字節(jié),這樣可以不懂index文件。另外記得修正偏移。
只要注意到以上問題,漢化就沒啥問題了。