Защита процесса от удаления.

Тема в разделе "WASM.WIN32", создана пользователем nickkadrov, 9 авг 2007.

  1. pushick

    pushick New Member

    Публикаций:
    0
    Регистрация:
    22 мар 2007
    Сообщения:
    95
    А смыслу? Специфика приложения такова, что оно всегда будет чем-нибудь палиться, и эта же специфика освобождает это приложение от тех, кто любит снимать антивирусы и прочую лабуду. Да кому такое надо? ;)
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Почему, если поток инициировал IRP, который никогда не завершится (deadlock или бесконечный цикл в обработчике), то такой поток прибить нельзя ) Пробовал уже :)
     
  3. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Я тоже пробовал. Нельзя.
    Причем deadlock on NtQueryObject - глюк, а невозвращенный IRP - фича.
     
  4. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Провел я небольшое исследование по поводу того, что процесс имеющий окно наиболее уязвим:

    Как я уже говорил, любая функция, работающая с окнами вызывает неэкспортируемую ValidateHwnd, которая получает pWnd по hWnd. Перехватывать ее геморойно, пришлось бы патчить все процессы. Но есть другой выход - ValidateHwnd вызывает NtUserValidateHandleSecure, которую можно перехватить в shadow таблице. NtUserValidateHandleSecure принимает на стеке два параметра, последний из которых hWnd. Она возвращает 1 в случае успеха и 0 в случае неудачи. Если возвращать 0, то ValidateHwnd возвращает 0 и устанавливает LastError в INVALIDE_WINDOW_HANDLE. Следовательно ни одна функция, работающая с окном работать не будет и дыра в безопасности процесса, связанная с наличием окна, прикроется раз и навсегда.

    Воть...
     
  5. Atlantic

    Atlantic Member

    Публикаций:
    0
    Регистрация:
    22 июн 2005
    Сообщения:
    322
    Адрес:
    Швеция
    Twister
    А сам-то процесс после такого изврата со своим окном сможет работать?
     
  6. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Мы сейчас с EP_X0FF на этим работаем. Позже отпишусь...
    Нужно в хуке фильтровать процессы...
     
  7. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Вообщем, дело обстоит вот как:

    При подобном перехвате окно, если оно главное, перестает появляться на таскбаре. Так же наблюдаются непонятки с перечислением окон в системе (их становится гораздо меньше). Но желаемый эффект достигается - окна не видно и его нельзя закрыть. Так что если проявляющиеся баги не важны, метод можно смело юзать. Вот код обработчика NtUserValidateHandleSecure:
    Код (Text):
    1. NewNtUserValidateHandleSecure PROC
    2.     mov     eax, dword ptr[esp + 4]
    3.     mov     ebx, dword ptr[protected_hwnd]
    4.     .if     eax == ebx
    5.         invoke  PsGetCurrentProcessId
    6.         mov     ebx, dword ptr[protected_pid]
    7.         .if     eax != ebx
    8.             xor     eax, eax
    9.             mov     dword ptr[esp + 4], eax
    10.         .endif
    11.     .endif
    12.     jmp     dword ptr[_NtUserValidateHandleSecure]
    13.     ret
    14. NewNtUserValidateHandleSecure ENDP
     
  8. EP_X0FF

    EP_X0FF New Member

    Публикаций:
    0
    Регистрация:
    13 авг 2006
    Сообщения:
    450
    Однако это не отменяет возможность брутфорса по кэшу окон. Вообще от этого метода защиты больше глюков, чем пользы и в реальности он слабо применим, но разумеется все желающие могут попробовать. И окно по-прежнему видно в Alt+Tab.
     
  9. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы