检测请求“ services.exe”以在Windows中启动服务的应用程序

时间:2018-07-31 07:23:13

标签: windows service windows-services win32-process windows-kernel

作为我项目的一部分,每次使用WMI类Win32_ServiceEventSink启动或停止服务时,我都会收到事件通知。 我想检测请求“ services.exe”以启动特定服务的应用程序。

到目前为止,我尝试在任何进程与“ services.exe”之间进行Monitoring ALPC调用,并且每次进程使用{与“ services.exe”进行通信(发送/接收)任何信息时,都会获得Message_ID。 {3}}。我想知道这些消息是什么,以便可以解码StartService()或StopService()过程。

是否可以检测到哪个应用程序启动/停止服务?

1 个答案:

答案 0 :(得分:1)

我认为,最好的方法是使用PsSetCreateProcessNotifyRoutine/Ex/Ex2内核模式回调从内核模式开始。


如果要使用PsSetCreateProcessNotifyRoutine,则收到的信息将少于使用内核模式回调的扩展版本(例如Ex)的信息。但是,您仍然可以通过使用PsLookupProcessByProcessId获取指向_EPROCESS结构的指针,然后依靠{{1}来查询诸如父进程(或正在创建的进程)的图像文件路径之类的信息。 }}(未记录,但是默认情况下可以在WDK中访问)。

SeLocateProcessImageName例程将在内部依赖于该SeLocateProcessImageName结构,因为Windows内核在那里都跟踪磁盘上的过程映像路径之类的信息。


如果您要使用Ex版本的内核模式回调,则无需进行上述操作。该例程的Ex版本比非Ex版本更新。

回调例程的例程原型为:

_EPROCESS

如上所示,您获得了指向VOID CreateProcessNotifyRoutineEx( PEPROCESS Process, HANDLE ProcessId, PPS_CREATE_NOTIFY_INFO CreateInfo ) 结构的指针。然后,您可以访问_PS_CREATE_NOTIFY_INFOImageFileName字段以过滤CommandLine(确保正确过滤以免被流氓副本捕获-请确保完整路径指示其为真实路径)并深入了解调用它的原因(如果此类信息是通过命令行公开的……我不记得了-尽管如此,您仍然可以检测到它的创建并知道是谁产生的)。

要确定负责services.exe的流程创建操作的父级(例如,如果它依赖于服务管理器而又导致了它的产生),则可以依靠{{1} }字段(也位于services.exe结构下)。 ParentProcessId技巧将在此处完美运行。


_PS_CREATE_NOTIFY_INFO未记录,因此是常规原型:

SeLocateProcessImageName

至少具有最新的Windows 10 WDK,默认情况下已可用。不过,如果您愿意,可以将动态导入与SeLocateProcessImageName一起使用。


资源:

https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/content/ntddk/nf-ntddk-pssetcreateprocessnotifyroutine

https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/content/ntddk/nf-ntddk-pssetcreateprocessnotifyroutineex

https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/content/ntddk/nf-ntddk-pssetcreateprocessnotifyroutineex2

https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/content/wdm/nf-wdm-mmgetsystemroutineaddress

https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/content/ntifs/nf-ntifs-pslookupprocessbyprocessid

https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/content/ntddk/ns-ntddk-_ps_create_notify_info