PDA

Просмотр полной версии : Алгоритмы перехвата трафика. L2PH.


Diverclaim
22.06.2011, 21:05
Добрый день.
"Задумал" написать простенький сниффер трафика одной игры. Раньше делал для другой игры прокси - отдельной приложение на C#, и чтобы клиент соединялся именно с прокси, приходилось открывать бинарники клиента и заменять там ип сервера. Такой метод меня очень задолбал, поэтому ищу другие способы перехвата трафика (с возможностью отослать клиенту или серверу любые данные, а также блокировать проходящие пакеты). Может кто-нибудь рассказать об алгоритмах перехвата пакетов в l2ph? Если с инжектом длл и хуками на recv() send() все ясно (хукать c# не сможет (только через ****), придется писать на плюсах длл, а программу на шарпе), то с ЛСП не очень (самый интересный способ :))... И еще очень интересно как программа "общается" с ддлкой (в случае инжекта например) и получает перехваченные данные от длл? (расшифровывать пакеты буду в самой программе, благо алгоритмы уже есть).
P.S. Читал ЗДЕСЬ (http://coderx.ru/showthread.php?t=5234), ТАМ (http://coderx.ru/showthread.php?t=1609) и ТУТ (http://coderx.ru/showthread.php?t=1328). В последней теме как раз обсуждался лсп перехват, и некто даже собирался выложить исходники (без "лишнего"), однако лсп попал сразу в л2пх, и достать нужное среди исходников пакетхака очень трудно.
Заранее спасибо за любую помощь)

destructor
22.06.2011, 22:12
И еще очень интересно как программа "общается" с ддлкой стопицот вариантов.
http://www.google.ru/search?client=opera&rls=ru&q=%D0%BE%D0%B1%D0%BC%D0%B5%D0%BD+%D0%B4%D0%B0%D0%B D%D0%BD%D1%8B%D0%BC%D0%B8+%D0%BC%D0%B5%D0%B6%D0%B4 %D1%83+%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5% D0%BD%D0%B8%D1%8F%D0%BC%D0%B8&sourceid=opera&ie=utf-8&oe=utf-8&channel=suggest

Добавлено через 3 минуты
хукать c# не сможет (только через ****)хуки сводятся к "байтики в массив написать".
в c# с этим какието проблемы?

придется писать на плюсах длл, а программу на шарпена шарпе низя написать длл?

Diverclaim
22.06.2011, 22:27
хуки сводятся к "байтики в массив написать".
в c# с этим какието проблемы?

Предположим я знаю что хукать, но перехватить то не смогу... Нельзя сделать jmp на метод в managed коде. Есть конечно разные типы хуков, можно конечно захукать вообще не внедряя длл, но мне желательно попроще способ (и да таки я прошу не код, а идею способа).

на шарпе низя написать длл?Можно. И будет тебе managed-dll. Одно "но" - мсил выполняется только под виртуалкой дотнета. Там не машинный код, поэтому "просто заинжектить" не получится. Есть несколько способов (EasyHook например), но это и называется через ****

destructor
22.06.2011, 22:38
тоесть эту длл низя будет использовать в обычном приложении?

Hint
22.06.2011, 22:51
тоесть эту длл низя будет использовать в обычном приложении?

Только если через жопу, потому что .NET DLL и Win32 DLL не имеют практически ничего общего. Если кому-то очень надо вызывать функции .NET библиотеки из Win32 приложения, то обычно взаимодействие реализуют через COM, но это не катит в случае готового приложения.

Diverclaim
22.06.2011, 22:58
http://www.codingthewheel.com/archives/how-to-inject-a-managed-assembly-dll можно так, но это очень через жопу... Тут вообще-то инжектится обычная dll, которая вызывает методы managed dll.
Все вопросы еще в силе! (кроме "И еще очень интересно как программа "общается" с ддлкой")

destructor
22.06.2011, 23:15
тамже компилятор легко умеет делать переходники managed\native.
"смешанное приложение" или както так хз.
инжектилка для экста так написана.

или так только в плюсах можно?

Добавлено через 12 минут
Все вопросы еще в силе!ну в с# есть проблемы,
выходит проще\быстрее написать на с++(даже если незнаешь язык).

но тогда какие могут быть вопросы?
джампы на send\recv вроде отлично ставятся :D


у тебя 3 варианта.
1. прокси через свой сервер (можно развернуть трафик сторонним софтом)
2. хуки сокетных апи (классика)
3. лсп перехват (тоже самое что пункт 2, но инжектит полуавтоматически).

остальное экзотика.

Diverclaim
22.06.2011, 23:40
Виндовое приложение проще/быстрее написать на плюсах ? омг... не буду разводить холиваров, но я предпологаю написать длл на плюсах, а "окошечки" на шарпе.
тамже компилятор легко умеет делать переходники managed\native.
"смешанное приложение" или както так хз.
инжектилка для экста так написана.

или так только в плюсах можно? Да, только в плюсах. C++/CLI это называется. Но и ту длл тоже нельзя "просто так заинжектить".

destructor
22.06.2011, 23:45
Виндовое приложение проще быстрее написать на плюсах ? омг... не буду разводить холиваров, но я предпологаю написать длл на плюсах, а "окошечки" на шарпе.я про длл и говорил

Добавлено через 2 минуты
на счет "написать приложение" можно поспорить, т.к. это от приложения зависит=)

Diverclaim
22.06.2011, 23:46
я про длл и говорил
А ну это то понятно) выбора то и нет)
Меня еще интересует лсп перехват. Лсп модуль вроде перехватывает абсолютно весь трафик, так? Как же тогда определить какие именно пакеты ловить? Хукать connect и запоминать ип сервера?
на счет "написать приложение" можно поспорить, т.к. это от приложения зависит=)
Под виндовым приложение я имел ввиду приложение активно использующее разнообразные wingui элементы и не использующее низкоуровнивые фичи ОС (типа драйверов и т.д.). На плюсах это все равно костыли, даже если взять Qt, и не обсуждать "сборку мусора" (кого-то устраивает, кого-то нет).

destructor
23.06.2011, 00:01
Лсп модуль вроде перехватывает абсолютно весь трафик, так?тут и да и нет.
при установке модуля длл инжектится во все процесы.
но в каждую отдельновзятую длл поступают данные только от своего процеса.
очень похоже на setwindowshookex

danger: это написано чисто телепатически, я никогда не юзал\не читал лсп перехват


Хукать connect и запоминать ип сервера?да. смотрим ип\порт и получаем нужный сокет.

Добавлено через 3 минуты
активно использующее разнообразные wingui элементы и не использующее...чтобы свистело, пердело и никуя не делало:D

Hint
23.06.2011, 00:12
А ну это то понятно) выбора то и нет)
Меня еще интересует лсп перехват. Лсп модуль вроде перехватывает абсолютно весь трафик, так? Как же тогда определить какие именно пакеты ловить? Хукать connect и запоминать ип сервера?

В каждом процессе свой экземпляр, свои переменные. Определяешь имя процесса (имя файла), запоминаешь, действуешь по обстановке. Если процесс не тот, то можно вообще не регистрировать обработчики. Каждая операция идентифицируется сокетом. При connect смотришь IP и Port, решаешь, интересно ли тебе соединение, запоминаешь сокет. При чтении и записи сравниваешь сокеты.