前段时间帮朋友汉化了一个软件。昨天突然收到反馈说软件功能不正常——弹出的小窗口单位制显示错误。英文原版正常。除主程序外,替换了其他DLL文件,还是出错。那问题一定在主程序上了。
猜测可能是因为主界面的参数没正确传递给其他界面。试着还原
还原后,一切正常。
无奈,本人是完美主义者。其他都汉化了,怎么能少了这里呢?于是就继续”深入虎穴”。经过一番摸索后(技术不到家,不然应该很快就能找到方法,下次要好好看看PE结构,重定位这些知识了。),终于得”虎子”。特此记录下。(篇幅有限,步骤有删减,挑了主要部分,分析过程从略)
1、用Athena提取字符串,查找SI的调用地址
P.S.Unicode字符串SI比较短,需要在UltraEdit里找到字符,然后往Athena里添加记录。
2、这个程序比较奇怪(也有可能当时汉化时,没过度汉化),主界面的三个选项(SI、ENGLISH、METRIC),后两个汉化了没事,主要因素在SI这个字符串上。所以就先来看看”米制”(Unicode码73 7C 36 52)
顺手在附近写下”公制”(Unicode码6C 51 36 52 )
那么,它们的相对地址是:
米制地址****AC(1EC9AC)
公制地址****A3
3、找到”米制”地址后,回到Athena看下调用地址0016D6C9
4、会想起步骤1中,SI的调用地址0016D6A1,和”米制”的调用地址接近。分别看下这两处调用地址。
SI调用地址内容
米制调用地址内容
5、回想起步骤2中,增加的”公制”字符串,将上图SI的调用地址改为(A3 DF 5E 00)
6、保存后,运行成功,无问题。
7、用OllyICE查看调用过程如下:
英文原版调用过程
汉化修正版调用过程