|
Эмулятор сокета
|
|||
---|---|---|---|
#18+
Нужно покопаться в сетевом трафике некоторой программы (tcp). Не просто прослушать, а модифицировать. Проблема в том, что адрес сервера как-то используется в самом этом трафике, и написать локальный прокси не выходит, дисконнектится с ошибкой после первого же ответа сервера. Думаю вопрос можно решить поставив хуки на send / recv, вот только сервер рвет соединение, если по нему ничего не передается. И программа думает что пропал инет... В этом я чесно говоря слабо разбираюсь, но подозреваю что если создать фейковый сокет, и передать его в connect вместо настоящего, то можно ее обмануть, заставив думать что она приконнекчена и все хорошо. Но мне не удалось найти описание того что из себя физически представляет сокет. Подозреваю что это некоторая структура в памяти... Можете накидать ссылок или пример какой? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2021, 22:31 |
|
Эмулятор сокета
|
|||
---|---|---|---|
#18+
iskatelsql Думаю вопрос можно решить поставив хуки на send / recv, вот только сервер рвет соединение, если по нему ничего не передается. И программа думает что пропал инет... Вы правильно думаете, но почему сервер рвет соединение? Вы ведь вызываете оригинальные Send/Recv? В этом я чесно говоря слабо разбираюсь, но подозреваю что если создать фейковый сокет, и передать его в connect вместо настоящего, то можно ее обмануть, заставив думать что она приконнекчена и все хорошо. Но мне не удалось найти описание того что из себя физически представляет сокет. Это долгий путь в никуда, IMHO Если у Вас есть прокси, можно перехватить функции connect (и getpeername) и подставлять туда в качестве адреса правильные значения (в коннект подставлять адрес своего прокси, в getpeername - адрес сервера), но это не лучше и не хуже, чем перехват send/recv. Еще посмотрите функции, которые начинаются на WSA... - возможно программа использует их. Можно попробовать создать на сетевом интерфейсе дополнительный IP, совпадающий с адресом сервера, а на него уже вешать прокси - этот путь я не исследовал, нужно разбираться с роутинигом, возможно, использовать второй компьютер ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2021, 00:16 |
|
Эмулятор сокета
|
|||
---|---|---|---|
#18+
x1ca4064 Вы правильно думаете, но почему сервер рвет соединение? Вы ведь вызываете оригинальные Send/Recv? Я хочу полностью отказаться от взаимодействия той программы с сетью. Рвет по причине бездеятельности на соединении, я хочу все сетевое перетащить к себе. Да и вообще хочу изолировать ее от сети, пусть хавает что я ей даю. Для меня это утилита которая шифрует - дешифрует данные. Я за полный реверс, но реверс ее займет много времени и подводных камней нахватаюсь... x1ca4064 connect (и getpeername) и подставлять туда в качестве адреса правильные значения Нет, она даже в пакете передает апи и порт в открытом виде, я пробовал их подменять на реальные, но она учитывает что ей передали в функцию, и обменивается данными на основе этого айпи, собака страшная. (программа эта в длл) Китайцы не далеко ушли от индусов, там хитрая аутентификация в начале и все в открытом виде потом... Вот на этапе аутентификации все рушится если айпи/порт не тот. Хотелось бы "малой кровью" обьяснить ей что она приконнекчена и счастлива, и пользовать ее как утилиту шифровки / дешифровки. Мне не нужно чтоб она реально коннектилась или передавала данные, мне нужно скормить ей сокет - обманку, чтоб она считала что на связи. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2021, 05:06 |
|
Эмулятор сокета
|
|||
---|---|---|---|
#18+
iskatelsql Да и вообще хочу изолировать ее от сети Для этого есть интерфейс localhost (127.0.0.1). Он доступен только в пределах компа, извне на него не попасть. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2021, 08:19 |
|
Эмулятор сокета
|
|||
---|---|---|---|
#18+
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 тоже нужно перехватывать. Вы уверенны, что программа ничего важного от сервера не получает? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2021, 10:00 |
|
Эмулятор сокета
|
|||
---|---|---|---|
#18+
x1ca4064 т.е. программа думает, что конектится к 1.2.3.4, а на самом деле подключается к 127.0.0.1 Тоже вариант, спасибо. Кстати не тоже самое ли получится, если без всяких хуков внести запись в файл hosts? Правда админские права не всегда есть... Но вообще всетаки хотелось бы превратить ее из проги работающей с сеть в прогу работающую... с файлами что-ли. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2021, 18:02 |
|
Эмулятор сокета
|
|||
---|---|---|---|
#18+
iskatelsql Тоже вариант, спасибо. Кстати не тоже самое ли получится, если без всяких хуков внести запись в файл hosts? Правда админские права не всегда есть... Нет - hosts это "мини dns": превращает имя хоста в IP Но вообще всетаки хотелось бы превратить ее из проги работающей с сеть в прогу работающую... с файлами что-ли. Перехватите: 1 connect - вместо него вызывайти CreateFile 2 send - writefile 3 recv - readfile 4 getpeername - возвращайте оригинальные параметры подключения что сокет, что handle файла - это DWORD, поэтому проблем быть не должно, но нужно посмотреть, какие еще функции WinSock задействует программа. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2021, 18:33 |
|
Эмулятор сокета
|
|||
---|---|---|---|
#18+
iskatelsql, У Вас библиотека 32 или 64 бита? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2021, 19:08 |
|
Эмулятор сокета
|
|||
---|---|---|---|
#18+
x1ca4064 У Вас библиотека 32 или 64 бита? 32 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2021, 19:13 |
|
Эмулятор сокета
|
|||
---|---|---|---|
#18+
x1ca4064 1 connect - вместо него вызывайти CreateFile 2 send - writefile 3 recv - readfile 4 getpeername - возвращайте оригинальные параметры подключения Так собственно мой вопрос то был о том что, как я понимаю, сокет содержит какое-то поле типа флага, показывающее что он "на связи", или я не прав? Как программа понимает что соединение закрыто? Если вызвать CreateFile вместо connect не отвалится ли тутже программа, подумав что ее дисконнектнули? Собственно за этим я и хотел создать сокет - обманку, не знаю как физически программа понимает что соединение еще есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2021, 19:59 |
|
Эмулятор сокета
|
|||
---|---|---|---|
#18+
iskatelsql Так собственно мой вопрос то был о том что, как я понимаю, сокет содержит какое-то поле типа флага, показывающее что он "на связи", или я не прав? Функции WinSock возвращают код ошибки: если Send/Recv вернет SOCKET_ERROR, тогда можно вызвать WSAGetLastError и узнать причин. Сам сокет структуры не имеет - это просто число/handle. С ним работают через функции WinSock ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2021, 21:03 |
|
Эмулятор сокета
|
|||
---|---|---|---|
#18+
iskatelsql Как программа понимает что соединение закрыто? В реале нет никакого соединения, это логическое понятие. Есть принимаемые/отправляемые пакеты. В нормальном режиме противоположная сторона сообщает что соединение закрыто. Если этого нет, то надо выждать истечение заданного таймаута, который говорит что на той стороне никого не осталось. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2021, 21:17 |
|
Эмулятор сокета
|
|||
---|---|---|---|
#18+
x1ca4064 Сам сокет структуры не имеет - это просто число/handle. С ним работают через функции WinSock Ясно понятно - сам выдумал проблему которой мучаю себе голову... Чтож, бывает. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 08:05 |
|
Эмулятор сокета
|
|||
---|---|---|---|
#18+
x1ca4064 Перехватите: 1 connect - вместо него вызывайти CreateFile 2 send - writefile 3 recv - readfile 4 getpeername - возвращайте оригинальные параметры подключения что сокет, что handle файла - это DWORD, поэтому проблем быть не должно, но нужно посмотреть, какие еще функции WinSock задействует программа. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 10:18 |
|
Эмулятор сокета
|
|||
---|---|---|---|
#18+
Barlone select на что замените? С select, как раз, особых проблем не вижу - можно считать, что файл доступен на запись всегда, а на чтение, если текущая позиция меньше длины. Но эмуляция работы сокета файлом - трудный путь, возможно, не всегда проходимый. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2021, 11:52 |
|
|
start [/forum/topic.php?fid=16&fpage=2&tid=1339620]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
others: | 242ms |
total: | 378ms |
0 / 0 |