内核反截图思路


内核反截图思路流程

0x0 提要

NtUserSetWindowDisplayAffinity 在win32kfull.sys

ValidateHwnd 在 win32kbase.sys

0x1 分析NtUserSetWindowDisplayAffinity

1

先把传入的句柄通过ValidateHwnd转换成驱动对象,然后调用SetDisplayAffinity

0x2分析SetDisplayAffinity

2

分析如图,最后是通过调用ChangeWindowTreeProtection来改变

0x3 怎么找到函数地址思路

1.找到win32kfull.sys的地址,再找到NtUserSetWindowDisplayAffinity的地址

再找到SetDisplayAffinity,最终找到ChangeWindowTreeProtection

2.怎么找win32kfull.sys,通过ZwQuerySystemInformation模拟任务管理器一样遍历找到

3.有了win32kfull.sys基址,通过特征码查找后续的函数地址

0x4 ChangeWindowTreeProtection需要的参数

1.先获得传入的句柄

2.同理上面的思路获得win32kbase.sys,遍历得到ValidateHwnd的基址,将句柄转换成驱动对象

3.定义ChangeWindowTreeProtection参数的结构体

6

0x5 怎么找到我们需要反截图的进程和APC注入

1.同理上面通过ZwQuerySystemInformation遍历找到需要反截图的进程

2.同理通过遍历找到winlogon的PID(管理用户登录登出),为什么要找到这个,为了获得系统EPROCESS结构体 通过PsLookupProcessByProcessId。然后使用KeStackAttachProcess附加到我们想要反截图的进程上。

0x6 思路整理总结

1.先写一个R0-R3的通信

2.R3工作:通过FindWindow查找到进程句柄,然后传入dwAffinity的值。

3.R0工作:通过APC注入到进程,然后改变进程的ChangeWindowTreeProtection

4.实现跳过各个调用函数,直接改变最后的保护


文章作者: Blue
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Blue !
评论
  目录