从 Windows 驱动程序检测受保护的进程和关键进程

逆向工程 视窗 风袋 过程
2021-06-17 10:58:08

我有一个驱动程序,它通过在进程开始时使用 call 发送 APC 调用来篡改用户空间进程PsSetCreateProcessNotifyRoutine

我希望避免篡改任何对操作系统稳定性至关重要的进程,因为我的 APC 最终也决定终止该进程。

到目前为止,我已经使用PsIsProtectedProcessPsIsProtectedProcessLight来检测受保护的进程。

但是,似乎有一些过程,例如smss.execrss.exewininit.exe,被定义为关键过程,我也希望避免它们。

也许有人知道受保护进程和关键进程之间的区别,以及我如何从内核模式以编程方式检测关键进程(也许它在 EPROCESS 中有临时字段?)

谢谢,

1个回答

似乎正确的术语是关键系统服务来自用户空间的 API,但我找不到内核的任何东西。所以我快速查看了 RstrtMgr.dll,似乎该列表实际上是硬编码的......

对于流程:

  • system32\csrss.exe
  • system32\smss.exe
  • system32\lsass.exe
  • system32\wininit.exe
  • system32\logonui.exe
  • system32\services.exe
  • system32\winlogon.exe

对于服务(svchost.exe 的特定情况):

  • 经纪基础设施
  • DcomLaunch
  • LSM
  • 力量
  • RpcEptMapper
  • 服务端
  • 萨姆斯

可能有另一种方法可以实现这一目标。毕竟,如果这些进程之一被杀死,Windows BSOD。

编辑:这似乎nt!EPROCESS::BreakOnTermination是你要找的。真正的领域是nt!EPROCESS::Flags和面罩为0x2000。如果设置了此位,PspExitThread将 BSOD 与CRITICAL_PROCESS_DIED.