Почему нельзя завершить процесс находящийся под отладкой?

Тема в разделе "WASM.WIN32", создана пользователем solvitz, 21 фев 2012.

  1. solvitz

    solvitz Member

    Публикаций:
    0
    Регистрация:
    28 авг 2010
    Сообщения:
    86
    Запускаю приложение под OllyDbg а затем пытаюсь убить его из Диспетчера Задач и Process Explorer. Ничего не получается. Почему это происходит?
     
  2. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Потому, что процесс заблокирован отладчиком.
     
  3. solvitz

    solvitz Member

    Публикаций:
    0
    Регистрация:
    28 авг 2010
    Сообщения:
    86
    Подробнее можно? Как именно заблокирован? Можно ли такое сделать без участия отладчика?
     
  4. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Все получается, просто 1) Оля не сразу на это реагирует, если стоит на брикпойнте - нажми F8 и сразу получишь "Process terminated", 2) процесс завершается, но остается висеть в памяти и в диспетчере, пока Оля не закроет все его хэндлы
     
  5. LightMoon

    LightMoon New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2012
    Сообщения:
    73
    Хороший, годный и понятный вопрос :lol:

    А NtRemoveProcessDebug никто не отменял, также как и завершение отладчика.
     
  6. solvitz

    solvitz Member

    Публикаций:
    0
    Регистрация:
    28 авг 2010
    Сообщения:
    86
    Я имел ввиду можно ли сделать на этом принципе защиту от завершения, чтобы система думала что приложение под отладкой и не позволяла завершить процесс.
     
  7. LightMoon

    LightMoon New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2012
    Сообщения:
    73
    solvitz
    В обшем случае нет, в частном да. Есть в оси баг основанный на синхроатаке, но сие не портабельно, посему нет смысла юзать. Защита так не делается.
     
  8. movdqu

    movdqu New Member

    Публикаций:
    0
    Регистрация:
    16 сен 2009
    Сообщения:
    33
    кусок из функции завершения потока:
    Код (Text):
    1. cmp     [r12+1F0h], rsi
    2. jz      short loc_1403524E6
    3. test    byte ptr [rdi+448h], 10h
    4. jnz     short loc_1403524E6
    5. cmp     r13b, sil
    6. jz      short loc_1403524DF
    7. mov     ecx, [r12+444h]
    8. call    DbgkExitProcess
    9. jmp     short loc_1403524E6
    10. loc_1403524DF:                
    11. mov     ecx, ebx
    12. call    DbgkExitThread
    13. loc_1403524E6:
    cmp [r12+1F0h], rsi - проверка значения DebugPort в EPROCESS, в случае если не NULL:

    DbgkpSendApiMessage -> DbgkpQueueMessage -> KeWaitForSingleObject

    пока отладчик не обработает (обрабатывает предыдущее событие) поток висит на ожидании, поэтому как писали выше F8 и все закроется.