游戏程序在使用CreateFontIndirectA选择字库时我大概的确是悟了,
但如果使用CreateFontIndirectW根据https://www.52pojie.cn/thread-1200805-1-1.html 小木曾雪菜
写的教程显然是不适用的
CreateFontW function如下
HFONT CreateFontW(
int cHeight,
int cWidth,
int cEscapement,
int cOrientation,
int cWeight,
DWORD bItalic,
DWORD bUnderline,
DWORD bStrikeOut,
DWORD iCharSet,
DWORD iOutPrecision,
DWORD iClipPrecision,
DWORD iQuality,
DWORD iPitchAndFamily,
LPCWSTR pszFaceName
);
与CreateFontA function的区别在于最后一项pszFaceName的类型
用x32dbg打开游戏主程序对CreateFontIndirectW下一个断点
一直运行至文本跳动,可以看到成功下断,跟到右下角那个地址去
往上找有关于dword的call
根据定义,这个call及其相似
此处有第一个问题:lfCharSet是哪个?
一眼望去,最有可能符合的是这一条,日文是0x80 中文是0x86
显然我们要想80改为86
我便是这样改了~
该游戏编码校验有明显特征
对程序搜索cmp al, 0x81,找到一条符合,进入
按照大佬的讲法,将部分内容更改,理论上应该是这个样子的
但是更改后经测试,文本依旧乱码,糟心啊~求大佬指点一下,还有哪个地方疏忽了
|