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

句柄降权#

通过设置进程内核对象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 @   怎么可以吃突突  阅读(769)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示
主题色彩