ну если ты в ядре нашел EPROCESS нужный, то делай аттач к нему и затирай всю его память, сам сдохнет потом.
slesh Читаю Вашу статью Inject DLL в Explorer из kernel-mode Ну хоть что-то появляется по теме! Остальные шифруются. Если можно, бросьте собранный драйверок по этой статье. А может с сорцами - если не жалко? Очень хотелось бы разобраться! Хотел по-запускать, по-собирать по кускам ... У самого опыта мало. Спасибо.
В условии задачи мы имеем некий неизвестный драйвер, который защищает этот процесс, бсоднуть может он.
haxorart Если драйвер бсоднет при исчезновения процесса - это PoC, ну как минимум DOS И вообще дыра размером в огромную ж. Вот так вот.
А разве такого нее может быть если мы пытаемся удалить из системы криво написанный вирус с огромной дырой в драйвере? Хотя метод можно использовать как последний рубеж.
haxorart А драйвер вам просто могут не дать выгрузить. Тогда Какой смысл убивать и маяться боясь уронить систему? Ребут и ищем гада из лафсиди. Удаляем. Как бэ - а что вам надо ? Просто убить процесс, или отрубить защиту процесса, или убить процесс и чтоб бсода небыло (зачем?). Кстати возможно если будет бсод - его можно будет избежать. Для этого понадобиться WinDBG и хорошие знания ядра. Можно восстановить ручками (попытаться по крайенй мере, ибо может там похерилось все, что только можно) трапфрейм и вернуть управление в ядро. Если же вы убиваете какую то HIPS - то вы бы хоть сказали какую.
Мой первый пост))) >Задача: есть процесс он невидим и зашищён от удаления драйвером. Предположим найти PID процесса и его EPROCESS мне удалось. Как можно уничтожить этот процесс или остановить его не снимая хуки и не выгружая сам драйвер? Какие методы существуют? Использовать DKOM или как? Пример процесса: касперский. (!!!)Пишу программу для поиска и удаления скрытых процессов в системе. Спасибо за внимание.
haxorart Ну вот вам посоветовали. А то, что ваше условие "не выгружая сам дров" само по себе является косяком - так как дров действительно может даже специально бсоднуть.
Да, тут предложили 3 очень хороших метода, за что людям большое спасибо. На счет невыгрузки драйвера пока начну с простого, далее как пойдёт(задачи должны быть выполнимы). Тема ещё жива только лишь потому, что может кто-нибудь предложит что-нибудь совсем оригинальное, т.к. мне кажется этот топик будет интересен не только мне.
Вообще PsTerminateProcess вызывает PspTerminateProcess. Искать можно из цепочки NtTerminateJobObject->PspTerminateAllProcessInJob->PspTerminateProcess. NtTerminateJobObject->PspTerminateAllProcessInJob: Тут небольшие сложности разные сигнатуры. К примеру: xp sp3 push 0 push [ebp+ExitStatus] push ebx call _PspTerminateAllProcessesInJob@12 win 7 push 0 push [ebp+ExitStatus] push [ebp+Event] call _PspTerminateAllProcessesInJob@12 то есть либо сигнатурным поиском ищем push 0 push [ebp+ExitStatus] а дальше либо дизассемблером либо сигнатурным поиском ищем адрес call'а. PspTerminateAllProcessInJob->PspTerminateProcess А дальше опять либо дизассемблером либо сигнатурным поиском ищем call _PsTerminateProcess@8 / call _PspTerminateProcess@8 test eax, eax Так как 1 вызывает 2ю этот метод должен работать. P.S. PspTerminateThreadByPointer ищется намного проще и всё в конечном счете сводится к ней.
Понизить IRQL, и создать бесконечно ожидаемое событие для потока This snippet will lower the IRQL (not nec unless in DISPATCH_MODE or greater, but safe if you're not sure). Create an event and then wait for it (infinitely). As the event never gets triggered, the thread will never run again *sniff ;(, poor thread*. If you do want it to run at a later time, simply trigger the event. (с) willcodeforfood, forum.exetools.com Code (Text): LARGE_INTEGER TotalTime = {0,0}; KeLowerIrql(0); KeInitializeEvent(&NonEvent, NotificationEvent, FALSE); status = KeWaitForSingleObject( &NonEvent, Executive, //Suspended, KernelMode, TRUE, &TotalTime );