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

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

И снова перехват АПИ [D6, Win95/98, WinME, NT4, Win2k, WinXP]


Samael6 ©   (2004-02-04 16:39:00) 

Доброго времени суток, господа программисты!
У меня такая проблема: нужно перехватывать ф-цию WinAPI Gethostbyname(). Нашел море информации, но она либо плохо иллюстрирована примерами, либо эти примеры просто не работают. Не могу разобраться. Если кто имеет какую инфу или примеры, не подкините ли. Желательно чтоб работало на максимальном количестве версий Мастдаек.

Заранее очень благодарен!


Nous Mellon   (2004-02-05 14:52:00) [1]

Спасибо большое Digitman! Благодаря вам я теперь разобрался в механизме перехвата ф-ций АПИ.


Digitman   (2004-02-05 08:35:00) [2]


> Samael6


> какого типа хук лучше всего подойдет для поставленной задачи?


любого. это абсолютно неважно.
важно, что когда при установке тобой хука система будет грузить хук-DLL в АП "чужого" GUI-процесса, код инициализации этой DLL получит управление, и в этот момент ты будешь иметь возможност выполнить все что угодно, в т.ч. и перехват импорта/экспорта


Samael6   (2004-02-04 18:40:00) [3]

Спасибо за разъеснение. Попробую разобраться. А какого типа хук лучше всего подойдет для поставленной задачи?


Digitman   (2004-02-04 18:16:00) [4]

кр.того, если речь идет о перехвате ф-ций, реализующих логику GetHostByName-подобную, ты не учитываешь, что есть еще и асинхр. ее вариант - WSAAsyncGetHostByname .. многие прикладные и системные процессы могут использовать именно ее вместо синхронной GetHostByName


Digitman   (2004-02-04 18:12:00) [5]


> Но из тестовой другой, все равно вызывается "родная" ф-ция


разумеется ! там другой экз-р wsock32 и соответственно другие, нетронутые тобой настроенные секции экспорта/импорта

в общем случае тебе требуется тем или иным образом внедрить код, реализующий то что ты уже умеешь, в ВАП "чужого" процесса и запустить его там на выполнение

в частном случае (win9x) можно обойтись и без внедрения, но это из области трюков, поэтому не рекомендую

методы же внедрения - различны, два из них я тебе их перечислил в [4] ... частные случаи внедрения не рассматриваю как не универсальные для любого "чужого" процесса

выбирай на вкус


Samael6   (2004-02-04 17:59:00) [6]

Я делаю так:
- Ищу в таблице импорта(экспорта) библиотеки WSOCK32 свою функцию
- Меняю ее на свою, путем замены указателя в таблице первичного адресса на свой. И вроде все. При этом снимаю защиту от записи с этого участка памяти, после чего ставлю наместо.

И в моей проги, которая все это делает, все вроде работает. Но из тестовой другой, все равно вызывается "родная" ф-ция.

Вот поэтому я и спрашиваю. Не знаю что сделал не так.


Digitman   (2004-02-04 17:44:00) [7]


> нет ли работающего примера?


как ты себе это видишь ? если и есть, то вокруг собственно перехвата - большущая технологическая оболочка под конкретную конечную задачу, ты в ней мало что поймешь и забросаешь меня вопросами, мол, это зачем, это почему ... да и не десяток строк в таких примерах

думаю, гораздо важней понять концептуально, в какой последовательности реализуются и задействуются те или иные механизмы (а их немало) для достижения такой цели


> по-подробнее не расскажите как это все реализуется?


что ? конкретно ?
внедрение в чужой процесс ? установка глоб.хука ? или что ? до собственно перехвата нужно проделать кучу различных необходимых действий, чтобы код перехвата перед его стартом оказался в ВАП того процесса, чьи обращения к интересующей эксп.ф-ции требуется отслеживать ..


Samael6   (2004-02-04 17:23:00) [8]

Мне нужно фильтровать возвращаемые этой процедурой IP адресса из моей программы. Сразу оговорюсь, что это не для трояна, не для вируса и разной пакости, просто у меня программа с такими вот экзотическими функциямию. Что вроде гибрида DNS и фаервола.


Samael6   (2004-02-04 17:18:00) [9]

А нет ли работающего примера? Или по-подробнее не расскажите как это все реализуется?


Digitman   (2004-02-04 17:16:00) [10]

а если пояснишь, с какой целью требуется перехват, то может и иное решение найдется ... может и перехват не нужен вовсе


Digitman   (2004-02-04 17:15:00) [11]

глобально для GUI-процессов установи глоб.хук (SetWindowsHookEx), он внедрит в каждый работающий GUI-процесс по экземпляру твоей хук-DLL, в ходе инициализации которой собственно и перехватываешь нужный тебе экспорт-импорт

глобально для произвольных процессов перечисли все процессы, стартуй в их контексте удаленный код.поток (CreateRemoteThread), в контексте которого также перехватываешь нужный тебе экспорт-импорт

верно для любой эксп.ф-ции


Samael6   (2004-02-04 17:11:00) [12]

Но в крайнем случае, можно и в указанном процессе.


Samael6   (2004-02-04 17:00:00) [13]

Глобально


Digitman   (2004-02-04 16:50:00) [14]


> нужно перехватывать ф-цию WinAPI Gethostbyname()


глобально ? или в контексте конкретно указанного процесса ?


Наверх

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