Сейчас на форуме: Rio, tyns777, zombi-vadim (+7 невидимых)

 eXeL@B —› Программирование —› вопрос по недокументированным функциям для получения системной информации
Посл.ответ Сообщение

Ранг: 10.0 (новичок), 1thx
Активность: 0.010
Статус: Участник

Создано: 21 июля 2014 14:11 · Поправил: im_infamous
· Личное сообщение · #1

Доброго времени суток.
Столкнулся с проблемой в функции NtQueryObject, которая при передаче ей на вход объекта с GrantedAcess 0x0012019F зависает наглухо на named pipe. При передаче того же самого объекта с флагом 0x001A019F возвращает то, что нужно. Дилема в том, что я хочу циклом выбрать значения всех объектов с флагом 0x0012019F, чтобы ничего не подвисло.
Проблема наблюдается в XP(в Vista+ все ок вроде). Объекты для передачи на вход этой функции получаю с использованием функции NtQuerySystemInformation с недокументированным классом SystemHandleInformation
В общем, за любую помощь буду благодарен.

UPD
--> Примерный код <--



Ранг: 53.9 (постоянный), 33thx
Активность: 0.050
Статус: Участник

Создано: 21 июля 2014 14:20
· Личное сообщение · #2

Покажите код и можно будет обсуждать вопрос.




Ранг: 110.8 (ветеран), 104thx
Активность: 0.090.01
Статус: Участник

Создано: 21 июля 2014 14:35 · Поправил: Rainbow
· Личное сообщение · #3

Типичная малварная схема получения доступа к открытому другим процессом объекту.



Ранг: 10.0 (новичок), 1thx
Активность: 0.010
Статус: Участник

Создано: 21 июля 2014 14:39
· Личное сообщение · #4

Rainbow пишет:
Типичная малварная схема получения доступа к открытому другим процессом объекту.

Малварная или нет зависит не от кода, а от того, для чего будет, собственно, использоваться код. Следуя вашей логике все WinAPI вполне можно назвать малварным. А задача, между тем, просто удалять файлы, которые непонятно кем открыты и уже не нужны.




Ранг: 110.8 (ветеран), 104thx
Активность: 0.090.01
Статус: Участник

Создано: 21 июля 2014 14:44 · Поправил: Rainbow
· Личное сообщение · #5

Малварная или нет зависит не от кода, а от того, для чего будет, собственно, использоваться код. Следуя вашей логике все WinAPI вполне можно назвать малварным. А задача, между тем, просто удалять файлы, которые непонятно кем открыты и уже не нужны.

Для такой задачи есть статьи на васме - 3 способа работы с занятыми файлами, да и утилей полно. А тот пример, который в первом посте - повышение привилегий треда на основе токена. Или я не прав ?



Ранг: 10.0 (новичок), 1thx
Активность: 0.010
Статус: Участник

Создано: 21 июля 2014 14:59
· Личное сообщение · #6

Rainbow пишет:
Для такой задачи есть статьи на васме - 3 способа работы с занятыми файлами, да и утилей полно. А тот пример, который в первом посте - повышение привилегий треда на основе токена. Или я не прав ?

Он самый, а что такого? Повышает всего лишь до админских привилегий. Попробуйте без них получить хэндл для другого процесса, а я посмотрю. За наводку на статью спасибо, но все это уже заимплеменчено в приложенном коде.
Интерес представляет, собственно, обход ограничения, которое указано в начальном вопросе. Тут либо вы в теме и можете что-то написать по делу, либо одно из двух.




Ранг: 110.8 (ветеран), 104thx
Активность: 0.090.01
Статус: Участник

Создано: 21 июля 2014 15:36
· Личное сообщение · #7

MSDN:

NTSTATUS NtQueryObject(
_In_opt_ HANDLE Handle,
_In_ OBJECT_INFORMATION_CLASS ObjectInformationClass,
_Out_opt_ PVOID ObjectInformation,
_In_ ULONG ObjectInformationLength,
_Out_opt_ PULONG ReturnLength
);



Что вы ей на вход передаете какой GrantedAcess ??? Это она вам должна вернуть Granted или не Granted в ObjectInformation.




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 21 июля 2014 16:15
· Личное сообщение · #8

Гугли, вопрос уже поднимался неоднократно. http://forum.sysinternals.com/handle-name-help-ntqueryobject_topic14435.html Пиши свой драйвер в общем случае. Либо аккуратно проверяй и обходи их стороной в качестве костыля.

| Сообщение посчитали полезным: im_infamous

Ранг: 10.0 (новичок), 1thx
Активность: 0.010
Статус: Участник

Создано: 21 июля 2014 16:23 · Поправил: im_infamous
· Личное сообщение · #9

Rainbow пишет:
Что вы ей на вход передаете какой GrantedAcess ??? Это она вам должна вернуть Granted или не Granted в ObjectInformation.

Правда ваша, я допустил неточность в постановке проблемы.
В NtQueryObject передается дубликат хэндла объекта, который содержится в массиве хэндлов. Массив же является одним из полей структуры, являющейся возвращаемым значением функции NtQuerySystemInformation. Т.к. в NtQueryObject передается дубликат => я имел ввиду соответствие поля ACESS_MASK структуры SYSTEM_HANDLE конкретному хэндлу(дубликату хэндла) и, как следствие, конкретному объекту, передаваемому в функцию.
Надеюсь, теперь все корректно.

Добавлено спустя 12 минут
Archer пишет:
Пиши свой драйвер в общем случае. Либо аккуратно проверяй и обходи их стороной в качестве костыля.

Спасибо за линк. Кто далее будет интересоваться подобным - в качестве костыля был использован тот факт, что, по крайней мере, файлы, можно енумить по Share Flags(WinXP). В Vista+ работает(протестированы Server2k8EE и 2k8R2, полет нормальный) вплоть до 7, но NtQueryObject возвращает там как будто бы все, что нужно.
Спасибо, что уделили время моей проблеме.


 eXeL@B —› Программирование —› вопрос по недокументированным функциям для получения системной информации
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати