Winsock API hook
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 04.12.02 13:09
Оценка:
На днях промелькнула в форумах ссылка, которая удивительным образом пересеклась с моими текущими потребностями, а именно — перехват вызовов функций WinSock. Сама ссылка (вдруг кого заинтересует) — wepmetering.

Вопрос собственно не в этом... Он (вопрос) скорее философского характера (не спешите переносить топик в форум "За жисть" ). Стоит четко очерченная задача:

1. Вести учет всех http-запросов (GET, HEAD, POST), которые посылаются IE, Netscape и пр. популярными браузерами.

2. Это дело должно работать, начиная от Win98 и выше.

Собственно, указанная ссылка помогла, даже очень. Но терзают смутные сомнения — так ли уж чист этот хак? Сделал пока на примере wepmetering, но хочется узнать о существовании альтернативных путей в части отлова HTTP-запросов от клиента к серверу... Может, кто работал над подобной проблемой?

З.Ы. Все бросать и юзать WinPcap не хочется (задача-то гораздо уже, чем возможности, предоставляемые WinPcap)...
Re: Winsock API hook
От: Andrew S Россия http://alchemy-lab.com
Дата: 04.12.02 19:15
Оценка: 8 (1)
Ну, а если написать маленький http прокси сервер и заставить всех использовать именно его в настройках броузера?
А методы типа установки хука подобным образом... даже не знаю, есть же библиотека от майкрософт, которая делает это корректнее. Далее есть статья http://www.ntndis.com/articles/firewall.htm — ее тоже стоит почитать, там немного описаны методы. Обратить, наверное, стоит внимание на Winsock Layered Service Provider (LSP).

Успехов.

F>1. Вести учет всех http-запросов (GET, HEAD, POST), которые посылаются IE, Netscape и пр. популярными браузерами.


F>2. Это дело должно работать, начиная от Win98 и выше.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[2]: Winsock API hook
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 04.12.02 20:02
Оценка:
Здравствуйте, Andrew S, Вы писали:

AS>Ну, а если написать маленький http прокси сервер и заставить всех использовать именно его в настройках броузера?


Гм. А вот в условиях задачи еще такая весчь — все должно быть незаметно... То есть, чтобы вне зависимости от настроек прокси в браузерах статистика собиралась и все работало... И чтобы юзер до поры до времени не подозревал. Этакая система учета того, куда и кто лазит по HTTP в рабочее время... И не спрашивайте меня, зачем все это...

AS>А методы типа установки хука подобным образом... даже не знаю, есть же библиотека от майкрософт, которая делает это корректнее.


А чего за библиотека — не ткнете пальцем?

AS>Обратить, наверное, стоит внимание на Winsock Layered Service Provider (LSP).


Спасибо, почитаю и ознакомлюсь.

[]

Спасибо за ответ.
Re[3]: Winsock API hook
От: Andrew S Россия http://alchemy-lab.com
Дата: 04.12.02 20:47
Оценка: 16 (1)
F> И не спрашивайте меня, зачем все это...
И не думал.

AS>>А методы типа установки хука подобным образом... даже не знаю, есть же библиотека от майкрософт, которая делает это корректнее.


F>А чего за библиотека — не ткнете пальцем?


Ткнул. Называется это чудо Detours и по заверениям приспешников Великого Билли позволяет устанавливать хуки на функции практически 100% safe.

AS>>Обратить, наверное, стоит внимание на Winsock Layered Service Provider (LSP).


F>Спасибо, почитаю и ознакомлюсь.


BTW — в SDK есть прекраснейший пример SPI. Аж 150 кил кода, правда, большинство из него наверное не понадобится, а также есть инсталлер/деинсталлер LSP.

F>[]


F>Спасибо за ответ.


Да завсегда
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[4]: Winsock API hook
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 05.12.02 07:08
Оценка:
Здравствуйте, Andrew S, Вы писали:

[]

AS>BTW — в SDK есть прекраснейший пример SPI. Аж 150 кил кода, правда, большинство из него наверное не понадобится, а также есть инсталлер/деинсталлер LSP.


Премного благодарен. Я не навязываюсь, но вот проблема — нет у меня CD с примерами (Студию для установки брал у друга)... Может, вы пойдете навстречу и вышлите мне эти аж 150 Кил кода? Интересно же...

З.Ы. И расплата (в виде благодарности) найдет героя
Re[5]: Winsock API hook
От: Andrew S Россия http://alchemy-lab.com
Дата: 05.12.02 07:17
Оценка: 8 (1)
Вышлю, конечно, без проблем. Только вот куда? Адрес, указанный в профайле, не похож на правду.

F>Премного благодарен. Я не навязываюсь, но вот проблема — нет у меня CD с примерами (Студию для установки брал у друга)... Может, вы пойдете навстречу и вышлите мне эти аж 150 Кил кода? Интересно же...
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[6]: Winsock API hook
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 05.12.02 07:19
Оценка:
Здравствуйте, Andrew S, Вы писали:

AS>Вышлю, конечно, без проблем. Только вот куда? Адрес, указанный в профайле, не похож на правду.


Как это не похож? Выкидываете слова "НЕТ СПАМУ" и все...

Но, в общем, вот: flame@rsdn.ru

Заранее благодарю.
Re[6]: Winsock API hook
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 05.12.02 07:51
Оценка:
Здравствуйте, Andrew S, Вы писали:

AS>Вышлю, конечно, без проблем.


Письмо получил, спасибо.
Re[4]: Winsock API hook
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 05.12.02 10:09
Оценка:
Здравствуйте, Andrew S, Вы писали:

Это опять я

[]

AS>Ткнул. Называется это чудо Detours и по заверениям приспешников Великого Билли позволяет устанавливать хуки на функции практически 100% safe.



В общем, действительно чудо, вот только, если я все правильно понял, есть одно но (из README цитирую):

The DLL injection functions are not compatible with either Windows 95,
Windows 98, or Windows ME as the Win9x platforms do not supports the
CreateRemoteThread API.


А эта вещь (внедрение dll) как раз самая нужная... Надо, чтобы работало под Win98... В любом случае — спасибо за интересный материал. Я пока вижу один выход для использования Detours под любой Win-операционкой — постановка глобального хука (типа WH_GETMESSAGE) и уже из HookProc патчить функции... Будем разбираться...
Re[5]: Winsock API hook
От: Andrew S Россия http://alchemy-lab.com
Дата: 05.12.02 10:31
Оценка:
Ну да, но это ограничение OS. Смысл в том, что в той статье, которую ты(вы) сначала указал(и), функции патчятся на предположении о том, что имеют стандартные команды на entry (и, кстати, тоже из хука). А вдруг другая версия winsock — и все. А Detours делают это аккуратно, дизассемблируя часть кода и выбирая метод патча.
Что и требуется. А вообще, стоило только немного копнуть "вглубь" win9x и мое мнение об этой системе резко изменилось.. И все таки она 16-ти битная Как говорится, "ищите в недрах".

F>А эта вещь (внедрение dll) как раз самая нужная... Надо, чтобы работало под Win98... В любом случае — спасибо за интересный материал. Я пока вижу один выход для использования Detours под любой Win-операционкой — постановка глобального хука (типа WH_GETMESSAGE) и уже из HookProc патчить функции... Будем разбираться...
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re: Winsock API hook
От: zozan  
Дата: 22.01.04 14:29
Оценка:
Интересно — а с помощью этого метода можно модифицировать исходящие/входящие пакеты?
Re[2]: Winsock API hook
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 22.06.04 19:50
Оценка:
Здравствуйте, zozan, Вы писали:

Z>Интересно — а с помощью этого метода можно модифицировать исходящие/входящие пакеты?


Можно
Re[3]: Winsock API hook
От: screw_cms Россия ICQ: 168185721
Дата: 22.06.04 20:53
Оценка: 22 (1)
Здравствуйте, Flamer, Вы писали:

F>Здравствуйте, zozan, Вы писали:


Z>>Интересно — а с помощью этого метода можно модифицировать исходящие/входящие пакеты?


F>Можно


Нельзя! В юзермоде ПАКЕТОВ не существует! Даже в TDI транспортах сетевые данные это всё ещё данные, просто отправляемый/принимаемый буфер. но никак не пакеты. Данные начинают превращаться в пакеты, спускаясь вних по TDI и окончательно превращаются в них, когда достигают NDIS

Ещё одна деталь — пример SPI от Microsoft (по крайней мере в MSDN 2001 Jul) глюкавый )) Может позже ситуация улучшилась (я не проверял) — будьте бдительны!

И в заключение — действительно, LSP в данном случае лучшее решение. Драйвер — круто. Detours — хак так и остаётся хаком.
Удачи!
When in doubt, use brute force. © Ken Thompson

Re[3]: Winsock API hook
От: screw_cms Россия ICQ: 168185721
Дата: 22.06.04 20:59
Оценка:
Да, чуть не забыл — вы будете удивлены, попробовав запустить пример LSP от Microsoft в Win98. Дело в том, что набор ф-ий ws2_32.dll в NT и в 98-ой отличаются. (напр.WSCWriteProviderOrder в ws2_32.dll для 9х ОТСУТСТВУЕТ!). Проблема решается поиском sporder.dll в PSDK (она содержит отсутсвующий функции) и LoadLibrary + GetProcAddress в зависимости от версии ОС. Отладка LSP дело тоже не самое лёгкое.

Ещё раз желаю удачи!
When in doubt, use brute force. © Ken Thompson

Re[4]: Winsock API hook
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 22.06.04 21:33
Оценка:
Здравствуйте, screw_cms, Вы писали:

_>Здравствуйте, Flamer, Вы писали:


F>>Здравствуйте, zozan, Вы писали:


Z>>>Интересно — а с помощью этого метода можно модифицировать исходящие/входящие пакеты?


F>>Можно


_>Нельзя! В юзермоде ПАКЕТОВ не существует!


Это да, точно. Я немножко другое имел в виду под термином "пакеты", поэтому и навлек на себя праведный гнев Я имел в виду уже сами данные, поступающие в юзер-мод. Естественно, что это далеко не пакет (заголовки уже обрезаны уровнями ниже и пр. мелочи)... Так что позвольте извиниться за недосказанность
Re[5]: Winsock API hook
От: zhuravl Россия  
Дата: 23.06.04 19:15
Оценка:
F>В общем, действительно чудо, вот только, если я все правильно понял, есть одно но (из README цитирую):

F>

F>The DLL injection functions are not compatible with either Windows 95,
F>Windows 98, or Windows ME as the Win9x platforms do not supports the
F>CreateRemoteThread API.


F>А эта вещь (внедрение dll) как раз самая нужная... Надо, чтобы работало под Win98... В любом случае — спасибо за интересный


Чтобы перехватывать вызовы send и recv, не понадобится CreateRemoteThread, нужно лишь пропатчить свой код по соответствующим адресам в контексте того процесса, который ты собираешься перехватывать. Как я понял, тебе нужно будет контролировать все процессы, поэтому для перехвата и внедрения в семействе NT придется для каждого процесса внедрять свой код и отслеживать запуск новых процессов. Внедрять код нужно в контекст процесса, предварительно выделив память функцией VirtualAlloc в этом контексте. Таким образом тебе нужно сделать позиционно-независимый код. Можно написать, например, на ассемблере.

Не рекомендую юзать detours для этой задачи, используй отечественную разработку hooklib товарища z0mbie. Можно найти в 7 журнале 29a (29a.host.sk). Также там можешь найти движок, чтобы создать позиционно-независимый код на си.

Есть второй вариант — юзать winpkfilter (ntkernel.com). Примитивный user-friendly интерфейс и будешь знать кто куда ходит
.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.