Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Перехват функций


Страницы:   1 2

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо