Получение списка процессов с помощью HandleTableList

Тема в разделе "WASM.NT.KERNEL", создана пользователем Leksey, 22 апр 2007.

  1. Leksey

    Leksey New Member

    Публикаций:
    0
    Регистрация:
    29 ноя 2006
    Сообщения:
    33
    Прочитал статью "Обнаружение скрытых процессов" и возникло несколько вопросов по поводу "Получение списка процессов просмотром списка таблиц хэндлов".
    Как устроен список HandleTableList - он один в системе и покрывает все потоки и процессы? Или у каждого процесса какой-то связанный с ним список хэндлов?
    Что означает поле QuotaProcess в HANDLE_TABLE и может ли оно встречаться несколько раз при просмотре списка?
    И чтобы обойти этот метод надо удалить все LIST_ENTRY которым соответствует QuotaProcess скрываемого процесса?
     
  2. Guest

    Guest Guest

    Публикаций:
    0
    Leksey
    Смотри струтуру EPROCESS в нее входит таблица хэндлов, то есть у каждого процесса свой список. Именно поэтому при закрытии программы закрываются открытые ей объекты: файлы и т.д.
    По поводу удаления /*<thisrel this+0x3c>*/ /*|0x4|*/ long HandleCount; - количество хэндлов, может просто обнулить?
     
  3. Leksey

    Leksey New Member

    Публикаций:
    0
    Регистрация:
    29 ноя 2006
    Сообщения:
    33
    Тогда если у каждого списка процессов свой список хэндлов - то почему в списках какого то чужого процесса будет скрываемый процесс???
    И тогда согласно статье - в которой описан поиск HandleTableListHead - который находиться в ntoskrnl.exe - это список отвечающий процессу System?
     
  4. Guest

    Guest Guest

    Публикаций:
    0
    Leksey
    EPROCESS и HANDLE_TABLE имеют двустороннюю взаимосвязь. То есть все таблицы хэндлов имеют двусторонню взаимосвязь и в каждой таблице идет ссылка на EPROCESS, при создании нового процесса создается новая HANDLE_TABLE и EPROCESS получает указатель на ЕГО HANDLE_TABLE а чтобы в списке этих таблиц (HANDLE_TABLE) не потерять принадлежность к процессу то и в HANDLE_TABLE имеется ссылка на EPROCESS.

    HandleTableListHead - начало списка, принадлежит системе.

    Отвечаем на вопросы:

    Как устроен список HandleTableList - он один в системе и покрывает все потоки и процессы? Или у каждого процесса какой-то связанный с ним список хэндлов? - вообще есть еще PspCidTable, в той же статье. Да покрывает все процессы, все объекты. У каждого процесса лишь ссылка на часть общего списка.

    Что означает поле QuotaProcess в HANDLE_TABLE и может ли оно встречаться несколько раз при просмотре списка? - указатель на EPROCESS, для идентификации принадлежности.
     
  5. Leksey

    Leksey New Member

    Публикаций:
    0
    Регистрация:
    29 ноя 2006
    Сообщения:
    33
    im1111 Большое спасибо за пояснение. Теперь почти все понятно.
    Вот только по поводу обхода все же не совсем ясно:
     
  6. Guest

    Guest Guest

    Публикаций:
    0
    Leksey
    Ну просто может если в переменную количество хэндлов установить 0 то система забудет об их наличии, но не факт, я не пробовал. В аттаче (http://slil.ru/24276752) можешь найти структуры из ntoskrn.pdb для XP SP2.
     
  7. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    насчет "просто обнулить" - при этом не освобождаюся сами объекты