WinMD5 v1.2 这个工具我想大家没有不熟悉的吧?在98下显示正常,而在XP下着实难看。引别人一句话:“程序是活的,而工具是死的”,所以也就不想用AutoFontSet III之类的修改了。
闲下无事翻出了以前雅枫写的那篇《用替换函数法修改软件字体》的帖子,问题终于迎刃而解。为和我一样的小菜们(不太会用OllyDbg)方便,特将过程重新泡制如下:
当然,前题是该软件中有CreatFontIndirectA和GetStockObject
用OllyDbg(我用的是聆风听雨汉化的1.09d)载入,在 反汇编的代码显示区 的快捷菜单中点击[搜索/全部交换调用],先找到CreatFontIndirectA的位置,如下图:
双击,可看到push及call的位置:
用同样的方法,在 反汇编的代码显示区 的快捷菜单中点击[搜索/全部交换调用],在新窗口中找到GetStockObject,并按F2设断
按F9使用程序运行
关闭程序,发现汇编代码返回到如下位置,并记下函数入口 7C92EB94:
重新用OD载入程序,找到CreatFontIndirectA ,选中call语句,并按键盘上的空格键,将汇编代码改成 call 7C92EB94,如下:
点击[汇编],代码已经修改为 如下:
最后一步了,用UltraEdit打开程序,查找
56FF7424088BF1FF1530C04100 ,将其修改为:
6A11E8C8A4527C909090909090
至此,字体修改完毕,修改后的汇编如下:
此方法在WinXP上通过,Win98上可能会有所不同。
:00402DC5 8D4A31 lea ecx, dword ptr [edx+31]
:00402DC8 51 push ecx
:00402DC9 E8DAF1FFFF Call 00401FA8
雅枫得到的是如下代码:
00402DC5 6A 11 PUSH 11
00402DC7 E8 2CF2FFFF CALL <JMP.&gdi32.GetStockObject>
00402DCC 90 NOP
00402DCD 90 NOP
我在Win98上得到的是如下代码:
00402DC5 6A 11 PUSH 11
00402DC7 E8 2AF2FFFF CALL <JMP.&gdi32.GetStockObject>
00402DCC 90 NOP
00402DCD 90 NOP
何解?