Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Вниз

И снова перехват АПИ   Найти похожие ветки 

 
Samael6 ©   (2004-02-04 16:39) [0]

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

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


 
Digitman ©   (2004-02-04 16:50) [1]


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


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


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

Глобально


 
Samael6 ©   (2004-02-04 17:11) [3]

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


 
Digitman ©   (2004-02-04 17:15) [4]

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

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

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


 
Digitman ©   (2004-02-04 17:16) [5]

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


 
Samael6 ©   (2004-02-04 17:18) [6]

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


 
Samael6 ©   (2004-02-04 17:23) [7]

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


 
Digitman ©   (2004-02-04 17:44) [8]


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


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

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


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


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


 
Samael6 ©   (2004-02-04 17:59) [9]

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

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

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


 
Digitman ©   (2004-02-04 18:12) [10]


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


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

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

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

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

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


 
Digitman ©   (2004-02-04 18:16) [11]

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


 
Samael6 ©   (2004-02-04 18:40) [12]

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


 
Digitman ©   (2004-02-05 08:35) [13]


> Samael6


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


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


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

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



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.046 c
14-1082426259
Думкин
2004-04-20 05:57
2004.04.11
С днем рождения! 20 апреля.


11-1068215299
SPeller
2003-11-07 17:28
2004.04.11
Глюк с формой


4-1075732641
graY
2004-02-02 17:37
2004.04.11
Каким образом можно включить пункт в меню (или применить т нему с


8-1076650449
Spider
2004-02-13 08:34
2004.04.11
Проиграьт звук при помощи DirectSound (DirectX 9)


3-1079364036
Ross
2004-03-15 18:20
2004.04.11
Не получается составить запрос





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский