Сейчас на форуме: jinoweb (+6 невидимых)

 [email protected] —› Программирование —› Отлов сетевых пакетов
Посл.ответ Сообщение


Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 28 марта 2017 09:58
· Личное сообщение · #1

Есть необходимость фильтровать сетевую активность по определённым признакам. Как это грамотно программно организовать? Везде советуют Pcap, качнул magsys.co.uk/delphi/magmonsock.asp ловлю я нужные пакеты через WinPcap, через то самое единственное событие в TMonitorPCap - OnPacketEvent но нигде не могу найти SequenceNr пакета и их количество, принадлежащее одному ответу, чтобы собрать из нескольких пакетов 1 файл. Может кто подсказать куда копать?

ps: и вообще складывается ощущение, что если в систем несколько программ используют pcap, то половина пакетов вообще где-то теряются из виду... взять тот же HTTP Analyser, запускаем его и свою программу и она половину перестаёт видеть и он.
Каким образом с этим работать чтобы ничего не терялось?

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 21.5 (новичок), 9thx
Активность: 0.020
Статус: Участник

Создано: 28 марта 2017 10:36
· Личное сообщение · #2

Colasoft Capsa Enterprise, CommView - вот этими пользуюсь - удобные. От прочих отличаются наличием развитых возможностей и построителем пакетов в комплекте.




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 28 марта 2017 10:48 · Поправил: Isaev
· Личное сообщение · #3

negoday интересует не сторонний софт, а собственная реализация (тут ветка Программирование). Иначе я бы взял Wireshark и он всё прекрасно ловит и показывает...

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

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 21.5 (новичок), 9thx
Активность: 0.020
Статус: Участник

Создано: 28 марта 2017 12:40 · Поправил: negoday
· Личное сообщение · #4

Isaev пишет:
делаем маленькую утильку

вроде уже такое делали в свое время, называется WPF v.6.69F. Там есть свой скриптовый язык, которым можно модифицировать пакет и много чего ещё. Очень мощная штука, делалась для читерства, но, вероятно, подойдет для чего угодно. У меня, криворукого, даже получалось ей кое-что сделать Есть еще попроще, утилиты, называются DPE rcD Packet Editor v.1.4.2.0 и WPE PRO Alfa v.0.9a (но эти две очень простенькие, но ими тоже пользовался успешно).

| Сообщение посчитали полезным: bartolomeo


Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 28 марта 2017 13:00 · Поправил: Isaev
· Личное сообщение · #5

ещё раз
мне интересно как это реализовать самому чтобы можно было использовать в своих проектах, а не постоянно юзать посторонний софт

как это делается сторонним софтом и каким я прекрасно знаю и вопрос не в этом

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 28 марта 2017 14:05
· Личное сообщение · #6

Isaev
Парень пытается намекнуть, чтобы ты взял тот софт и отреверсил функционал.

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 28 марта 2017 14:51
· Личное сообщение · #7

Вообще конечно интересно, глянул WPF, похоже использует только WinSock2 без всяких там pcap'ов dll и драйверов... Разве этого достаточно, чтобы патчить пакеты налету, как там заявлено?
Поковырять его проблемно, т.к. он под VMProtect'ом, а самого автора похоже уже с нами нет

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh





Ранг: 622.6 (!), 521thx
Активность: 0.330.89
Статус: Участник
_Вечный_Студент_

Создано: 31 марта 2017 08:03
· Личное сообщение · #8

можно ссылку на этот WPF v.6.69F?

-----
Give me a HANDLE and I will move the Earth.




Ранг: 13.1 (новичок), 18thx
Активность: 0.020
Статус: Участник

Создано: 31 марта 2017 08:42
· Личное сообщение · #9

plutos
--> Link <--

| Сообщение посчитали полезным: plutos


Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 07 апреля 2017 15:15 · Поправил: Isaev
· Личное сообщение · #10

В общем немного поэкспериментировав выяснилось, что для работы с http в общем вполне достаточно сырых сокетов в режиме прослушивания...
Вот этот пример вполне справляется, можно отфильтровать пакеты по порту и IP и он вполне нормально их отлавливает и заглядывает внутрь.
Но если нам нужно работать с ssl, то на это уровне мы видим только шифрованные пакеты, чтобы ловить сразу расшифрованные, нужно хучить функции WinInet.
Думаю сплайсингом, чтобы хучить от любых процессов, а не подстраиватся постоянно под нужный.

Поправьте меня, если я где ошибаюсь, чтобы не ушёл в неправильном направлении)

Когда мы сплайсингом хучим функцию, можно как-то узнать от какого именно процесса мы её перехватили?

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh





Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 07 апреля 2017 15:22
· Личное сообщение · #11

А сплайсингом ты где собрался перехватить? В юзермоде? Вопрос тогда лишён смысла. В ядре? Получи PID процесса и всё.




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 07 апреля 2017 15:55
· Личное сообщение · #12

Archer пишет:
В юзермоде? Вопрос тогда лишён смысла.

это я пока не понимаю... я ещё теорию не дочитал
по той статье, как я понимаю, в юзермоде. из своей dll которая подгружается во все процессы через
создание удалённого потока и функцию LoadLibraryA...
Цитирую: Следовательно, функция LoadLibraryA полностью подходит для того, что бы она могла выступать в качестве функции потока. Так как она принимает указатель на строку в своём процессе, нам надо будет записать в память чужого процесса нашу строку и именем файла DLL. Это делается функцией WriteProcessMemory.

Добавлено спустя 5 минут
Ещё Rouse подкинул пару своих статей поизучать по теме:
- Реализация перехвата вызовов API
- Правильное применение сплайсинга при перехвате функций подготовленных к HotPatch
т.ч. я пока ушёл изучать теорию, если у кого что-то путное есть почитать по данной теме, не стесняйтесь

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: -0.7 (гость), 170thx
Активность: 0.540
Статус: Участник

Создано: 07 апреля 2017 17:16
· Личное сообщение · #13

WinPcap нормально работает, мб проблема в компоненте.
попробуйте собрать без компонента.
http://www.binarytides.com/code-packet-sniffer-c-winpcap/




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 07 апреля 2017 17:28
· Личное сообщение · #14

wireshark Opensource
если он делает то что вам надо, тянете исходники, изучаете, забираете нужный функционал себе

| Сообщение посчитали полезным: Crawler

Ранг: -0.7 (гость), 170thx
Активность: 0.540
Статус: Участник

Создано: 07 апреля 2017 17:36
· Личное сообщение · #15

reversecode пишет: wireshark Opensource

толстоватый он, вот вариант проще http://www.win10pcap.org/, выкинуть GUI и перевести немного кода на делфи




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 09 апреля 2017 01:16 · Поправил: Isaev
· Личное сообщение · #16

shellstorm пишет:
попробуйте собрать без компонента.

там же написано в конце статьи
When using SSL , the same data is encrypted.
А проблема именно в этом и без Pcap

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: -0.7 (гость), 170thx
Активность: 0.540
Статус: Участник

Создано: 09 апреля 2017 10:00
· Личное сообщение · #17

Isaev пишет: А проблема именно в этом и без Pcap

Так посмотрите какую нибудь открытую реализацию на базе pcap, софт же нормально работает, хоть тот же шарк.




Ранг: 338.5 (мудрец), 349thx
Активность: 2.112.42
Статус: Участник

Создано: 09 апреля 2017 10:18
· Личное сообщение · #18

Isaev

> Когда мы сплайсингом хучим функцию, можно как-то узнать от какого именно процесса мы её перехватили?

В контексте какого процесса выполняется точнее. Это высокоуровневые функции, поэтому они всегда будут в контексте процесса. Просто получить указатель на текущий процесс, вызвав системные апи. Обратную операцию выполнить сложнее, некоторые области памяти(hyperspace) не разделяются между процессами - это сессионное пространство, так например у каждого процесса своя память win32k, для доступа к которой не достаточно аттача к процессу, нужен аттачь к сессии.

> Думаю сплайсингом, чтобы хучить от любых процессов, а не подстраиватся постоянно под нужный.

Обычно фильтруется соккетный IOCTL на уровне сервиса NtDeviceIoCtl в UM.

-----
vx




Ранг: 2.0 (гость)
Активность: 0.010
Статус: Участник

Создано: 02 мая 2018 16:41
· Личное сообщение · #19

или WinSock2 чтобы патчить пакеты и/или raw sockets чтобы слушать, расшифровывать можно и после перехвата. вы же все усложнили.




Ранг: 110.8 (ветеран), 104thx
Активность: 0.090.01
Статус: Участник

Создано: 03 мая 2018 08:32 · Поправил: Rainbow
· Личное сообщение · #20

Есть крайне эффективная штука в системе для этих нужд - Layered Service Provider называется. SSL для нее прозрачен как стеклышко. Один минус - довольно трудно реализуется на практике, хотя кто знает, кому как. Если я не ошибаюсь, эту технологию используют некоторые аверы (NOD?) для мониторинка траффика.



Ранг: 7.1 (гость)
Активность: 0.020
Статус: Участник

Создано: 23 мая 2018 09:34
· Личное сообщение · #21

апну.
windivert он идет с примерами. работает на базе wfp. драйвер + библиотека для работы с ним. есть возможность реинжекта измененных данных. те менять на лету данные в трафике.


 [email protected] —› Программирование —› Отлов сетевых пакетов
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати