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的代码:
发布评论