Перехватываю NtQuerySystemInformation на ring3, тем не менее сабж видит мою программу. Опираясь на мои навыки реверсинга я предположил, что она получает список процессов с помощью служб. Или как-то иначе. Как ее обмануть, желательно не спускаясь в ring3?
В смысле как получает список процессов с помощью служб? Такого не должно быть - таких странных служб я не встречал. В ядре ОС функции NtQuerySystemInformation соответствует ntoskrnl!ZwQuerySystemInformation. Перехватывать надо её (лучше через драйвер). Хотя сначала происходит вызов NtQuerySystemInformation, но если ядро признаёт вызов действительным, то управление попадает на ZwXXX. О перехвате в ring0 можно прочитать статьи от Ms-Rem'а по перехвату API, часть третья.
NullSessi0n Спасибо, читал все три Первые две понял, до драйверов доросту через пару месяцев - читаю третью перед каждым сном D Не могу не отметить, что программа Ms-Rem'а ProcHide видна как tasklist.exe так и обычному taskmgr.exe. Первой - потому что прога консольная, и хукам не подвластна, а второй, потому что хук ставится на событие WH_GETMESSAGE, а следовало бы на WC_CBT, поскольку taskmgr получает список процессов до того, как вызывает GetMessage(), но перед тем, как создает окно Насчет Zw* я пропалил, сменил перехват, но это не помогло. Функция нормально перехватывается (сплайсингом) и нормально работает в любых GUI и консольных приложениях, кроме этого самого tasklist'а. Вот я хочу понять почему. Из дебажинья ничего хорошего не вышло :-/
Так простите, я сегодня не совсем трезвый ) ProcHide конечно winlogon.exe скрывает, и с ним все работает. Но я рекомендовал бы ставить хук на WH_CBT.
SetWindowsHookEx - процедура из user32.dll и применима лишь в ring3. ring0, он же kernel mode, он же режим ядра, такой функции не имеет.