Можно ли на уровне драйвера хукать ф-ции user32?
От: ValeriSh Россия  
Дата: 15.02.07 19:05
Оценка:
Приветствую!

Собственно, сабж. После изучения примера 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 Россия  
Дата: 16.02.07 07:22
Оценка:
Здравствуйте, Аноним, Вы писали:

Раскопал в таблице syscall'ов ф-цию NtUserFindWindowEx. Наверное, все-таки можно
Re[3]: Можно ли на уровне драйвера хукать ф-ции user32?
От: TarasCo  
Дата: 16.02.07 09:39
Оценка: +1
Здравствуйте, ValeriSh, Вы писали:

VS>Раскопал в таблице syscall'ов ф-цию NtUserFindWindowEx. Наверное, все-таки можно


Можно — функции из user32 обслуживаются отдельной таблицей SDT, созданной драйвером win32k.sys, соответственно, техника перехвата аналогичная — нужно лишь знать номер в таблице.
Да пребудет с тобою сила
Re[4]: Можно ли на уровне драйвера хукать ф-ции user32?
От: Alex Fedotov США  
Дата: 16.02.07 09:58
Оценка: 12 (1) +2
Здравствуйте, TarasCo, Вы писали:

TC>Можно — функции из user32 обслуживаются отдельной таблицей SDT, созданной драйвером win32k.sys, соответственно, техника перехвата аналогичная — нужно лишь знать номер в таблице.


Еще не мешало бы знать параметры, они не всегда совпадают с соответствующими функциями Win32. Даже зная параметры, работать с ними будет непросто (например, что вы собираетесь делать с HWND в режиме ядра? win32k.sys преобразует его в свои внутренние структуры используя свои внутренние функции, которые не экспортируются. А вы как это будете делать?).

Кроме того, далеко не все функции user32 реализованы в ядре. Значительное количество выполняется целиком в пользовательском режиме.

В результате получается, что перехватить что-то можно, только непонятно что с ним потом делать и зачем.
-- Alex Fedotov
Re[5]: Можно ли на уровне драйвера хукать ф-ции user32?
От: ValeriSh Россия  
Дата: 16.02.07 10:54
Оценка:
Здравствуйте, Alex Fedotov, Вы писали:

AF>Кроме того, далеко не все функции user32 реализованы в ядре. Значительное количество выполняется целиком в пользовательском режиме.


Да, к сожалению... Читал вночи исходники ReactOS, вызов MessageBox меня сразил: MessageBox -> MessageBoxA -> MessageBoxW -> MessageBoxIndirectW -> DialogBoxIndirectW -> DialogBoxIndirectWAot -> DIALOG_CreateIndirect

AF>В результате получается, что перехватить что-то можно, только непонятно что с ним потом делать и зачем.


Да мне много не нужно, просто запретить поиск определенных окон через тот же FindWindow. Надеюсь, имеющегося в ядре инструментария хватит.
Re[5]: Можно ли на уровне драйвера хукать ф-ции user32?
От: TarasCo  
Дата: 16.02.07 13:01
Оценка:
Здравствуйте, Alex Fedotov, Вы писали:

Я, вообщем, написал только, что принципиально можно

AF>Еще не мешало бы знать параметры, они не всегда совпадают с соответствующими функциями Win32. Даже зная параметры, работать с ними будет непросто (например, что вы собираетесь делать с HWND в режиме ядра? win32k.sys преобразует его в свои внутренние структуры используя свои внутренние функции, которые не экспортируются. А вы как это будете делать?).


Можно собственный map вести к примеру. Задача скорее всего заключается в недопущении отправки сообщений определенным процессам или что-то вроде этого? IMHO чисто принципиально ее можно решить в ядре.
Да пребудет с тобою сила
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.