使用计算器显示中文

API钩取技术中有一种是通过注入DLL文件来钩取某个API的, DLL文件注入目标进程后,通过修改IAT来更改进程中调用的特定API的功能。向计算器进程插入用户的 DLL文件,钩取IAT的user32.SetWindowTextW() API地址。负责向计算器显示文本的SetWindowTextw() API被钩取之后,计算器中显示出的将是中文数字,而不是原来的阿拉伯数字。

这里我就手动实现一下,不写代码实现了,毕竟编程太菜,一写又是好久。好了,现在来说下过程,先来查查SetWindowTextW()这个API。它拥有2个参数,第一个参数为窗口句柄(hWnd),第二个参数为字符串指针(IpString)。其中,我感兴趣的是第二个参数字符串指针(IpString),钩取时查看字符串(IpString )中的内容,将其中的阿拉伯数字更改为中文数字就行了。(原理就是这么简单,是不是很意外)

使用计算器显示中文

在操作之前,先做点准备工作,准备好你要显示的文本内容,然后转换成对应的unicode编码。这里我准备了一个文本:测试成功

使用计算器显示中文

然后打开计算器,使用OD附加一下。在命令行给API下断 bp SetWindowTextW ,然后开始运行。

使用计算器显示中文

点击计算器6,发现OD断下来了,继续运行,直到6这个参数入栈,这时我们可以看到它存放的地址是0x46C3D0,我们直接修改就好了。

使用计算器显示中文

由于X86系列的CPU采用小端序标记法,所以覆写时要逆序写入。记住,字符串结尾得是0,所以我多写了两个00,写入后如下:

使用计算器显示中文

结果:

使用计算器显示中文