Показать сообщение отдельно

  #7  
Старый 21.09.2008, 20:17
De-visible
Banned
Регистрация: 06.01.2008
Сообщений: 904
Провел на форуме:
4037638

Репутация: 1821


Отправить сообщение для De-visible с помощью ICQ
По умолчанию

Цитата:
Сообщение от SlyBit  
Ponchik

Тебе нужно перехватить момент создания процесса (пишешь библиотеку внедряемую во все процессы или драйвер). Упрощенно схема создания процесса выглядит так:
1) Открывается ехешник
2) CreateThread - cоздается первый поток нового процесса (он приостановлен)
3) CsrClientCallServer - происходит инициализация процесса, в этот момент он получает идентификатор.
4) ResumeThread - возобновляется выполнение первичного потока, завершается инициализация процесса.

Следовательно тебе нужно перехватывать ZwCreateThread и в ней проверять ID родителя, если он отличается от текущего процесса (GetCurrentProcessId()), то начал создаваться новый процесс. Ставишь где-нибуть метку и ждешь вызова ZwResumeThread.
Как она вызывается, проверяешь выставлена ли метка, если да, то по хэдлу потока функцией ZwQueryInformationThread определяешь имя создаваемого процесса и затем, если нужно, убиваешь его.

----added
Бред, ты не правильно понял вопрос ТС.
Цитата:
Сообщение от ..::TROYAN::..  
можно зделать типо так:
Код:
var
 s:string;
begin
s:='bI';
if s='bI' then sleep(10) //замераем на секунду
   else sleep($fffff); //если s неравно 'bI' то программа замерает до бесконечного времени=)
раньше использовал такой способ в своих прогах=)
Нарк?тогду уж таймер можно использовать....
-----------------
ТС, объясни нормально свой вопрос многие не поняли вопроса, и я тоже не до конца....