Завершение защищенного антивирусного процесса

Я использую антивирус ESet, и недавно его графический интерфейс egui.exe завис и занимал 50% ресурсов ЦП (т. е. 100% ресурсов одного ядра). Удивительно, но я обнаружил, что не могу убить его, даже с включенной привилегией отладки.

Теперь мне любопытно: как они реализуют такую ​​защиту, и есть ли способ убить ее, кроме написания драйвера ядра?

Процесс egui.exe запускается под обычным пользователем (не администратором), и я пытаюсь его убить различными способами, используя учетную запись администратора. Вот что я пробовал.

  • вы не можете убить его из диспетчера задач
  • вы не можете убить его с помощью pskill
  • вы не можете убить его с помощью проводника процессов, и вы не можете подключить к нему отладчик

Затем я начал программировать и обнаружил, что:

  • под непривилегированным пользователем вы можете открыть его с доступом PROSESS_TERMINATE, но фактический вызов TerminateProcess() завершается с ошибкой 5.

  • под учетной записью администратора вы можете открыть его с любыми правами доступа, которые вы хотите (после включения привилегии отладки конечно), но затем вызовы TerminateProcess(), GetKernelObjectSecurity(), SetKernelObjectSecurity() завершаются с ошибкой 5.

Это определенно указывает на какую-то возню, помимо простой установки DACL процесса, поскольку, если бы Terminate не было в DACL , вы не сможете сразу открыть процесс с PROCESS_TERMINATE.Действительно ли они перехватывают вызовы Win32 API? Если да, то как? Прошло некоторое время с тех пор, как я занимался низкоуровневым системным программированием, так что простите мое невежество.

18
задан Ivan Krivyakov 26 June 2012 в 17:38
поделиться