Я использую антивирус ESet, а в последнее время его внешний интерфейс egui.exe висел и принимал 50% процессор (т.е. 100% одного ядра). Удивительно, но я обнаружил, что я не могу его убить, даже с включенной поддержкой отладки.
Теперь мне любопытно: как они реализуют такую защиту, и есть ли способ убить ее, не написав драйвер ядра?
Процесс egui.exe выполняется под обычным пользователем (не администратором), и я пытаюсь убить его различными способами с использованием учетной записи администратора. Вот что я пробовал.
- вы не можете убить его из диспетчера задач
- вы не можете убить его с помощью pskill
- вы не можете убить его с помощью проводника процессов, а также не можете подключить к нему отладчик
Затем я начал программировать и обнаружил, что:
-
у не-привилегированного пользователя вы можете открыть его с доступом PROSESS_TERMINATE, но фактический вызов TerminateProcess() завершился с ошибкой 5.
-
под учетной записью администратора вы можете открыть его с любыми правами доступа, которые вы хотите (после включения привилегий отладки, конечно), но затем вызовы TerminateProcess(), GetKernelObjectSecurity(), SetKernelObjectSecurity() завершаются с ошибкой 5.
Это, безусловно, указывает на какую-то работу, за исключением установки DACL процесса, поскольку если Terminate не был в DACL, вы не смогли бы открыть процесс с PROCESS_TERMINATE в первую очередь. Действительно ли они перехватывают вызовы API Win32? Если да, то как? Прошло некоторое время с тех пор, как я сделал низкоуровневое системное программирование, поэтому простите мое невежество.