我正在使用 ESet 防病毒软件,最近它的 GUI 前端 egui.exe 挂起,占用了 50% 的 CPU(即一个内核的 100%)。令人惊讶的是,我发现我无法杀死它,即使启用了调试权限。
现在我很好奇:他们是如何实现这样的防御的,有没有办法在不编写内核驱动程序的情况下杀死它?
egui.exe 进程在普通用户(非管理员)下运行,我尝试使用管理帐户以各种方式杀死它。这是我尝试过的。
- 你不能从任务管理器中杀死它
- 你不能用 pskill 杀死它
- 您不能使用进程资源管理器杀死它,也不能将调试器附加到它
然后我开始了一些编程,发现:
在非特权用户下,您可以使用 PROSESS_TERMINATE 访问权限打开它,但对 TerminateProcess() 的实际调用失败并出现错误 5。
在管理员帐户下,您可以使用所需的任何访问权限打开它(当然在启用调试权限之后),但随后对 TerminateProcess()、GetKernelObjectSecurity()、SetKernelObjectSecurity() 的调用都失败并出现错误 5。
除了设置进程 DACL 之外,这肯定指向某种摆弄,因为如果 Terminate 不在 DACL 中,您将无法首先使用 PROCESS_TERMINATE 打开进程。他们实际上是在拦截 Win32 API 调用吗?如果是,那么如何?我已经有一段时间没有做低级系统编程了,所以请原谅我的无知。