Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Как различить пакеты ?


Автор: SharedNoob 25.6.2007, 13:39
Доброго времени суток. 
Пишу Античит для сетевой игры. 
Есть локальная сеть, допустим IP адрес компьютера игрока 192.168.0.2 , а ip сервера игры 192.168.0.1. 
Далее так. 
Запускается клиент игры, пакеты которого я направляю на клиент античита то есть на 192.168.0.2:6661, Клиент античита перенаправляет пакеты на сервер античита 192.168.0.1:7771, Сервер античита проверяет IP с которого присланы пакеты, если Ip разрешено(или к примеру не запрещено) подключатся к серверу игры то он перенаправляет пакеты на порт сервера игры 192.168.0.1:4444, иначе откидывает эти пакеты. 

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

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

Для мапинга пакетов использую Indy IdMappedPortTCP. 

Подсткажыте как отличить пакеты посланные читом от пакетов посланных клинетом игры НА ЛОКАЛЬНОЙ МАШИНЕ?

Зараннее благодарен.

Автор: Snowy 25.6.2007, 14:54
Чтобы избавиться от дублирования пакетов, введи порядковый байт-нумератор.
То есть каждый следующий пакет должен предворяться байтом, значение которого на 1 выше предыдущего.
Когда байт дойдёт до 255, он сбросится в 0 и пойдёт заново.
Если чит дублирует пакеты, то он продублирует и байт-нумератор пакета, оставив его прежним.
По данному поведению сервер сможет отличить нормальный пакет от дубликата.
Подобная система применяется в протоколе ICQ для защиты от записи/воспроизведения пакетов.

Добавлено через 1 минуту и 27 секунд
ЗЫ. И не забудь закрыть файрволом настоящий порт сервера от доступа извне.

Автор: _hunter 25.6.2007, 14:56
перехватывать connect() и send() и смотреть какое приложение шлет пакеты по указанному адресу. если не .exe-шник игры -- то тупо не send-ить. причем еще и проверку контрольной суммы .exe-шника прикрутить придется (чтобы переименование чита не помогло)

Автор: SharedNoob 25.6.2007, 15:37
2Snowy
Если бя у меня были исходники игры я бы уже давно изменил пакеты таким образом, но у меня на руках только .exe-шник. 

2_hunter
Можно поподробнее описать КАК узнать какое приложение пустило этот пакет ?
Я копаюсь с этим третий день, ничего не нашел.

Я перерыл свойства IdMappedPortTCP 10 раз. Нашол IP скоторого пришол пакет, порт, еще несколько свойств, но как определить какое приложение его послало найти так и не смог.

Автор: SharedNoob 25.6.2007, 16:56
 smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)