Тема: Сниффер
Показать сообщение отдельно
Старый 15.06.2010, 17:32   #58
abdula123
Пользователь
 
Регистрация: 22.03.2010
Сообщений: 41
Сказал(а) спасибо: 7
Поблагодарили 25 раз(а) в 15 сообщениях
abdula123 На верном пути
По умолчанию

Цитата:
Сообщение от Konctantin Посмотреть сообщение
Ностальгия...
Мне вот интересно, кто-то уже реализовал проксю или сниффер, или все сделано только в теории?
ну, как минимум, мой реализован и работает.

у других, думаю, тоже есть. вот только делиться и тем более выкладывать в паблик тут "почему-то" непринято


Цитата:
Сообщение от Konctantin Посмотреть сообщение
В даном случае использован проксификатор, с правилами следуещего содержания:

Если приложение wow.exe соединяется с конечной точкой 213.248.127.130:1119,
тогда перенаправить его на 127.0.0.1:9998 (Login - сервер)
иначе если приложение wow.exe соеденяется (адресс не указан, тобиш 0.0.0.0:0),
тогда перенаправляем его на 127.0.0.1:9999 (World - сервер)
лишние сложности.
у меня, например, нет разделения на login/world.
всё, что не начинается с нужного пакета - просто и тупо перекидывается без обработки. ну или можно на диск писать, если желание есть.


Цитата:
Значит, нам надо создать прокси, который бы создал 2 соединения, это соединение с клиентом и соединение с сервером:
* Соединение с клиентом, прокси выступает в качестве сервера и общается с клиентом
* Соединение с сервером, прокси выступает в качестве клиента и общается с сервером (Login - сервером)

но это все у нас пока процесс общения сервером авторизации. (213.248.127.130:1119)

Мы просто выступаем посредником и пересылаем пакеты при этом слушая их.

Но, клиент же должен подключится к World - серверу.
По этому, когда приходит пакет AUTH_REALM в котором приходит IPAdressort сервера к которому надо подключится,
запоминаем этот IPAdressort.
повторяю - лишние сложности!
для упрощения начать с такой конфигурации:

1. клиент у нас ровно одна штука, в начальный момент времени загружен, но не залогинен.

2. прокси запускается строго перед логином


в таком случае - какая разница, какой там адрес отдал клиенту сервер авторизации???
интересующее нас соединение, один черт, начнется с SMSG_AUTH_CHALLENGE
больше оно в нашем раскладе ни с чего начаться не может!

значит:
0. открываем (bind) сокет на нужном порту и ждем подключений (listen) от проксификатора

1. принимаем (accept) соединение от проксификатора

2. разбираем socks4 запрос, подключаемся (connect) к указанному адресу, отдаем проксификатору socks4-ответ "ОК"

3. тут я прошлый раз неправильно написал.
нужно делать так:
ждем, пока клиент что-нибудь пошлет, проверяем у этого "чего-нибудь" 3й+4й байты - и если они не равны опкоду CMSG_AUTH_SESSION (а не SMSG_AUTH_SESSION - такого опкода вообще нету) - забиваем на это соединение. ничего интересного тут не предвидится.
естественно продолжая прокидывать через него данные в обе стороны

5. если таки интересующие нас байты найдены - то ВЫВОДИМ НА КОНСОЛЬ МНОГО РАЗНОЦВЕТНЫХ БУКВ И РАДУЕМСЯ, ЧТО НАКОНЕЦ ЧТО-ТО ПОЛУЧИЛОСЬ.
пишем поток на диск (естественно каждое направление в свой файл. разделять на отдельные пакеты не нужно.)

6. летим подальше от любимого даларана, желательно в сторону пристани Моа'ки а оттуда - на самую дальнюю льдину, какую получится найти.

7. выходим из игры и смотрим на то месиво, что записалось в файлы.
ничего осмысленного, т.к. данные пошифрованы.
и скорее всего запишется очень мало данных, т.к. SMSG_SECOND_CONNECTION приходит почти сразу.
но прервый шаг уже сделан, в соединение вклинились!!!





вот так выглядит функция, занимающаяся пересылкой данных: http://paste2.org/p/878723 (шаги 2-3)

это, конечно, не C#, но представление дает

на yield не смотреть, они для реализации со-процедур (самопальной и весьма корявой, но "и так работает").

на read_session_key() и вытаскивания сидов из SMSG_AUTH_CHALLENGE не смотреть, она осталась со времен, когда по этим сидам я генерил крипто-состояния сам, а не читал их готовыми из памяти. не судьба убрать, "и так работает".

разбиение на пакеты, расшифровка пакетов, расшифровка вардена, логика, шифровка вардена, шифровка пакетов, сборка пакетов в поток - они все в WorldFilter

код коряв и страшен, как моя жизнь. однако "и так работает" ))

Последний раз редактировалось abdula123; 15.06.2010 в 18:32.
abdula123 вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
Konctantin (15.06.2010)