• 欢迎访问金刀客博客!
  • 2019,春节快乐!

浅谈Delphi程序的汉化

原创天空 admin 6354次浏览 已收录 1个评论

英文程序的汉化是一个枯燥、幸苦的体力活,但是我深深的喜欢上了这个过程,虽纯粹是爱好,但是一直自得其乐,沉醉其中,体会那别样的酸甜苦辣。
成功汉化一个程序的前提是确保目标软件没有加密,所以首先是检查软件是否被加密。我已刚刚汉化的一个程序HFS为例子来说一下程序汉化的大概过程。
首先用DIE或者peid查壳

程序被UPX 2.0压缩,可用peid的通用脱壳机插件脱壳之,用UPX的解压工具脱壳体积小些。
脱壳后软件运行界面

脱壳后就可以直接对资源进行编辑了,对于delphi程序我建议使用Multilizer来汉化标准资源,其读取RC数据的功能十分强大。

最后记得保存或者导出项目文件,下次更新时就不用逐个翻译了,直接使用就可以自动翻译。
现在软件的界面

可以看到已经汉化了很大部分了,怎么还显示有英文呢,哈哈,现在就到了非标准资源汉化了。这里推荐大家使用Athena-A来搞定非标准资源,这个软件的功能叶非常强大,支持字典,这点比狂风汉化百宝箱好多了。打开Athena-A,新建项目,选择ASCII。

这个软件的字典提取,编辑,自动翻译等等功能都设计的非常巧妙、灵活,俺很喜欢,用活了这个软件可以省很多功夫。

经过这一步汉化后,看看现在的软件界面

或许您已发现还有一个地方没有被汉化,那就是“Log”这里,他的意思是”日志“,”日志“为四个字节,而“Log”有3个字节,很明显汉化所需位置不够,所以Athena-A无法替换,在这里怎么办呢? 我们采用修改Log的RVA来解决。
打开16进制编辑软件,比如UltraEdit,将上面汉化的软件拖入UltraEdit。点击查找”虚拟文件系统”,来到“Log”附近。

查看这段代码,可以发现这样一个特点,我们可以拿“虚拟文件系统”和“Log”2个字符的16进制代码来比较,字串之间以00间隔,而且只能以一个00间隔,D0 E9 C4 CE C4 BC FE CF B5 CD B3是虚拟文件系统的十六进制代码,在它的前一个字符间断符00后的代码是FF FF FF FF 0C 00 00 00 00,而在Log的前一个间断符号后的代码是FF FF FF FF 03 00 00 00,和上面的非常相像,并且仔细看看,03不正是Log的长度吗,0C不正是“虚拟文件系统”的12字节长度吗?同时可以发现,在“虚拟文件系统”和“Log”之间除了间断符外有很多剩余的空间,既然有这个特点,那么我们将“Log”前的FF FF FF FF 03 00 00 00代码前移,为后面的汉化腾出空间,并且输入“日志”,现在成了这样

代码前移时切记一定要留下一个00做字符间隔符号,“日志”为4的字节03改为04,输入“日志”确保后面有00间隔符。现在是不是就行了呢?还没有呢,还需要修改调用这个字符的RVA。我们先查看调用”LOG“的RVA是多少,鼠标停在”L“处,在下面状态栏显示字串的实偏移。

打开点睛偏移量转换器,可求出调用RVA

RVA=C0EB5200
同样的办法求出”日“第一个字节的RVA,RVA=BADF5200
现在就搜索十六进制的C0EB5200,修改为BADF5200就ok了

原来就在上面不远,修改后现在另存为,
现在的软件界面

咦,LOG已被成功汉化,
至此,这个软件就被完全汉化了,希望能抛砖引玉,^_^。


金刀客博客 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明浅谈Delphi程序的汉化
喜欢 (5)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到
(1)个小伙伴在吐槽
  1. 支持你啊哈哈
    laoputao2010-11-17 17:05 回复