保护进程不被其他用户层进程结束的方法
句柄降权#
通过设置进程内核对象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结构,没有其他导出函数可以使用。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】