需求
稣是驱动开发,所以使用的 Windows 几乎都处于测试模式。测试模式会在桌面右下角显示 Testing Mode 字样的水印。这水印只有在首次进入测试模式时有用,其它时候十分多余,所以,把它去掉吧!
理论
这水印是 explorer.exe 调用 SHELL32!CDesktopWatermark::s_DesktopBuildPaint 画的。
所以,只要在这个函数开头写一个 ret 指令,即可使其不画任何东西。
实践
1. 附加到 explorer.exe
打开 WinDbg,按 F6,或者点菜单 File - Attach to a Process...,然后找到 explorer.exe,使用非入侵方式附加。
可以按进程名排序,比较容易找到哦!

注意:需勾选 Noninvasive,否则退出调试时,explorer.exe 也跟着重启了。
2. 确认目标函数的地址
输入命令:
1 | x SHELL32!CDesktopWatermark::s_DesktopBuildPaint |
稣机器上的输出为:
1 | 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 | ed 00007ffa`38bdfcc8 c3 |
回到桌面,确认右下角的水印是否消失,可能需要刷新才会消失。
确认没问题后,输入 q 退出调试,大功告成。
限制
当 explorer.exe 重启后,水印会再出现。
如果您使用微信,也可以关注公众号 UMU618,在公众号文章里评论。