您的位置:首页 > 其它

用TRW改字体一点心得

2007-10-20 19:31 363 查看
  好久没玩汉化啦,偶有兴致到新世纪一逛,看有没新好东东。发现JINGULONG老兄的FONTSET人气不错,说实话,这类工具偶是不用的。原因嘛,程序是死的,人是活的,用没有智商的软件去应付千变万化的程序心里总有些不踏实吧?还是自己手改来得实在,虽然麻烦一些可也更灵活一些,也不会被那些破杀毒软件起疑心:)还能顺便提高一下自己的水平,何乐而不为呢?不过呢,爱试用软件乃我一大嗜好(看着软件不run一下就有点手痒,贱吧?因为这我可没少吃病毒、木马的苦头,咳我这人就是不吸取教训)所以呢也不管什么3721啦,gogogo!!!down一个回来,接下来当然是解压缩run之了,论坛上说在“酒吧”上有运行问题,偶可没发现(咪咪发现啦,可能偶不喜欢装些乱七八糟的东东吧:)两个例子也改好啦,一点问题都没有,jingulong高!实在是高呀。且慢,为啥明明两个软件一样的效果改法还不相同呢?突然我记起梁老大的推波助澜来啦,当时只记得梁兄给jingulong出题也懒得去碰,现在找上门来啦岂有不碰之理?不碰不打紧,一碰碰出问题来啦。差点没晕死,首先一个倒霉的便是fontspy,这倒霉蛋啥也没拦截到,下一个倒霉的便是大名鼎鼎的w32dasm有没有搞错?不但没什么createfonta,就是creatfontindirecta与getstockobject也一齐失踪,在输入函数中也没有:(,我就用exescope看输入表,一点影子都没有,就是那孤苦伶仃的几个小函数,郁闷ing。555……失望呀,看来偶这智商连个小小的软件都不如啦!得,找个地方以头抢地尔去吧。
  d32dasm倒下啦,我到记起还有个与之齐名的国人之骄傲trw2000来啦(谁让咱是伟大的中国人哪)虽然偶还不会用,但也凑合着用吧,说不定瞎猫还能碰个死耗子的说。一试不打紧,bpx createfonta,bpx createfontindirecta,bpx getstockobject,然后G呵呵这些可爱的API在向我招手呢,既然找到了就好办啦,我手舞足蹈了一个半小时才想到为啥本来这些在输入表中没有的API在TRW2000下就现身了呢?百思之下才想到DLL是可以动态调用的(Kao,这还用百思,看来偶智商确实出问题啦!)梁兄肯定用的是动态调用啦,输入表中的loadlibrarya就是证明!梁兄也真TM厉害,一个小小的程序竟害的我晕了半天:不但API被藏了,里边是一个call ebx接着一个call esi,W32DASM算白学啦,这没用花指令的东东比用了花指令的还妙:(看来如果让梁兄写加密狗的话,咱们这些菜鸟CREAKER们也就甭混啦!废话不说了,先休息一下,整理一下思路写一篇心得出来(新世纪现在还没有此类的文章吧?)虽然这个比较简单,似乎不值得写,也没太必要写,但不写写总闷的慌(一个字,贱!)就权当陪大家练练TRW2K的使用吧。
   用TRW2000修改软件的字体
  先说说用到的工具:TRW2000自然必不可少,剩下的就是还要一款HEX编辑器,UE,WINHEX,HWS随便用只要用着顺手,我用的是HEDIT,最后就是最好有个偏移量计算器,就用梁兄编的那个吧。
  首先当然是打开TRW2000载入文件啦,说起TRW2000可是咱中国人的骄傲啦……(此处省去千余字赞美之词)打开后点击“浏览”找到程序,后确定,然后点“载入”紧接着便出现了TRW2000的工作界面,图我就不截啦,反正你的机器上就有接下来当然是下断点啦,一个一个来,首先是bpx createfonta<回车>然后g<回车>///(bpx命令是下断点,即运行到该API处停下来,g即为go命令,相当于快捷键F5,是运行该软件)怎么样?断在createfonta上了吧?咦怎么不是在软件的领空,而是在GDI32的领空呢?这也是一般不用TRW改字体的原因了,因为TRW是从底层中断的(要不也拦不下来了)当然中断在包含该API的DLL中了,不过也没什么,返回来不就结了?按一下F12(这个命令的作用是让软件停在RET处,RET不就是返回主程序吗?)再按一次F8(这命令是单步执行一条指令,刚才挺到RET了,再执行这个RET不就返回来了)回到了程序的领空,呵呵,按住CTRL,再按上箭头,你会发现是标准的CFA调用,怎么改嘛……该不用我嚼舌头了当然是语系,宋体,F4了。接下来是createfontindirecta,其实这软件很小,除了设置字体别也没什么功能,在上边的操作后直接按F10(单步执行,与F8相似,不同是碰到CALL不会跟进去)一会儿所有的字体设置就都出来啦,不过这样对付别的软件就同大海捞针了,还是下段点来得通用,
BC*<回车>////清除所有断点然后
bpx createfontindirecta<回车>//在cfia(createfontindirecta)上下断点
g<回车>///go运行,程序断在了CFIA处然后故技重演
F12
F8 ///又回到程序领空啦,
CTRL+(上方向键)///往上翻看到有个PUSH XXXXXXXX(是什么记不清啦)
然后就是:
D XXXXXXXX ///查看XXXXXXXX处内容,呵呵这不是LOGFONT结构么?是E2FFFFFFFF……
///说明字体大小是E2,我们改成F4就可以啦!怎么改呢?在TRW2K中是没法改
///的这就用到HEX编辑器了,先在TRW中向上翻不远你会发现有一句MOV XXX,E2这一句当然是把E2写到LOGFONT中去了,只要改成MOV XX,F4就OK啦,记下这个指令的偏移量,填入偏移量转换器中的“虚偏移”让他给你算出偏移量,然后到软件中定位修改就可以了,另一个办法是在TRW中输入CODE ON命令(打开代码窗口),抄一段代码下来直接查找十六进制,找到后修改就可以了,在内存窗口中还可以看到字体是ARIAL,找到它改成宋体就成了,其实不改也无所谓的说。初学者可能不会退出TRW2K我就说说,我一般是先BD* 然后X 或g 就退出来了。下一次进去后再BE* 恢复断点就可以了(我懒,懒得去重新下断点:()你也可以
用 BL命令查看断点列表。
  接下来轮到GETSTOCKOBJECT受摧残了,当然还是bpx getstockobject
g<回车> ///断下来,我再F12,F8……等等,按了一下F12软件咋运行了???我晕
bd*<回车>
x<回车>//退出TRW
重新载入软件,be*<回车>//恢复断点
g<回车>//断下来后不敢F12了,按F10吧,才运行两步竟然来了RET,磔磔怪事呀,刚才F12怎么没停这儿那,我懒得管他了,按一次F8先,呵呵,回到了程序领空啦,向上面一样记下这个地方的位置(地址,代码均可)再找下一个,一会儿就找完啦,然后用HEX编辑器定位修改就成了把这一句前边的6AXX,全改成6A11,保存就行了
还有一点值得指出,这样改CREATEFONTINDIRECTA的字体,并没有改成宋体,不过我觉得对于英文反而更好看一些,只要不出乱码,这样改还是值得提倡的,还有就是,一般LOGFONT的赋值也一般没这么直接,一般不会直接MOV XXXXXXXX,E2的,这样的话,你可以下E2的地址的内存断点方法是bpm [地址]这样程序就会断在修改LOGFONT的地方啦,怎么改就你说了算啦。还有一点,就是,如果CALL CFIA的前一句是PUSH了EAX,那么,DEAX一般是不会到达LOGFONT的地址的,为什么呢,因为现在已经执行了这个函数,函数的返回值早就把原来EAX中的地址冲掉了,当然就过不去,可以退出TRW再中断一次(不要向下运行),这时堆栈中的值就是LOGFONT的地址了,或者直接下bpx CFIA地址 ,断下后直接DEAX也可。
   呵呵,累死我了,写到这儿吧,肯定好多地方写的不太清楚,如果你还不太会用TRW2000尽量按我写的顺序跟踪一下,如果有问题,可以回帖问,不过这几天我罕有上网了,好在新世纪论坛上的炎炎,SIMON,NEWWISH,天秤雨,飞速等都是汉化高手加破解高手,他们的TRW2000肯定用的比我还溜,就去麻烦他们吧:)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: