浅谈Delphi程序的汉化
标 题: 【原创】浅谈Delphi程序的汉化作 者: daokers
时 间: 2009-06-23,23:27
链 接: http://bbs.pediy.com/showthread.php?t=92143
英文程序的汉化是一个枯燥、幸苦的体力活,但是我深深的喜欢上了这个过程,虽纯粹是爱好,但是一直自得其乐,沉醉其中,体会那别样的酸甜苦辣。
成功汉化一个程序的前提是确保目标软件没有加密,所以首先是检查软件是否被加密。我已刚刚汉化的一个程序HFS为例子来说一下程序汉化的大概过程。
首先用DIE或者peid查壳
http://www.daokers.com/attachments/month_0906/s2009621225545.jpg
程序被UPX 2.0压缩,可用peid的通用脱壳机插件脱壳之,用UPX的解压工具脱壳体积小些。
脱壳后软件运行界面
http://www.daokers.com/attachments/month_0906/5200962123434.jpg
脱壳后就可以直接对资源进行编辑了,对于delphi程序我建议使用Multilizer来汉化标准资源,其读取RC数据的功能十分强大。
http://www.daokers.com/attachments/month_0906/s200962123820.jpg
最后记得保存或者导出项目文件,下次更新时就不用逐个翻译了,直接使用就可以自动翻译。
现在软件的界面
http://www.daokers.com/attachments/month_0906/f2009621231032.jpg
可以看到已经汉化了很大部分了,怎么还显示有英文呢,哈哈,现在就到了非标准资源汉化了。这里推荐大家使用Athena-A来搞定非标准资源,这个软件的功能叶非常强大,支持字典,这点比狂风汉化百宝箱好多了。打开Athena-A,新建项目,选择ASCII。
http://www.daokers.com/attachments/month_0906/a2009621231732.jpg
这个软件的字典提取,编辑,自动翻译等等功能都设计的非常巧妙、灵活,俺很喜欢,用活了这个软件可以省很多功夫。
http://www.daokers.com/attachments/month_0906/q2009621232117.jpg
经过这一步汉化后,看看现在的软件界面
http://www.daokers.com/attachments/month_0906/c2009621232240.jpg
或许您已发现还有一个地方没有被汉化,那就是“Log”这里,他的意思是”日志“,”日志“为四个字节,而“Log”有3个字节,很明显汉化所需位置不够,所以Athena-A无法替换,在这里怎么办呢? 我们采用修改Log的RVA来解决。
打开16进制编辑软件,比如UltraEdit,将上面汉化的软件拖入UltraEdit。点击查找"虚拟文件系统",来到“Log”附近。
http://www.daokers.com/attachments/month_0906/s2009621233225.jpg
查看这段代码,可以发现这样一个特点,我们可以拿“虚拟文件系统”和“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代码前移,为后面的汉化腾出空间,并且输入“日志”,现在成了这样
http://www.daokers.com/attachments/month_0906/a200962123541.jpg
代码前移时切记一定要留下一个00做字符间隔符号,“日志”为4的字节03改为04,输入“日志”确保后面有00间隔符。现在是不是就行了呢?还没有呢,还需要修改调用这个字符的RVA。我们先查看调用"LOG“的RVA是多少,鼠标停在”L“处,在下面状态栏显示字串的实偏移。
http://www.daokers.com/attachments/month_0906/u20096220056.jpg
打开点睛偏移量转换器,可求出调用RVA
http://www.daokers.com/attachments/month_0906/z2009622033.jpg
RVA=C0EB5200
同样的办法求出”日“第一个字节的RVA,RVA=BADF5200
现在就搜索十六进制的C0EB5200,修改为BADF5200就ok了
http://www.daokers.com/attachments/month_0906/a20096220814.jpg
原来就在上面不远,修改后现在另存为,
现在的软件界面
http://www.daokers.com/attachments/month_0906/k20096220952.jpg
咦,LOG已被成功汉化,
至此,这个软件就被完全汉化了,希望能抛砖引玉,^_^。 学习汉化 很吃力 :dizzy: 全面概括汉化的基础呀。
顶 :)我收藏了 我也收藏了:lol Hmily 老大的东西!我喜欢,向Hmily 老大看齐!俺也慢慢学习汉化! 先收藏了,有空学习一下。。。。 好详细呀,学习了 这个方法太好了。正需要。
页:
[1]