无银第八哥【4】移除测试模式水印

需求

稣是驱动开发,所以使用的 Windows 几乎都处于测试模式。测试模式会在桌面右下角显示 Testing Mode 字样的水印。这水印只有在首次进入测试模式时有用,其它时候十分多余,所以,把它去掉吧!

理论

这水印是 explorer.exe 调用 SHELL32!CDesktopWatermark::s_DesktopBuildPaint 画的。

所以,只要在这个函数开头写一个 ret 指令,即可使其不画任何东西。

实践

1. 附加到 explorer.exe

打开 WinDbg,按 F6,或者点菜单 File - Attach to a Process...,然后找到 explorer.exe,使用非入侵方式附加。

可以按进程名排序,比较容易找到哦!

Attach to explorer.exe

注意:需勾选 Noninvasive,否则退出调试时,explorer.exe 也跟着重启了。

2. 确认目标函数的地址

输入命令:

1
2
x SHELL32!CDesktopWatermark::s_DesktopBuildPaint

稣机器上的输出为:

1
2
00007ffa`38bdfcc8 SHELL32!CDesktopWatermark::s_DesktopBuildPaint (private: static void __cdecl CDesktopWatermark::s_DesktopBuildPaint(struct HDC__ *,struct tagRECT const *,struct HFONT__ *,bool))

可见目标地址为:00007ffa`38bdfcc8。注意:您的机器上很可能不是这个地址!在下个步骤使用时,需要替换为您机器上的地址。

3. 修改目标函数

在 x64 上,ret 指令的机器码为一个字节 0xC3,所以修改的指令为:

1
2
ed 00007ffa`38bdfcc8 c3

回到桌面,确认右下角的水印是否消失,可能需要刷新才会消失。

确认没问题后,输入 q 退出调试,大功告成。

限制

当 explorer.exe 重启后,水印会再出现。

如果您使用微信,也可以关注公众号 UMU618,在公众号文章里评论。