最近想研究一下开源的krkrz引擎,随便找了个krkrz游戏想试试能不能通过hook drawtext函数实现无视游戏的外挂文本提取及替换。
大体想法是hook掉drawtext这个用于实现文本输出的GDI win32API,然后截获将要输出的文本,并与磁盘上的文本比对,如存在可替换的文本就使用替换的文本输出,没有的话就保存未翻译数据。类似于CM3D2上那个注入主程序的Translation.Plugin。
现在的问题是开x64dbg直接下drawtext API断点断不到。
给搜索到的内存下访问断点,结果断到脚本处理上去了。追踪半天找不到固定用于渲染文本的子过程。
直接查源代码。。。
tTVPNativeBaseBitmap::DrawTextSingle和DrawTextMultiple都是调用TVPGetCharacter把文字和文字属性搞成一个结构体然后使用InternalDrawText去贴图。
然后就没有然后了,InternalDrawText函数里没看见用于输出的GDI的drawtext或者ID3DXFont::DrawText。
真是见鬼了。不会是直接帖纹理吧
谁知道krkrz默认到底是怎么输出文字的?
大体想法是hook掉drawtext这个用于实现文本输出的GDI win32API,然后截获将要输出的文本,并与磁盘上的文本比对,如存在可替换的文本就使用替换的文本输出,没有的话就保存未翻译数据。类似于CM3D2上那个注入主程序的Translation.Plugin。
现在的问题是开x64dbg直接下drawtext API断点断不到。


直接查源代码。。。
tTVPNativeBaseBitmap::DrawTextSingle和DrawTextMultiple都是调用TVPGetCharacter把文字和文字属性搞成一个结构体然后使用InternalDrawText去贴图。
然后就没有然后了,InternalDrawText函数里没看见用于输出的GDI的drawtext或者ID3DXFont::DrawText。
真是见鬼了。不会是直接帖纹理吧

谁知道krkrz默认到底是怎么输出文字的?