![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перехват функций
Piter © (2004-12-12 00:31:00)1) Внедряюсь в процесс с помощью DLL, перехватываю в том числе GetProcAddress, чтобы подставлять адрес заменяемой функции. Но вот при выгрузке DLL что делать? Секции импорта можно переправить обратно, а вот результаты GetProcAddress уже не поменяешь!
Процесс возможно где-то запомнил адрес измененной функции. А после выгруза DLL этот адрес уже недействителен и процесс вполне может вылететь по AV при вызове такой функции!
Есть какое-нибудь решение проблемы?
2) если процесс с помощью LoadLibrary загружает Some_1.dll, а у ней в таблице импорта прописана Some_2.dll - получается, что будут загружены обе DLL. Но если про загрузку Some_1.dll я могу узнать, перехватит LoadLibrary, то как узнать что загрузилась Some_2.dll (чтобы переправить и ее таблицу импорта)?
Рихтер такой ситуации не предусматривает, а мне кажется зря.
Piter (2004-12-12 15:07:00) [21]Не получается перехватить функции в некоторых приложениях. Например, перехватываю Shell_NotifyIconA и Shell_NotifyIconW.
Внедряюсь по хуку GetMessage.
Перехватываю LoadLibraryA, LoadLibraryW, LoadLibraryExA, LoadLibraryExW для определения загрузки новых модулей.
Перехватываю GetProcAddress.
Получается перехватить, например, значок языка (Ru/En), CpuIdle, Значок сетевого подключения.
Но вот значок регулятора громкости не перехватывается, также как и значок Outpost Firewall, также как и значок принтера, значки FlashGet и Demon Tools также не перехватываются.
Вот сижу и думаю - почему? Вроде все рабочее, отдельные части кода могу привести...
Судя по Exe'шнику того же FlashGet - он использует Shell_NotifyKIconA. А почему тогда не перехватывается?
Может, еще какие функции есть для добавления значка в трей?
Может, кто пробовалл перехват этих программ?
Leonid Troyanovsky (2004-12-12 14:23:00) [22]
> Piter © (12.12.04 12:51) [3]
> Не выгружать DLL.
> ну понятно... но если процесс, установивший хук, завершается?
Hook - это собственность потока, его установившего.
А чтоб либа не выгрузилась, можно сделать LoadLibrary из
зацепленного потока. Пример такой я недавно здесь приводил.
Правда, в 98 с этим были тонкости.
--
С уважением, LVT.
Piter (2004-12-12 12:51:00) [23]Игорь Шевченко © (12.12.04 11:56) [2]
Не выгружать DLL.
ну понятно... но если процесс, установивший хук, завершается?
Например, перебрать все загруженные модули и откорректировать таблицы импорта
в общем, так и думал... хотя может еще какие способы есть?
Игорь Шевченко (2004-12-12 11:56:00) [24]
> Есть какое-нибудь решение проблемы?
Не выгружать DLL.
> то как узнать что загрузилась Some_2.dll (чтобы переправить
> и ее таблицу импорта)?
Например, перебрать все загруженные модули и откорректировать таблицы импорта.
Хакер (2004-12-12 01:00:00) [25]Удалено модератором
Примечание: Offtopic