Мне надо защитить процесс в Win Vista от завершения с наружи. Другими словами, чтобы мог процеес завершиться только из нутри или системой при завершении! Вообщем не убиваемый процесс! Пытался это сделать через права. GetKernelObjectSecurity -> GetDacl -> AddDeniedAce -> SetDacl -> SetKernelObjectSecurity Через таск менеджер не удаляеться. Сначала обрадовался, но потом попробовал Процес Эксплорером, и он удалил Есть мысли как это сделать?
перехват NtOpenProcess тоже не решение: можно перечислить хендлы и найти среди них хендл интересующего процесса. Лучше сразу ZwQuerySystemInformation и ZwQueryInformationProcess. и лезть в ring0
он вообще через драйвер удаляет, насколько я помню. Перехватывать придется NtTerminateThread и NtTerminateProcess Там сделать ObReferenceObjectByHandle и сравнить EProcess->UniqueProcessId с нужным ProcessId. Если равны, вернуть ошибку. В чем прикол перехватывать NtOpenProcess я хз..
ExitProcess вызовет ExitThread, которая в конце концов вызовет снова ту же ZwTerminateThread. так что все ништяк
Great ну можна еще все потоки усыпить-чем не убийство, или в отладку взять. вощем хэндлы на процесс отдавать нежелательно.
nickkadrov 0/ Пробежаться по таблице хэндлов под юзермодом и сделать им всем NtDuplicateObject (DUPLICATE_CLOSE_SOURCE) с последующим NtClose 1/ Хук NtOpenProcess, NtOpenThread (SSDT) враги не должны получить хэндл процесса / трида никаким образом 2/ Чистить импорт до состояния только ntdll.dll/kernel32.dll это для следующей стадии 3/ Хук LoadLibraryExW внутри себя для отсеивания dllных паразитов и преведов от user32.dll, кернел мода 4/ Правка таблицы хэндлов под ядром. Для острастки можно ещё NtDuplicateObject прикрыть. нету хэндла, нет проблемы 5/ Перекрывать функции в Shadow таблице, какие не скажу, но их количество > 6 окно можно найти многими способами, прибить ещё большим количеством 6/ Рандомить все, что только можно чтобы не могли идентифицировать тебя 7/ Для кучу хук на NtTerminateProcess (EndTask упадет в таком случае) 8 и самое главное/ добавить совместимость с остальными программами, после всех этих извращений. И даже после всего этого существует, по меньшей мере несколько способов, которые прикончат твой процесс из-под юзермода. Я занимался написанием нескольких версий факми (задачи типа - "убей меня как-нибудь", по аналогии с крякми) и пришел к выводу, что полностью защитить оконный процесс практически невозможно. Совет: Либо перекрывай все, что только можно и превращайся в КАВ / HIPS, либо бросай эту стремную затею, либо отказывайся от интерфейса и работай в консоли / коммандной строке.
pushick А если защищенный таким образом процесс работает под restricted user'ом, и атакующий тоже, и винда пропатчена, хоть в этом случае есть гарантия? ЗЫ. Про прикол с PostThreadMessage(threadID, WM_QUIT, 0, 0) знаю, и как от него защититься тоже. А еще что-нибудь есть?
Решил в итоге так: Создаю 2 процесса, которые следят друг за другом. Если один умирает, то другой запускает его заново и наоборот. При этом один процесс только следит, а другой ещё и выполняет определённую задачу. Убить не получилось
Возможно. Однако в моем случае задача всегда состояла в защите/убийстве процесса, работающего в максимально агрессивной среде, где такие слова как патчи/restricted users неведомы. Это все можно перекрыть в Shadow таблице. Можно и в юзермоде. А какой у тебя способ? Способов полно - самый банальный брутфорс мессаджами окна жертвы. Atlantic тут же дал тебе лекарство от такой "крутой" защиты. Это ты у КАВа подсмотрел, да? Ну так там у них в разных версиях по разному. В пятой вроде как они свой процесс делали критическим-системным, чтобы при его снятии был БСОД. В семерке один процесс висит как сервис, проверяет существования пользовательского процесса и если его нет, запускает, а если убивают его, он перезапускается, т.к. это сконфигурированный должным образом сервис. Однако не стоит забывать, что при всем этом КАВ активно вздрючил sdt и shadow. Самые неубиваемые из юзермод процессы, это те, что не имеют окон, имхо.
pushick С PostThreadMessage все просто - тупо перехватываю в своем процессе PeekMessage и GetMessage, и фильтрую все мессаги WM_QUIT. А еще я как-то делал прикольный брутфорс - вызывал рандомно кучу keybd_event с такими параметрами, как Alt+Tab и Alt+F4, VK_RETURN, и все проги закрывались на ура.
Это точно. Например последний билд РкУ (3.7.300.503) уязвим из-за того, что одно окно у него все-таки есть (ну и еще кое из-за чего . Я уже отправил EP_X0FF очередную версию своего RkU bypass... А вообще, единственный неубиваемый процесс - повисший в deadlock'e на NtQueryObject (касаемо только WinXP).