powered by simpleCommunicator - 2.0.48     © 2025 Programmizd 02
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Эмулятор сокета
16 сообщений из 16, страница 1 из 1
Эмулятор сокета
    #40106876
iskatelsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно покопаться в сетевом трафике некоторой программы (tcp). Не просто прослушать, а модифицировать.

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

Думаю вопрос можно решить поставив хуки на send / recv, вот только сервер рвет соединение, если по нему ничего не передается. И программа думает что пропал инет...

В этом я чесно говоря слабо разбираюсь, но подозреваю что если создать фейковый сокет, и передать его в connect вместо настоящего, то можно ее обмануть, заставив думать что она приконнекчена и все хорошо. Но мне не удалось найти описание того что из себя физически представляет сокет. Подозреваю что это некоторая структура в памяти... Можете накидать ссылок или пример какой?
...
Рейтинг: 0 / 0
Эмулятор сокета
    #40106905
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iskatelsql

Думаю вопрос можно решить поставив хуки на send / recv, вот только сервер рвет соединение, если по нему ничего не передается. И программа думает что пропал инет...


Вы правильно думаете, но почему сервер рвет соединение? Вы ведь вызываете оригинальные Send/Recv?

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

Это долгий путь в никуда, IMHO

Если у Вас есть прокси, можно перехватить функции connect (и getpeername) и подставлять туда в качестве адреса правильные значения (в коннект подставлять адрес своего прокси, в getpeername - адрес сервера), но это не лучше и не хуже, чем перехват send/recv.
Еще посмотрите функции, которые начинаются на WSA... - возможно программа использует их.
Можно попробовать создать на сетевом интерфейсе дополнительный IP, совпадающий с адресом сервера, а на него уже вешать прокси - этот путь я не исследовал, нужно разбираться с роутинигом, возможно, использовать второй компьютер
...
Рейтинг: 0 / 0
Эмулятор сокета
    #40106922
iskatelsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x1ca4064
Вы правильно думаете, но почему сервер рвет соединение? Вы ведь вызываете оригинальные Send/Recv?


Я хочу полностью отказаться от взаимодействия той программы с сетью.

Рвет по причине бездеятельности на соединении, я хочу все сетевое перетащить к себе. Да и вообще хочу изолировать ее от сети, пусть хавает что я ей даю. Для меня это утилита которая шифрует - дешифрует данные. Я за полный реверс, но реверс ее займет много времени и подводных камней нахватаюсь...

x1ca4064
connect (и getpeername) и подставлять туда в качестве адреса правильные значения

Нет, она даже в пакете передает апи и порт в открытом виде, я пробовал их подменять на реальные, но она учитывает что ей передали в функцию, и обменивается данными на основе этого айпи, собака страшная. (программа эта в длл) Китайцы не далеко ушли от индусов, там хитрая аутентификация в начале и все в открытом виде потом... Вот на этапе аутентификации все рушится если айпи/порт не тот.

Хотелось бы "малой кровью" обьяснить ей что она приконнекчена и счастлива, и пользовать ее как утилиту шифровки / дешифровки. Мне не нужно чтоб она реально коннектилась или передавала данные, мне нужно скормить ей сокет - обманку, чтоб она считала что на связи.
...
Рейтинг: 0 / 0
Эмулятор сокета
    #40106931
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iskatelsql
Да и вообще хочу изолировать ее от сети

Для этого есть интерфейс localhost (127.0.0.1). Он доступен только в пределах компа, извне на него не попасть.
...
Рейтинг: 0 / 0
Эмулятор сокета
    #40106945
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iskatelsql


Я хочу полностью отказаться от взаимодействия той программы с сетью.

Это будет другой этап, т.к. перехват send/recv подходит для
Нужно покопаться в сетевом трафике некоторой программы (tcp). Не просто прослушать, а модифицировать.


x1ca4064
connect (и getpeername) и подставлять туда в качестве адреса правильные значения

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

Как программа работает сейчас:
1. s=connect(1.2.3.4:5678)
2. Send(s,....'1.2.3.4:5678'...)
3. Recv(s,....)
4. goto 2
после перехвата:
1. s=HookedConnect(1.2.3.4:5678), а HookedConnect вызывает connect(127.0.0.1:5678)
т.е. программа думает, что конектится к 1.2.3.4, а на самом деле подключается к 127.0.0.1

Возможен вариант, что программа может брать актуальный IP от getpeername, поэтому getpeername тоже нужно перехватывать.
Вы уверенны, что программа ничего важного от сервера не получает?
...
Рейтинг: 0 / 0
Эмулятор сокета
    #40107112
iskatelsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x1ca4064
т.е. программа думает, что конектится к 1.2.3.4, а на самом деле подключается к 127.0.0.1


Тоже вариант, спасибо. Кстати не тоже самое ли получится, если без всяких хуков внести запись в файл hosts? Правда админские права не всегда есть...

Но вообще всетаки хотелось бы превратить ее из проги работающей с сеть в прогу работающую... с файлами что-ли.
...
Рейтинг: 0 / 0
Эмулятор сокета
    #40107115
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iskatelsql

Тоже вариант, спасибо. Кстати не тоже самое ли получится, если без всяких хуков внести запись в файл hosts? Правда админские права не всегда есть...

Нет - hosts это "мини dns": превращает имя хоста в IP
Но вообще всетаки хотелось бы превратить ее из проги работающей с сеть в прогу работающую... с файлами что-ли.

Перехватите:
1 connect - вместо него вызывайти CreateFile
2 send - writefile
3 recv - readfile
4 getpeername - возвращайте оригинальные параметры подключения
что сокет, что handle файла - это DWORD, поэтому проблем быть не должно, но нужно посмотреть, какие еще функции WinSock задействует программа.
...
Рейтинг: 0 / 0
Эмулятор сокета
    #40107131
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iskatelsql,
У Вас библиотека 32 или 64 бита?
...
Рейтинг: 0 / 0
Эмулятор сокета
    #40107133
iskatelsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x1ca4064
У Вас библиотека 32 или 64 бита?


32
...
Рейтинг: 0 / 0
Эмулятор сокета
    #40107141
iskatelsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x1ca4064
1 connect - вместо него вызывайти CreateFile
2 send - writefile
3 recv - readfile
4 getpeername - возвращайте оригинальные параметры подключения


Так собственно мой вопрос то был о том что, как я понимаю, сокет содержит какое-то поле типа флага, показывающее что он "на связи", или я не прав? Как программа понимает что соединение закрыто? Если вызвать CreateFile вместо connect не отвалится ли тутже программа, подумав что ее дисконнектнули? Собственно за этим я и хотел создать сокет - обманку, не знаю как физически программа понимает что соединение еще есть.
...
Рейтинг: 0 / 0
Эмулятор сокета
    #40107162
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iskatelsql

Так собственно мой вопрос то был о том что, как я понимаю, сокет содержит какое-то поле типа флага, показывающее что он "на связи", или я не прав?


Функции WinSock возвращают код ошибки: если Send/Recv вернет SOCKET_ERROR, тогда можно вызвать WSAGetLastError и узнать причин.

Сам сокет структуры не имеет - это просто число/handle. С ним работают через функции WinSock
...
Рейтинг: 0 / 0
Эмулятор сокета
    #40107165
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iskatelsql
Как программа понимает что соединение закрыто?

В реале нет никакого соединения, это логическое понятие. Есть принимаемые/отправляемые пакеты. В нормальном режиме противоположная сторона сообщает что соединение закрыто. Если этого нет, то надо выждать истечение заданного таймаута, который говорит что на той стороне никого не осталось.
...
Рейтинг: 0 / 0
Эмулятор сокета
    #40107206
iskatelsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x1ca4064
Сам сокет структуры не имеет - это просто число/handle. С ним работают через функции WinSock

Ясно понятно - сам выдумал проблему которой мучаю себе голову... Чтож, бывает.
...
Рейтинг: 0 / 0
Эмулятор сокета
    #40107228
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
x1ca4064


Перехватите:
1 connect - вместо него вызывайти CreateFile
2 send - writefile
3 recv - readfile
4 getpeername - возвращайте оригинальные параметры подключения
что сокет, что handle файла - это DWORD, поэтому проблем быть не должно, но нужно посмотреть, какие еще функции WinSock задействует программа.
select на что замените?
...
Рейтинг: 0 / 0
Эмулятор сокета
    #40107259
x1ca4064
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Barlone
select на что замените?


С select, как раз, особых проблем не вижу - можно считать, что файл доступен на запись всегда, а на чтение, если текущая позиция меньше длины. Но эмуляция работы сокета файлом - трудный путь, возможно, не всегда проходимый.
...
Рейтинг: 0 / 0
Эмулятор сокета
    #40107346
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Barlone
select на что замените?

WaitForMultilleObjects, вестимо.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Эмулятор сокета
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]