PDA

Просмотр полной версии : Повторное использование сокетов


Ptica
28.03.2008, 16:46
Привет всем!
Мониторю трафик клиента и вижу поразительную вещь: клиент при соединении с логин и гейм серверами использует один и тот же сокет :o (closesocket не вызывается). Подскажите плиз как такое возможно? И как такое можно реализовать на Delphi? Прошу к гуглю не отсылать... уже все облазил на тему reuse socket и ниче толкового не нашел...

ratvier
28.03.2008, 17:27
клиент при соединении с логин и гейм серверами использует один и тот же сокет :o (closesocket не вызывается).
Сильный аргумент :crazy:

Ptica
28.03.2008, 19:04
Млин, я проверял хэндл сокета один и тотже ))

Добавлено спустя 32 минуты 39 секунд:
Если хочешь поставь хуки на recv и send и убедишься))

ratvier
28.03.2008, 19:20
The DisconnectEx function closes a connection on a socket, and allows the socket handle to be reused.

http://msdn2.microsoft.com/en-us/library/ms737757(VS.85 (http://msdn2.microsoft.com/en-us/library/ms737757(VS.85)).aspx

Note This function is a Microsoft-specific extension to the Windows Sockets specification.

А значит использовать эту функцию - плохая практика.

Ptica
28.03.2008, 19:34
Спасибо тебе огроменное очень помог!!!!!!!!!! А я походу совсем старый стал :)

Добавлено спустя 1 минуту 55 секунд:
с меня пиво если вдруг будешь в наших краях :)

xkor
28.03.2008, 22:33
Ptica, ты мне ток одно скажи а какая разница сколько сокетов клиент юзает?), или по твоему об этом знает сервер и будет так палить?, или просто думал что так нельзя и данное наблюдение сильно потрясло?)

Ptica
31.03.2008, 11:42
Нет, мне для обхода антибота на одном оч. известном сервере нужно как можно точнее эмулировать клиент, т.е. антибот и состоит в том, что сам перехватывает recv и send и запоминает где-то с какого сокета был коннект на логин, а дальше при коннекте на гейм сравнивает... и соединение обрывает если не тот сокет.

Добавлено спустя 8 минут 33 секунды:
Re:
Ptica, ты мне ток одно скажи а какая разница сколько сокетов клиент юзает?), или по твоему об этом знает сервер и будет так палить?, или просто думал что так нельзя и данное наблюдение сильно потрясло?)
Ты меня совсем за идиота держишь :D

dmitry501
31.03.2008, 11:49
по поводу коннектов с одного сокета - точно лажа.
Если сервер имеет не один гейм-сервер, то после логина на логин-сервер выводится список серверов и к каждому из них поднимается коннект, в это время в таблице отражается пинг.

Ptica
31.03.2008, 12:29
по поводу коннектов с одного сокета - точно лажа.
Если сервер имеет не один гейм-сервер, то после логина на логин-сервер выводится список серверов и к каждому из них поднимается коннект, в это время в таблице отражается пинг.

Какой коннект?)) Это же пинг))

Добавлено спустя 17 минут 8 секунд:
Re: Повторное использование сокетов
dmitry501Вы наверно что-то напутали ICMP соединение не устанавливает

31.03.2008, 22:45
Нет, мне для обхода антибота на одном оч. известном сервере нужно как можно точнее эмулировать клиент, т.е. антибот и состоит в том, что сам перехватывает recv и send и запоминает где-то с какого сокета был коннект на логин, а дальше при коннекте на гейм сравнивает... и соединение обрывает если не тот сокет.


Если не трудно сказать, то на каком именно сервере ?
Подобная защита очень легко обходится.

31.03.2008, 22:48
DisconnectEx давно известная ф-ция, но и ее перехватить как нечего делать.

dmitry501
01.04.2008, 05:28
Ничего я не напутал. Я имел ввиду игровой пинг, NetPing.
При входе в игру обратите внимание на цифры справа от серверов в списке.
Вот это. И к каждому из серверов создается соединение и происходит обмен 2-мя пакетами для получения этих цифр. Одновременно. Из разных клиентских сокетов.

Ptica
01.04.2008, 12:27
Сори да действительно это я затупил пролистал лог еще раз:
Сокет send:3532 length:7 flags:0
>> 07 00 00 FE FF FF FF
Сокет send:3532 length:7 flags:0
>> 07 00 00 FE FF FF FF
Сокет send:3532 length:7 flags:0
>> 07 00 00 FE FF FF FF
Сокет send:3532 length:7 flags:0
>> 07 00 00 FE FF FF FF
Сокет send:3532 length:7 flags:0
>> 07 00 00 FE FF FF FF
Сокет send:3532 length:7 flags:0
>> 07 00 00 FE FF FF FF
Сокет send:3532 length:7 flags:0
>> 07 00 00 FE FF FF FF
Сокет send:3532 length:7 flags:0
>> 07 00 00 FE FF FF FF
Вот это по видимому и есть те пинги о которых Вы и говорите...
Но! Посмотрите на остальной лог вот начало (логин сервер)
Сокет recv:3476 length:2 flags:0
Result:2
Bufer:89851984
<< AB 00
Сокет recv:3476 length:1 flags:2
Result:1
Bufer:1235872
<< 00
Сокет recv:3476 length:169 flags:0
Result:169
Bufer:89851986
<< 00 0D 5B CB 37 5A 78 00 00 07 CB 63 DA DF 80 26 A5 2A EB E8 EB BA 0B 6D 31 85 EA BD F3 F7 A1 0D 9E CA 69 00 14 FB AA B4 F5 7D E9 8C F8 6D 46 0F 6B D9 18 A7 6A 3B 1D 98 03 1A 22 E3 52 C4 69 5C 72 A4 DB A9 EC 30 1E 60 4B 42 69 6D A3 E4 A2 01 EA B7 93 94 96 44 C4 70 41 3C 0E 49 A6 B2 DF EC 31 C9 A8 E9 75 BD 0A 86 F1 54 12 FC 1F A8 37 DD 04 5D A5 39 46 56 3C FF 84 38 D7 1A 0E 3F 68 08 0D D8 F9 54 96 39 90 49 22 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
Видим хэндл сокета - 3476
Далее гейм сервер:
Сокет send:3476 length:81 flags:0
>> 51 00 3D E3 92 D5 F6 C0 2E 52 F7 AC 3F 61 C0 C1 F0 02 1E C3 B2 E1 C2 C5 2B 4B EE A2 31 5C FD F4 C5 31 2D EA 9B 82 A1 98 76 16 B3 F1 62 5E FF A7 96 27 3B FB 8A D8 FB C2 2C 4B EE A2 31 0D AC F7 C6 77 6B AC DD 92 B1 84 6A 1C B9 AD 3E 0F AE C2 F3
Сокет recv:3476 length:16384 flags:0
Result:18
Bufer:12498192
<< 12 00 E2 4C 3D 1B 3F 67 89 9A 6C D7 44 45 E4 88 B9 2E
Сокет recv:3476 length:16384 flags:0
Result:11
Bufer:12498192
<< 0B 00 31 70 68 5E 35 6F 81 92 94
Сокет recv:3476 length:16384 flags:0
Как видим хэндл сокета не изменился - 3476
Как видите соединение с логин и гейм идут по одному сокету а "пинг" по другому.......

dmitry501
01.04.2008, 13:23
Ну всё выяснили, и что дальше? Для чего это все? Вряд ли сервер каким-либо образом проверяет Handle сокета клиента. Если уж там есть подобная проверка то только на совпадение IP:Port. Или ты хочешь оставить штатный антибот и убедить его что бот - клиент? По-моему гораздо проще эмулировать уже выходной трафик от антибота, а самого антибота грохнуть. Ведь он наверное не просто ограничивается, перехватывая TCP-соединение, а еще и проверяет файлы, их crc, запущенные проги и т.д.

Ptica
01.04.2008, 14:11
Выкинуть антибот нельзя прежде всего потому что он дополнительно криптует трафик

Добавлено спустя 28 минут 54 секунды:
Re: Повторное использование сокетов
>По-моему гораздо проще эмулировать уже выходной трафик от антибота, а самого антибота грохнуть.
Так дело в том что не проще, антибот оч. хорошо защищен Armadillo 3.8, отрипать саму процедуру шифрации Armadillo не дает. Но вот на инжект проверку написать никто видно не удосужился)))

04.04.2008, 22:11
На каком сервере эта защита стоит ?

PanAm
06.04.2008, 03:06
Armadillo 3.8 хоть и муторно, но снимается. темболее такая древняя

Ptica
07.04.2008, 12:01
PanAm, я в этом деле нофенький) форумы полистал по поводу взлома armadilo, посмотрел скока люди хотят за его снятие и быстренько закрыл)
Anubis, пиши в асю