Добрый день.
"Задумал" написать простенький сниффер трафика одной игры. Раньше делал для другой игры прокси - отдельной приложение на C#, и чтобы клиент соединялся именно с прокси, приходилось открывать бинарники клиента и заменять там ип сервера. Такой метод меня очень задолбал, поэтому ищу другие способы перехвата трафика (с возможностью отослать клиенту или серверу любые данные, а также блокировать проходящие пакеты). Может кто-нибудь рассказать об алгоритмах перехвата пакетов в l2ph? Если с инжектом длл и хуками на recv() send() все ясно (хукать c# не сможет (только через ****), придется писать на плюсах длл, а программу на шарпе), то с ЛСП не очень (самый интересный способ )... И еще очень интересно как программа "общается" с ддлкой (в случае инжекта например) и получает перехваченные данные от длл? (расшифровывать пакеты буду в самой программе, благо алгоритмы уже есть).
P.S. Читал ЗДЕСЬ, ТАМ и ТУТ. В последней теме как раз обсуждался лсп перехват, и некто даже собирался выложить исходники (без "лишнего"), однако лсп попал сразу в л2пх, и достать нужное среди исходников пакетхака очень трудно.
Заранее спасибо за любую помощь)
хуки сводятся к "байтики в массив написать".
в c# с этим какието проблемы?
Предположим я знаю что хукать, но перехватить то не смогу... Нельзя сделать jmp на метод в managed коде. Есть конечно разные типы хуков, можно конечно захукать вообще не внедряя длл, но мне желательно попроще способ (и да таки я прошу не код, а идею способа).
Цитата:
на шарпе низя написать длл?
Можно. И будет тебе managed-dll. Одно "но" - мсил выполняется только под виртуалкой дотнета. Там не машинный код, поэтому "просто заинжектить" не получится. Есть несколько способов (EasyHook например), но это и называется через ****
тоесть эту длл низя будет использовать в обычном приложении?
Только если через жопу, потому что .NET DLL и Win32 DLL не имеют практически ничего общего. Если кому-то очень надо вызывать функции .NET библиотеки из Win32 приложения, то обычно взаимодействие реализуют через COM, но это не катит в случае готового приложения.
http://www.codingthewheel.com/archiv...d-assembly-dll можно так, но это очень через жопу... Тут вообще-то инжектится обычная dll, которая вызывает методы managed dll. Все вопросы еще в силе! (кроме "И еще очень интересно как программа "общается" с ддлкой")
Последний раз редактировалось Diverclaim, 22.06.2011 в 23:01.
тамже компилятор легко умеет делать переходники managed\native.
"смешанное приложение" или както так хз.
инжектилка для экста так написана.
или так только в плюсах можно?
Добавлено через 12 минут
Цитата:
Сообщение от Diverclaim
Все вопросы еще в силе!
ну в с# есть проблемы,
выходит проще\быстрее написать на с++(даже если незнаешь язык).
но тогда какие могут быть вопросы?
джампы на send\recv вроде отлично ставятся
у тебя 3 варианта.
1. прокси через свой сервер (можно развернуть трафик сторонним софтом)
2. хуки сокетных апи (классика)
3. лсп перехват (тоже самое что пункт 2, но инжектит полуавтоматически).
остальное экзотика.
__________________
Шожиделать.. ботить хочется..
Последний раз редактировалось destructor, 22.06.2011 в 23:15.
Причина: Добавлено сообщение
Виндовое приложение проще/быстрее написать на плюсах ? омг... не буду разводить холиваров, но я предпологаю написать длл на плюсах, а "окошечки" на шарпе.
Цитата:
тамже компилятор легко умеет делать переходники managed\native.
"смешанное приложение" или както так хз.
инжектилка для экста так написана.
или так только в плюсах можно?
Да, только в плюсах. C++/CLI это называется. Но и ту длл тоже нельзя "просто так заинжектить".
Последний раз редактировалось Diverclaim, 22.06.2011 в 23:43.
Виндовое приложение проще быстрее написать на плюсах ? омг... не буду разводить холиваров, но я предпологаю написать длл на плюсах, а "окошечки" на шарпе.
я про длл и говорил
Добавлено через 2 минуты
на счет "написать приложение" можно поспорить, т.к. это от приложения зависит=)
__________________
Шожиделать.. ботить хочется..
Последний раз редактировалось destructor, 22.06.2011 в 23:45.
Причина: Добавлено сообщение
А ну это то понятно) выбора то и нет)
Меня еще интересует лсп перехват. Лсп модуль вроде перехватывает абсолютно весь трафик, так? Как же тогда определить какие именно пакеты ловить? Хукать connect и запоминать ип сервера?
Цитата:
на счет "написать приложение" можно поспорить, т.к. это от приложения зависит=)
Под виндовым приложение я имел ввиду приложение активно использующее разнообразные wingui элементы и не использующее низкоуровнивые фичи ОС (типа драйверов и т.д.). На плюсах это все равно костыли, даже если взять Qt, и не обсуждать "сборку мусора" (кого-то устраивает, кого-то нет).
Последний раз редактировалось Diverclaim, 22.06.2011 в 23:49.