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

  #5  
Старый 21.09.2008, 20:05
SlyBit
Познающий
Регистрация: 04.07.2008
Сообщений: 56
Провел на форуме:
390892

Репутация: 60
По умолчанию

Ponchik

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

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

----added

Только сейчас заметил, что тебе нужно контроливать только один ехешник. Конечно проще заразить его кодом, подгружающим библиотеку проверяющую можно загружаться или нет. Или еще проще написать лоадер, который будет делать проверку файлов и затем в зависимоти от результата запускать или не запускать ехешник.

Последний раз редактировалось SlyBit; 21.09.2008 в 20:12..