![]() |
|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]()
|
|
| ASGDeveloper |
|
|||
|
developer ![]() ![]() Профиль Группа: Участник Сообщений: 389 Регистрация: 1.4.2006 Репутация: нет Всего: 1 |
||||
|
||||
| bazzzman |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 24.7.2006 Репутация: нет Всего: 2 |
Наверное, всю интересующую тебя информацию найдешь в комментариях к статье:
http://www.rsdn.ru/forum/?mid=876459 |
|||
|
||||
| ASGDeveloper |
|
|||
|
developer ![]() ![]() Профиль Группа: Участник Сообщений: 389 Регистрация: 1.4.2006 Репутация: нет Всего: 1 |
||||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 16 Всего: 459 |
А в чем собственно вопрос? -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| ASGDeveloper |
|
|||
|
developer ![]() ![]() Профиль Группа: Участник Сообщений: 389 Регистрация: 1.4.2006 Репутация: нет Всего: 1 |
||||
|
||||
| drkot |
|
|||
![]() Ищущий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1042 Регистрация: 5.5.2006 Репутация: нет Всего: 8 |
бррр. может я чего не понимаю но какие хуки ты (ASGDeveloper) собираешся ставить?
и собственно драйвер чего пишеш. имхо надо сначала с задачами определится, а то непонятно о чем разговор. -------------------- Ошибка не становится истиной по причине широкого распространения, как и Истина не становится Ошибкой из-за того, что никто её не видит. |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 16 Всего: 459 |
Для установки хуков, драйвер не нужен, достаточно dll. Драйвер обычно пишут для прямого обращения к портам различных устройств. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| BUGOR |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 12.3.2006 Репутация: 2 Всего: 16 |
А для установки хука на NativeAPI ядра? Куда ж тут без драйвера? |
|||
|
||||
| ASGDeveloper |
|
|||
|
developer ![]() ![]() Профиль Группа: Участник Сообщений: 389 Регистрация: 1.4.2006 Репутация: нет Всего: 1 |
Да, dll injectiing пробовал. Теперь конкретно задача: перехват, проверка и модификация (если надо) POP3-трафика Метод внедрения не катит. Ставил хуки и на WSARecv и на recv, В обоих вариантах на последних версиях бата выпадает ошибка. Посмотрел список загруженных батом модулей - ни wsock32.dll, ни ws2_32.dll нету |
|||
|
||||
| BUGOR |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 12.3.2006 Репутация: 2 Всего: 16 |
ASGDeveloper, бат загружает эти модули после того, как уже непосредственно начинает соединяться с сервером, до этого их там нет. Что касается апи, то бат передаёт с помощью send, а принимает с помощью WSARecv. Ошибка скорее всего где-то в твоей длл.
Это сообщение отредактировал(а) BUGOR - 24.7.2006, 13:11 |
|||
|
||||
| dumb |
|
||||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 7 Всего: 158 |
плохо смотрел. wsock32.dll, ws2_32.dll, ws2help.dll, mswsock.dll - все там.
плохо ставил... |
||||
|
|||||
| ASGDeveloper |
|
|||
|
developer ![]() ![]() Профиль Группа: Участник Сообщений: 389 Регистрация: 1.4.2006 Репутация: нет Всего: 1 |
||||
|
||||
| BUGOR |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 12.3.2006 Репутация: 2 Всего: 16 |
Их в не на самой последней нет, я же говорю они при соединеиии грузятся.
Да, как вариант сначала перехватывай LoadLibarary и смотри, что передаётся в его параметр, если это ws2_32.dll, то после выполнения LoadLibrary снимай с неёё хук и ставь хуки на send и WSARecv в ws2_32.dll, остальные сокетные библиотеки все ссылаются на функции из ws2_32.dll, их трогать незачем. |
||||
|
|||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 7 Всего: 158 |
3.62. значит сделали подгрузку, что, в общем, правильно - прога жирная, и отправка/получение почты занимает малую часть времени работы в ней.
именно. хукай LoadLibrary и после подгрузки расставляй хуки по функциям. |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
-------------------- Обижено школьников: 8 |
|||
|
||||
| drkot |
|
|||
![]() Ищущий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1042 Регистрация: 5.5.2006 Репутация: нет Всего: 8 |
Вобще, если касаться перехвата трафика, то написаный драйвер ставится в цепочку NDIS и весь трафик через него идет.
А чтоб не мучится с драйверами можно и winpcap использовать. PS: чето я непойму откуда у народа такая любовь к хукам на сокеты. http://www.wasm.ru/article.php?article=netfilter -------------------- Ошибка не становится истиной по причине широкого распространения, как и Истина не становится Ошибкой из-за того, что никто её не видит. |
|||
|
||||
| ASGDeveloper |
|
|||
|
developer ![]() ![]() Профиль Группа: Участник Сообщений: 389 Регистрация: 1.4.2006 Репутация: нет Всего: 1 |
Вот код перехватчика. Бага в том, что данные не сразу попадают в буфер. Не знаете в чем проблема?
Это сообщение отредактировал(а) ASGDeveloper - 24.7.2006, 17:07 |
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 7 Всего: 158 |
гы...
посмотри что возвращает WSARecv - WSA_IO_PENDING? тут одним хуком не отделаешься. в данном случае WSARecv только инициирует прием, непосредственно получение данных сопровождается либо вызовом lpCompletionRoutine(если она не NULL при вызове), либо "выставлением" эвента(lpOverlapped.hEvent). похукать lpCompletionRoutine не проблема. а вот если получение ожидается на эвенте, тогда сложнее. никаких "простых" решений в голову не приходит... |
|||
|
||||
| ASGDeveloper |
|
|||
|
developer ![]() ![]() Профиль Группа: Участник Сообщений: 389 Регистрация: 1.4.2006 Репутация: нет Всего: 1 |
||||
|
||||
| drkot |
|
|||
![]() Ищущий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1042 Регистрация: 5.5.2006 Репутация: нет Всего: 8 |
Насколько я понимаю в нт системах можно написать сервис и установить его как драйвер без хитрых манипуляций описаных на МАСМе.
И перехватывать думаю надо не вызовы функций, а непосредственно поток пакетов в стеке протоколоа TCP\IP. ето как раз та задача которая решается NDIS фильтрами. -------------------- Ошибка не становится истиной по причине широкого распространения, как и Истина не становится Ошибкой из-за того, что никто её не видит. |
|||
|
||||
| ASGDeveloper |
|
|||
|
developer ![]() ![]() Профиль Группа: Участник Сообщений: 389 Регистрация: 1.4.2006 Репутация: нет Всего: 1 |
||||
|
||||
| drkot |
|
|||
![]() Ищущий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1042 Регистрация: 5.5.2006 Репутация: нет Всего: 8 |
таки исходники есть. В любом случае платным он станет с какойто конкретной версии, а все предудущие должны распространятся GNU, как и было. http://www.wasm.ru/article.php?article=netfilter http://www.wasm.ru/comment.php?artcode=netfilter Встречал статью по реализации фильтра на си тока ссылочку не помню. примеров сервисов на форуме полно. -------------------- Ошибка не становится истиной по причине широкого распространения, как и Истина не становится Ошибкой из-за того, что никто её не видит. |
|||
|
||||
| ASGDeveloper |
|
|||
|
developer ![]() ![]() Профиль Группа: Участник Сообщений: 389 Регистрация: 1.4.2006 Репутация: нет Всего: 1 |
||||
|
||||
| drkot |
|
|||
![]() Ищущий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1042 Регистрация: 5.5.2006 Репутация: нет Всего: 8 |
-------------------- Ошибка не становится истиной по причине широкого распространения, как и Истина не становится Ошибкой из-за того, что никто её не видит. |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
lpCompletionRoutine можно и не хукать. А в хуке на WSARecv использовать свою lpCompletionRoutine, в ней делать обработку и вызывать переданную вызывающим кодом. И с событием поступать аналогично. При вызове использовать свое, отлавливать его и манипулировать с тем, которого ожидает вызывающий код -------------------- Обижено школьников: 8 |
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 7 Всего: 158 |
тупим-с...
|
|||
|
||||
| ASGDeveloper |
|
|||
|
developer ![]() ![]() Профиль Группа: Участник Сообщений: 389 Регистрация: 1.4.2006 Репутация: нет Всего: 1 |
||||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 7 Всего: 158 |
||||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
это оно в принципе на поверхности. Конкретная реализация будет не слишком простой, если учитывать возможное количество одновременных вызовов WSARecv из разный потоков/прцессов. Мой вариант этого кода уже почти всегда корректно работает, но не дам, тк автор темы мне конкурент
-------------------- Обижено школьников: 8 |
|||
|
||||
| ASGDeveloper |
|
|||
|
developer ![]() ![]() Профиль Группа: Участник Сообщений: 389 Регистрация: 1.4.2006 Репутация: нет Всего: 1 |
||||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
я могу сходу назвать 10 отличий того, что у меня в подписи и того о чем ты просишь. Но это будет оффтоп.
Просто "нет". -------------------- Обижено школьников: 8 |
|||
|
||||
| ASGDeveloper |
|
|||
|
developer ![]() ![]() Профиль Группа: Участник Сообщений: 389 Регистрация: 1.4.2006 Репутация: нет Всего: 1 |
||||
|
||||
| drkot |
|
|||
![]() Ищущий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1042 Регистрация: 5.5.2006 Репутация: нет Всего: 8 |
береш исходник смотриш что к чему и по образу и подобию ваяеш. чем не подходит? сам же ссылочку просил. Это сообщение отредактировал(а) drkot - 25.7.2006, 18:19 -------------------- Ошибка не становится истиной по причине широкого распространения, как и Истина не становится Ошибкой из-за того, что никто её не видит. |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
ASGDeveloper, на данный момент я не пишу Open Source. Когда начну, сообщу. А если я тебе туда накидаю багов, которые проявляются только в редких случаях, но найти которые невозможно? Короче я призываю тебя кончать флейм - мы идем по кругу.
-------------------- Обижено школьников: 8 |
|||
|
||||
| ASGDeveloper |
|
|||
|
developer ![]() ![]() Профиль Группа: Участник Сообщений: 389 Регистрация: 1.4.2006 Репутация: нет Всего: 1 |
И так. Просмотрев еще раз топик я выделил три метода решения проблемы.
1) Перехват функций WinSock. 2) Написание NDIS-фильтра 3) Создание драйвера 1) С первым частично разобрались, но вдруг bems заявляет, что в принципе такой вариант может начать глючить при какой-то ситуации. Кроме того этот вариант привязан к фиксированному списку почтовиков. 2) Второй вариант весьма перспективен, но у него есть один важный минус - для его реализации необходим MS Dev Studio + DDK. А это не есть гуд, так как самый простой способ получить и то и другое - это подписка на MSDN. Стоимость подписки - ~3000$. no comments... 3) Третий вариант перекликается с первым, но благодаря этому топику: http://forum.vingrad.ru/index.php?showtopic=70952 некоторые вопросы пропадают и этот вариант становится наиболее перспективным. Или я что-то не доглядел? |
|||
|
||||
| bems |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
Есть разные там экзотические случаи - например вызывает функцию, передавая ей эвент один процесс, а ожидает его другой (первый к тому времени может уже и завершиться). Первый понастоящему трудный баг во всем этом перехвате я поймал на такой "архитектуре". (Слава Богу это писалось на заказ и не имело широкого распространения) Получилось так, что когда завершается процесс, вызывающий функцию, то исчезают все выделенные мной для этого вызова данные, в том числе и хэндл эвента, которого ждет другой процесс. То есть или у него завершиться таймаут, или (если ждет INFINITE милисекунд) получаем зависшую прогу (не мою!!). Есть и просто некорректное поведение вызывающего кода. и об этом всем нужно подумать. Тогда глюков не будет. Ну а потом уже пробывать на почтовиках. (Популярные вроде вышеписаной фигни не творят). Парочку глючных но полурабочих прог, работающих с сокетами сам нацарапай, посмотри как твой перехват - не усугубляет ли. А если дров ты раньше не писал, то там среда еще менее дружелюбная, чем то, что описал я. Но в конце концов тебе решать -------------------- Обижено школьников: 8 |
||||
|
|||||
![]()
|
| Правила форума "Delphi: WinAPI и системное программирование" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |