хук на DrawText
Какой тип хука лучше использовать? Как получить и обработать параметры передаваемые в вызов этой функции?
Например WH_KEYBOARD - через наш хук будет процеживаться клавиатурный ввод :о)
Общий принцип - вместо оригинальной DrawText вызывается наша функция, которая и смотрит, что ей передали, и вызывает оригинальную функцию.
Чтобы посмотреть, что передаётся функции, нужно сделать что-то из следующего:
1) Подменить первые несколько байт этой функции на машинный jmp XXXX, где ХХХХ - адрес нашей функции, сидящей в библиотеке, которую мы либо инжектировали в процесс сами, либо запихнули туда с помощью хуков. "Наша" функция смотрит, что ей передали, и если нужно - вызывает настоящую системную функцию.
2) Модифицировать таблицу импорта, опять таки сменить адрес там на функцию в нашем уже загруженном модуле :о)
Других методов я не знаю, сам совсем недавно со всем этим разобрался :о) Инжектирование в чужой процесс и модификация таблицы импорта подробно описано у Рихтера "Глава 22 - Внедрение DLL и перехват API-вызовов", его книга есть в сети, там неплохие примеры :о)
Я подменял не DrawText, а нечто другое, но важен принцип, как это все делается :о)