·汉化新世纪 ·汉化新世纪论坛 ·百家争鸣 ·论坛集萃 ·汉化问答 ·软件介绍
文章首页 >> 汉化教学 >> 特殊汉化 >> 四步搞定非标字体    Creative Commons License,创作共用协议(中文版)  署名 非商业性使用 禁止演绎

四步搞定非标字体

作者: 韦斯特·金 来源:汉化新世纪 时间:2006-04-12 点击:16260

  我在汉化 System Mechanic 6.0s 的时候,很多地方的都需要手动修改字体,但是我对手动修改字体并不在行,所以在教学站上看了很多相关文章,但还是看不懂,索性自己研究了一番,嘿嘿,没想到居然成功了。^_^
  想到很多汉化朋友有时候也为这个犯愁(当然不包括那些高手),因此谨以此篇文章供各位同仁参考。

操作建议:在手动修改字体之前,最好先处理完标准资源,且不要汉化非标资源,这样有利于在 OllyDbg 中搜索字符串。

目标文件:SysMech6.exe (System Mechanic 6)
使用工具:FontSpy(jingulong修改版)、OllyDbg、UltraEdit

第一步:确定要处理的字体名称、字体大小
  用 FontSpy 打开要检测字体的文件(如图1,本文即为:SysMech6.exe),尽量运行各个模块,以避免遗漏。


图1

程序运行完后,退出程序,FontSpy 会自动打开字体检测结果(本文即为:SysMech6.out.htm),得出如下结果:
(LPLOGFONT:0012FC3C:FFFFFFF5_00000000_00000000_00000000_00000190_00_00_00_01_00_00_00_00:"MS Sans Serif")
CreateFontIndirectA returns: 840A0995
(LPLOGFONT:0012FA14:FFFFFFF5_00000000_00000000_00000000_00000190_00_00_00_01_00_00_00_00:"Arial")
CreateFontIndirectA returns: 100A0A39
(LPLOGFONT:0012F20C:FFFFFFF7_00000000_00000000_00000000_000002BC_00_00_00_01_00_00_00_00:"Arial")
CreateFontIndirectA returns: 980A0CDC
  从检测结果中可以看到:此程序基本是用 CreateFontIndirectA 函数来创建字体的,而且要处理的非标字体只有 MS Sans Serif 和 Arial。

第二步:修改“标准的”非标字体
  运行 OllyDbg,点击“文件 -> 打开”(或者按 F3 键),选择要反汇编的程序(本文即为:SysMech6.exe),载入后,点击鼠标右键,选择“搜索 -> 所有参考的文本字符串”(如图2),然后在打开的文本参考窗口中点击鼠标右键,选择“搜索文本”(如图3),在对话框中输入刚才检测到的字体“Arial”并选中“整个范围”(如图4),点击确定后即可找到该字体名称(如图5),双击该行后返回到反汇编窗口中对应的位置(如图6),此时,是修改字号的关键,我发现字号的设置一般不会里字体名称很远,可以在字体名称附近寻找,一般不会超过20条语句(在图6中可以看到,用红框标记的 mov edx,8 即为该处字体的字号设置),双击找到的字号语句,在对话框中将 8 改为 9(如图7),意思就是将 8 号字改为 9 号字,然后点击“汇编”再点击“取消”退出,这时该处的字号就改好了,然后继续开始下一处字号的修改。


图2

图3

图4

图5

图6

图7

  选择“查看 -> 参考”(如图8),回到文本参考窗口,点击鼠标右键,选择“查找下个”(或者直接按 Ctrl+L 键,如图9),找到下一个“Arial”后双击(与上一段中的操作相同),回到反汇编窗口后在字体名称附近查找字号设置语句,双击字号设置语句,将 8 改为 9(如图10),点击“汇编”再点击“取消”完成该处字号的修改。这里说明一下,我从该程序的字体修改中发现,一般设置字号的语句不是 mov edx,x 就是 push x,而且 push x 语句基本位于字体名称下面,而且很近;而 mov edx,x 与字体名称的距离稍远,有时候也会出现在字体名称的上面(如图11);另外,有些需要修改的字号不一定是 7 或 8,可能是 -0B(如图12),此时就需要将 B 改为 C;对于那些字体名称附近没有字号设置语句的就可以暂时忽略,继续寻找下一处字体。


图8

图9

图10

图11

图12

  按照上述方法将所有字体名称为“Arial”的相应字号语句修改后,在反汇编窗口中按鼠标右键,选择“复制到可执行文件 -> 所有改动”(如图13),在弹出的对话框中点击“全部复制”(如图14),之后,在打开的文件窗口中按鼠标右键,选择“保存文件”(如图15),将修改后的文件换名保存即可(如图16),最后关闭文件。


图13

图14

图15

图16

  此时,只处理完了“Arial”字体,“MS Sans Serif”稍后处理。接着,用“点睛字串替换器 v1.05”查找 Delphi 字串,将找到的“Arial”全部改为“宋体”,然后替换字串。此时,可以运行处理后的文件,看看是不是每一处字体为“Arial”的地方都改成了“宋体”9号字,如果还有的话,请检查一下标准资源中对应窗体中的字体、字号是否已经修改。

第三步:修改“特殊的”非标字体
  上一个步骤中讲了“标准的”非标字体的修改方法(我所谓的“标准的非标字体”,是指属于 Delphi 字串类的字体名称,即可用“点睛字串替换器”的“查找 Delphi 字串”功能找到的字体),如果用 FontSpy 还检测到其他“标准的”非标字体,同样可以用第二步中的方法进行修改。而很多 Delphi 或 C 语言类的程序中,我们在搜索 Ascii 字串时往往会找到“MS Sans Serif”字体,当我们用 UltraEdit 打开文件后找到相应位置的字体时可以看到它的十六进制不是 Delphi 字串的“FF FF FF 05 00 00 00 41 72 69 61 6C”(即字串“Arial”的 Delphi 格式)形式,而是“0D 4D 53 20 53 61 6E 73 20 53 65 72 69 66”(如图17),最前面的 0D 是长度标识,并且在查找该处字串的偏移时要以 0D 的位置来查找,而不是后面的 4D。这种“特殊的”非标字体,往往会被程序用在提示信息对话框中,下面继续处理这种字体。


图17

  用 OllyDbg 打开第二步中修改后的文件,用同样的方法搜索“MS Sans Serif”,找到以后可以看到,除了在字体名称下面有一处 push x 语句之外(如果是 9 的话就不用改了),上面不远处还有一个 push 8 语句(如图18),这里也是需要修改的。完成后用同样的方法保存文件,然后关闭文件。


图18

  接着用 UltraEdit 打开修改后的文件,找到那个“MS Sans Serif”,将它改成“宋体”,即把“0D 4D 53 20 53 61 6E 73 20 53 65 72 69 66”改为“04 CB CE CC E5 00 00 00 00 00 00 00 00 00”,注意修改前面的长度标识(如图19),最后存盘。


图19

第四步:修改其他未处理的非标字体
  当我们执行完以上步骤之后,运行程序,再检查一下是否有遗漏的地方。这时,我发现有一个地方的字号没有修改(如图20),记下这里的字串“Last Run:”,退出程序。再用 OllyDbg 打开修改后的文件,还是用同样的方法搜索“Last Run:”(这里就体现出为什么在处理完标准资源之后就手动修改字体的原因,因为 OllyDbg 不能搜索中文字符串),找到之后可以看到临近的几个字符串也与图19中出现的相同(如图21),可以确定这里就是要找的那个“Last Run:”了,双击后回到反汇编窗口,在字串附近找了一下,发现上面有一个“mov edx,7”(如图22),参照上面的介绍以及图19中看到的字体大小可以排除那个“mov ebx,8”,那么,“mov edx,7”就是要找的字号设置语句,修改它,然后保存,最后关闭文件。


图20

图21

图22

  最后再运行修改后的程序进行检查,非标字体基本处理完了,如果还有的话,就继续按照第四步的方法进行处理。

汉化新世纪 责任编辑: 韦斯特·金 .:|:. 标签(Tag): 字体 CreateFontIndirectA

·上一篇: OllyDBG 入门系列(七)-汇编功能 ·下一篇: CX工作室的新軟件 cx_word v1.002 及 cxw_conv v3.505

· 版权申明: 本文引自《汉化新世纪》,如有版权疑问请及时联系本站,以便本站处理。

· 转载申明: 本文引自《汉化新世纪》[ 作者: 韦斯特·金],如需转载请直接联系原始作者,并请注明原始出处。

相关文章                                                                                发表评论 打印此文 关闭窗口

| 设为首页 | 加入收藏 | 联系我们 | 友情链接
Creative Commons License,创作共用协议(中文版)  署名 非商业性使用 禁止演绎
本站内容,除转载或版权特别申明的内容外,皆遵守 创造共用协议中文版之“署名-非商业性使用-禁止演绎 2.5 中国大陆”条款
This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 2.5 China License.
本网站内容源自汉化新世纪论坛的摘录和汉化新世纪成员的原创文章。
凡汉化新世纪论坛的文字皆默认为汉化新世纪与原作者共同拥有并授权发布。
如对本站发布文章有所异议请来信告知,我们将及时删除。
凡商业摘录本站文字请先与我们联系,本站将保留非授权商业发布的追究权利。
凡非商业摘录本站文字请明显注明出处和原作者,并不得改动,凡改动必先征求原作者同意。
苏ICP备05002283号