Запускаю приложение под OllyDbg а затем пытаюсь убить его из Диспетчера Задач и Process Explorer. Ничего не получается. Почему это происходит?
Все получается, просто 1) Оля не сразу на это реагирует, если стоит на брикпойнте - нажми F8 и сразу получишь "Process terminated", 2) процесс завершается, но остается висеть в памяти и в диспетчере, пока Оля не закроет все его хэндлы
Хороший, годный и понятный вопрос А NtRemoveProcessDebug никто не отменял, также как и завершение отладчика.
Я имел ввиду можно ли сделать на этом принципе защиту от завершения, чтобы система думала что приложение под отладкой и не позволяла завершить процесс.
solvitz В обшем случае нет, в частном да. Есть в оси баг основанный на синхроатаке, но сие не портабельно, посему нет смысла юзать. Защита так не делается.
кусок из функции завершения потока: Код (Text): cmp [r12+1F0h], rsi jz short loc_1403524E6 test byte ptr [rdi+448h], 10h jnz short loc_1403524E6 cmp r13b, sil jz short loc_1403524DF mov ecx, [r12+444h] call DbgkExitProcess jmp short loc_1403524E6 loc_1403524DF: mov ecx, ebx call DbgkExitThread loc_1403524E6: cmp [r12+1F0h], rsi - проверка значения DebugPort в EPROCESS, в случае если не NULL: DbgkpSendApiMessage -> DbgkpQueueMessage -> KeWaitForSingleObject пока отладчик не обработает (обрабатывает предыдущее событие) поток висит на ожидании, поэтому как писали выше F8 и все закроется.