windows系统下Smss.exe加载win32k.sys过程详解
windows操作系统初始化
windows操作系统再初始化的过程中,当内核完全初始化而且各个组件也已经准备好后会加载一个个用户进程smss.exe(会话管理器),此进程会接着调用NtSetSystemInformation并传入SystemRegistryAppendStringInformation == 38参数加载win32k.sys这个模块,接着就会调用win32k.sys的DriverEntry入口。接着smss.exe便会启动Windows 子系统进程csrss.exe。
win32k.sys加载ShadowSSDT表
当smss.exe在加载win32k.sys模块后,win32k.sys这个模块会紧接着执行其模块入口DriverEntry,紧接着其会执行AddSystemServiceTable为系统增加一张ShadowSSDT表。我们可以在smss.exe刚刚加载win32k.sys是将ntoskrnl.exe所导出的KeAddSystemServiceTable给EAThook了,然后在我们自己的MyKeAddSystemServiceTable()中判断通过判断加载的表的基地址是否在win32k.sys模块地址范围中,如果不在证明不是正确的ShadowSSDT表。
关于win32k.sys所在地址有效性的问题
win32k.sys包含ShadowSSDT表,只要线程中调用GUI函数最后都会调用ShadowSSDT表中的服务。但并不是只有GUI线程才会将win32k.sys加载到内存中,参考教主的帖子是说win32k.sys模块的加载与会话有关,所以只要不是System和smss.exe(会话管理器不属于任意一个继承)进程其他任何一个进程都会加载win32k.sys。
我们看一下在System进程中win32k.sys模块的地址,发现确实是无效的。

所以如果我们想要在内核中修改win32k.sys模块(IAT_hook)就必须保证当前进程上下文不在System和smss.exe中,也就是需要将进程上下文切换到除了两个进程之外的任意一个进程地址空间中。
获得csrss.exe进程的PID
当我们需要IAT_HOOKwin32k.sys模块时可以将地址空间切换到csrss.exe进程地址空间中,再这之前我们需要先获得csrss.exe进程的PID,然后通过其PID得到对应的EPROCESS,然后切换到对应的进程地址空间中。一种获得csrss.exe的方法是通过枚举系统中所有的句柄然后,寻找名为"\Windows\ApiPort"的ALPC port句柄然后得到其对应的进程PID(csrss.exe进程会创建一个名为"\Windows\ApiPort"的ALPC port对象)。
HANDLE GetCsrssPid()
{
HANDLE Process, hObject;
HANDLE CsrssId;
OBJECT_ATTRIBUTES obj;
CLIENT_ID cid;
UCHAR Buff[0x1000];
POBJECT_NAME_INFORMATION pObjName = (PVOID)&Buff;
PSYSTEM_HANDLE_INFORMATION_EX Handles;
Handles = QueryHandleInfo(SystemHandleInformation); //通过调用ZwQuerySystemInformation获得所有的句柄信息返回SYSTEM_HANDLE_INFORMATION_EX结构体
if (!Handles)
return CsrId;
for (ULONG i = 0; i < Handles->NumberOfHandles; i++)
{
if (Handles->Information[r].ObjectTypeNumber == 21) //ALPC Port object
{
InitializeObjectAttributes(&obj, NULL, OBJ_KERNEL_HANDLE, NULL, NULL);
cid.UniqueProcess = (HANDLE)Handles->Information[r].ProcessId;
cid.UniqueThread = 0;
if (NT_SUCCESS(NtOpenProcess(&Process, PROCESS_DUP_HANDLE, &obj, &cid)))
{
if (NT_SUCCESS(ZwDuplicateObject(Process, (HANDLE)Handles->Information[r].Handle,NtCurrentProcess(), &hObject, 0, 0,DUPLICATE_SAME_ACCESS))) //将句柄复制到当前进程中
{
if (NT_SUCCESS(ZwQueryObject(hObject, ObjectNameInformation, ObjName, 0x100, NULL))) //传入参数ObjectNameInformation得到对象的名称信息
{
if (pObjName->Name.Buffer && !wcsncmp(L"\\Windows\\ApiPort", ObjName->Name.Buffer, 20))
{
CsrssId = (HANDLE)Handles->Information[r].ProcessId;
}
}
ZwClose(hObject);
}
ZwClose(Process);
}
}
}
ExFreePool(Handles);
return CsrssId;
}
ZwQuerySystemInformation的参数SystemInformationClass等于SystemHandleInformation(16),SystemInformation会返回SYSTEM_HANDLE_INFORMATION_EX结构体,其第一个NumbreOfHandles字段为获得的句柄的总数目,然后SYSTEM_HANDLE_INFORMATION数组为各个句柄的信息。
typedef struct _SYSTEM_HANDLE_INFORMATION_EX
{
ULONG NumberOfHandles;
SYSTEM_HANDLE_INFORMATION Information[1];
}SYSTEM_HANDLE_INFORMATION_EX, *PSYSTEM_HANDLE_INFORMATION_EX;
SYSTEM_HANDLE_INFORMATION结构包含了句柄的一些基本信息,例如所属进程PID等等。
typedef struct _SYSTEM_HANDLE_INFORMATION
{
ULONG ProcessId;
UCHAR ObjectTypeNumber;
UCHAR Flags;
USHORT Handle;
PVOID Object;
ACCESS_MASK GrantedAccess;
}SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;
到此这篇关于windows系统下Smss.exe加载win32k.sys过程详解的文章就介绍到这了,更多相关Smss.exe加载win32k.sys内容请搜索脚本之家以前的文章或继续浏览下面的相关文章,希望大家以后多多支持脚本之家!
相关文章
Windows 11系统里的广告越来越多,弹窗、推荐、提示层出不穷,简直让人抓狂!别急,今天我为大家带来一份超详细的教程,手把手教你如何关闭这些烦人的广告,让你的Win11清2026-04-18
电脑打印机状态错误怎么解决? 快速搞定Windows打印机状态错误的方法
当我们急需打印文件时,电脑右下角弹出的“打印机处于错误状态”或“无法打印”的提示,无疑会让人感到困扰和焦虑,这种“错误状态”看似复杂,但实际上多数问题并非源于硬2026-04-18
电脑网络受限怎么办? Windows提示网络连接受限的解决办法
昨晚加班到一半,突然发现右下角的网络图标多了个黄色叹号,提示“本地连接受限制”,下面我们就来看看解决办法2026-04-18
轻松保护你的电脑隐私! Windows系统如何设置动态锁功能
如果您希望在离开电脑时无需手动操作即可自动锁屏,Windows动态锁功能可通过蓝牙检测手机距离实现该效果,以下是设置此功能的具体步骤2026-04-17
保护电脑数据安全! Windows系统快速关闭磁盘默认共享方法
你可能还不知道,系统默认还开启了硬盘分区(如C盘、D盘)的共享功能,今天我们就来看看一键关闭Windows默认共享,保护电脑数据安全的设置方法2026-04-17
Windows预览窗口大小怎么自由调节? 电脑任务栏预览窗口设置方法
对于Windows系统的深度用户来说,文件预览功能无疑是日常操作中的得力助手,然而,系统默认的预览窗口大小可能并不完全符合每个人的使用习惯,今天,我就为大家带来一个技术2026-04-17
windows无法更改设置怎么办? 电脑不允许修改系统设置无问题的解决办法
想要调整一下系统设置,却发现无论你怎么点来点去,它就是不给你改!这可真是让人欲哭无泪啊!别担心,今天我就来给大家分享一些解决方法,让你的Windows系统设置恢复正常2026-04-17
如何启用项目复选框? Windows系统打开文件复选框设置的教程
Windows复选框,也称为项目复选框,允许您在文件资源管理器中轻松选择多个文件和文件夹,默认情况下,此功能在Windows中是禁用的,但您可以通过进行一些简单的自定义来快速2026-04-16
Windows系统如何设置DPI缩放? 屏幕DPI缩放设置全攻略
你是否遇到过这样的困扰:新买的4K显示器文字模糊发虚?手机屏幕图标小到看不清?这可能并非硬件问题,而是DPI设置在“捣乱”!本文将系统解析DPI设置原理与实操技巧,助你2026-04-16
微软放大招! 所有Windows镜像都将失效 强制执行阶段已到来
最近,微软在win11系统“设置-Windows安全中心-设备安全性”中新增了安全启动检查,由于一个不可忽视的“硬期限”到来,安全启动的旧证书要过期了2026-04-08



最新评论