保护进程不被其他用户层进程结束的方法

句柄降权

通过设置进程内核对象EPROCESS的Object钩子进行句柄降权,没什么好说的。

设置系统关键进程

调用RtlSetProcessIsCritical/NtSetInformationProcess设置EPROCESS. BreakOnTermination。调用TerminateProcess时内核层调用PspTerminateAllThreads会判断目标进程的EPROCESS. BreakOnTermination是否为0,如果不为0就蓝屏。

windbg查看发现smss.exe,csrss.exe等一些系统进程会默认设置此值。

通过

PPL保护

通过设置进程EPROCESS.Protection实现PPL保护,非PP/PPL保护的进程要想结束PP/PPL保护的进程要经过严格的权限限制,一般都是不允许申请PROCESS_TERMINATE权限的。

EPROCESS.Flags3.DisallowUserTerminate

EPROCESS.Flags3.DisallowUserTerminate标志可以防止用户进程获取被保护进程的PROCESS_TERMINATE权限,


此标志是PspAllocateProcess内部函数设置的,通过判断参数CreateFlags的值决定是否设置此标志。貌似只有Hyper-V虚拟机的vmmem.exe(用户虚拟机进程和内存的管理)创建时才会设置此标志(VmCreateMemoryProcesses)。

手动设置此标志需要解析EPROCESS结构,没有其他导出函数可以使用。

posted @ 2022-12-15 17:10  怎么可以吃突突  阅读(549)  评论(0编辑  收藏  举报