它将输入的字符都保存为UTF-8,显示时却使用了 CP_ACP = 0 的代码页,故乱码。
方法如下:
1、打开 x32dbg,设置选项如下:
2、打开文件,停在入口断点处:
3、CPU窗口中单击右键,选择搜索 > 当前模块 > 跨模块调用
4、在搜索中输入MultiByte,只列出转码函数 WideCharToMultiByte 和 MultiByteToWideChar
5、查看每个转码函数,发现都是Pash 0,即代码页参数值都是 0,即 Get_ACP。系统的默认值,简体中文就是 936,繁体系统就是 950,英语系统就是 1252
6、最后一个 WideCharToMultiByte 的后面,发现有 push FDE9,说明输入了 UTF-8 的编码
7、再查看后面又发现有 push FDE9,同样说明输入了 UTF-8 的编码
8、把发现的二处 push FDE9 改成 push 0 并 nop 掉多余的三个字节
9、生成补丁,把修改后的文件 Dump 出来,大功告成。