Собственно, сабж. После изучения примера Ms-Rem'а по хуку NtOpenProcess задался вопросом: а можно ли на том же уровне хукать вызовы функций, присущих USER32? Например, MessageBox, FindWindow и т.д.? Т.е. подозреваю, что можно, но как начать думать, чтобы додуматься, как?..
Буду весьма признателен за вектор мысли
Re: Можно ли на уровне драйвера хукать ф-ции user32?
От:
Аноним
Дата:
16.02.07 07:11
Оценка:
Здравствуйте, ValeriSh, Вы писали:
VS>а можно ли на том же уровне хукать вызовы функций, присущих USER32? Например, MessageBox, FindWindow и т.д.?
В этом нет смысла. New-функции всё равно должны выполняться в User-Mode.
VS>Т.е. подозреваю, что можно, но как начать думать, чтобы додуматься, как?..
В драйвере — нельзя.
Re[2]: Можно ли на уровне драйвера хукать ф-ции user32?
Здравствуйте, ValeriSh, Вы писали:
VS>Раскопал в таблице syscall'ов ф-цию NtUserFindWindowEx. Наверное, все-таки можно
Можно — функции из user32 обслуживаются отдельной таблицей SDT, созданной драйвером win32k.sys, соответственно, техника перехвата аналогичная — нужно лишь знать номер в таблице.
Да пребудет с тобою сила
Re[4]: Можно ли на уровне драйвера хукать ф-ции user32?
Здравствуйте, TarasCo, Вы писали:
TC>Можно — функции из user32 обслуживаются отдельной таблицей SDT, созданной драйвером win32k.sys, соответственно, техника перехвата аналогичная — нужно лишь знать номер в таблице.
Еще не мешало бы знать параметры, они не всегда совпадают с соответствующими функциями Win32. Даже зная параметры, работать с ними будет непросто (например, что вы собираетесь делать с HWND в режиме ядра? win32k.sys преобразует его в свои внутренние структуры используя свои внутренние функции, которые не экспортируются. А вы как это будете делать?).
Кроме того, далеко не все функции user32 реализованы в ядре. Значительное количество выполняется целиком в пользовательском режиме.
В результате получается, что перехватить что-то можно, только непонятно что с ним потом делать и зачем.
-- Alex Fedotov
Re[5]: Можно ли на уровне драйвера хукать ф-ции user32?
Здравствуйте, Alex Fedotov, Вы писали:
AF>Кроме того, далеко не все функции user32 реализованы в ядре. Значительное количество выполняется целиком в пользовательском режиме.
Да, к сожалению... Читал вночи исходники ReactOS, вызов MessageBox меня сразил: MessageBox -> MessageBoxA -> MessageBoxW -> MessageBoxIndirectW -> DialogBoxIndirectW -> DialogBoxIndirectWAot -> DIALOG_CreateIndirect
AF>В результате получается, что перехватить что-то можно, только непонятно что с ним потом делать и зачем.
Да мне много не нужно, просто запретить поиск определенных окон через тот же FindWindow. Надеюсь, имеющегося в ядре инструментария хватит.
Re[5]: Можно ли на уровне драйвера хукать ф-ции user32?
Я, вообщем, написал только, что принципиально можно
AF>Еще не мешало бы знать параметры, они не всегда совпадают с соответствующими функциями Win32. Даже зная параметры, работать с ними будет непросто (например, что вы собираетесь делать с HWND в режиме ядра? win32k.sys преобразует его в свои внутренние структуры используя свои внутренние функции, которые не экспортируются. А вы как это будете делать?).
Можно собственный map вести к примеру. Задача скорее всего заключается в недопущении отправки сообщений определенным процессам или что-то вроде этого? IMHO чисто принципиально ее можно решить в ядре.