Есть задачка по получению (pid) всех подлинных процессов csrss (в ring0). В статье Ms-Rem'а http://wasm.ru/article.php?article=dumping предлагается вариант поиска по наличию именованного объекта (LPC порт "*\Windows\ApiPort") у процесса. Это катит для WinXP. На Win7 конечно надо искать по ALPC порт "*\Windows\ApiPort". Но вот на висте такой способ ваще не катит (чёт не видно там вообще открытых ApiPort). Да и этот способ отсеивания зёрен от плевел не совсем красив. Есть какой нито универсальный и более правильный способ?
А чем не подходит путь к исполняемому файлу в качестве признака? Берём секцию процесса, берём файловый объект оттуда, собираем полный путь и сравниваем с эталонным. Вполне надёжно.
Сделай сбор информации о процессах с самого начала запуска ядра, включая: 1. Информацию о потоке/процессе-родителе. 2. Информацию о расположении исполняемого файла-образа. Надёжность стремится к 100%. Не думаю, что сможешь сделать что-либо более эффективное.
А куда они там делись-то? Просто теперь они имеют имя: "\Sessions\xxx\Windows\ApiPort", где xxx - номер сессии пользователя. Но способ, соглашусь, "топорный". "Кто ищет, тот..." (с). Может чем поможет информация о том, что, например, на xp-2003 в ядре присутствует не экспортируемый символ PEPROCESS ExpDefaultErrorPortProcess, который и содержит указатель на _EPROCESS csrss'а. Может всю задачу можно решить по-другому? В чем основная цель подобных изысканий?
Потому что кто то запустит процесс на базе легального файл, а код подсунет свой. Вопрос следует задать более конкретно, присоединяюсь к предыдущему оратору )
При правильной организации работы, когда недоверенные приложения запускаются исключительно из-под пользовательского аккаунта, такой проблемы возникнуть не должно. Ну а если из-за под админа всё... Этак мы сейчас договоримся до реализации полноценной проактивной защиты. Пока непонятно, надо ли это.
А для чего я в первом посте звёздочки рисовал? Ну не нашёл я на своей висте сп1 упоминание о ApiPort. Ну я же не антивирус делаю. Мой дров запускают по требованию. И в этот момент нужно найти эти системные процесы. Полагаю к этому то всё и стремится. Но на данном этапе просто надо разрешить этим процессам всё (ну как писал Ms-Rem в выше упомянутой статье про фимку). Т.е. пробежавшись по всему списку EPROCESS можно найти эти процессы? И я так понимаю мне нужно будет для каждого билда найти смещения ExpDefaultErrorPortProcess.
Ни чем тебе этот указатель не поможет, так ты найдёшь только один из возможных процессов CSR, а их по одной штуке в каждом сеансе висит.
T800 Win32 вызывает найтив для коннекта(CsrClientConnectToServer()) на этот порт при инициализации процесса. CsrpConnectToServer() - в нтдлл эта функа создаёт соеденение, апипорт имеется по любому. Может быть иного формата префикс.