2024年5月15日发(作者:)

重读老文章系列:让GetWindow找不到邪恶窗体

Theoldnewthing

通过win32k!sst的hook可以简单的保护自己的窗体,但是无法通关GetWindow

的枚举大法。这里介绍一种让GetWindow不能找到我们的方法,首先我们来看一下

GetWindow的代码

在深入看一下__GetWindow的代码,会发现__GetWindow从ValidateHwnd获得未知结构指

针中根据参数uCmd来提取出其他的hwnd来。不难从代码发现ValidateHwnd获得结构是一

个类似链表项指针,联想win32k里的PWND结构,不难发现其实user32里这个ValidateHwnd

其实就是PWNDFASTCALLValidateHwnd(HWNDhwnd)的ring3版本

从而我们想起来在Ring0里Pwnd的那些事儿,于是突发奇想,如果将我们自己的pwnd从

各种wnd的各种可能上消除是否就获得了XXOO了呢?

结合实际用GetWindow的都是基于那套方法取GW_HWNDNEXT或者GW_CHILD来

XXOO,于是又发现新大陆了~

我们就不重复那套全宇宙都知道的用GetWindow遍历的代码了~

这里我们通过Ring3的代码直接确定需要处理NEXT或者CHILD的窗体HWND,然后交给

驱动去处理(就是通过GW_HWNDNEXT遍历一下发现能GW_HWNDNEXT到自己要隐藏

的hwnd的HWND就通信给驱动处理一下)。具体的代码就不写了~各位自己写写看看了哦~

PS:

XP下定义pwnd的代码

不过值得注意的是在GW_HWNDNEXT的cmd的处理

Ring3下使用validatehwnd的代码: