Прочитал статью "Обнаружение скрытых процессов" и возникло несколько вопросов по поводу "Получение списка процессов просмотром списка таблиц хэндлов". Как устроен список HandleTableList - он один в системе и покрывает все потоки и процессы? Или у каждого процесса какой-то связанный с ним список хэндлов? Что означает поле QuotaProcess в HANDLE_TABLE и может ли оно встречаться несколько раз при просмотре списка? И чтобы обойти этот метод надо удалить все LIST_ENTRY которым соответствует QuotaProcess скрываемого процесса?
Leksey Смотри струтуру EPROCESS в нее входит таблица хэндлов, то есть у каждого процесса свой список. Именно поэтому при закрытии программы закрываются открытые ей объекты: файлы и т.д. По поводу удаления /*<thisrel this+0x3c>*/ /*|0x4|*/ long HandleCount; - количество хэндлов, может просто обнулить?
Тогда если у каждого списка процессов свой список хэндлов - то почему в списках какого то чужого процесса будет скрываемый процесс??? И тогда согласно статье - в которой описан поиск HandleTableListHead - который находиться в ntoskrnl.exe - это список отвечающий процессу System?
Leksey EPROCESS и HANDLE_TABLE имеют двустороннюю взаимосвязь. То есть все таблицы хэндлов имеют двусторонню взаимосвязь и в каждой таблице идет ссылка на EPROCESS, при создании нового процесса создается новая HANDLE_TABLE и EPROCESS получает указатель на ЕГО HANDLE_TABLE а чтобы в списке этих таблиц (HANDLE_TABLE) не потерять принадлежность к процессу то и в HANDLE_TABLE имеется ссылка на EPROCESS. HandleTableListHead - начало списка, принадлежит системе. Отвечаем на вопросы: Как устроен список HandleTableList - он один в системе и покрывает все потоки и процессы? Или у каждого процесса какой-то связанный с ним список хэндлов? - вообще есть еще PspCidTable, в той же статье. Да покрывает все процессы, все объекты. У каждого процесса лишь ссылка на часть общего списка. Что означает поле QuotaProcess в HANDLE_TABLE и может ли оно встречаться несколько раз при просмотре списка? - указатель на EPROCESS, для идентификации принадлежности.
im1111 Большое спасибо за пояснение. Теперь почти все понятно. Вот только по поводу обхода все же не совсем ясно:
Leksey Ну просто может если в переменную количество хэндлов установить 0 то система забудет об их наличии, но не факт, я не пробовал. В аттаче (http://slil.ru/24276752) можешь найти структуры из ntoskrn.pdb для XP SP2.