PDA

Просмотр полной версии : [Include] Rakcheat - фильтрация входящих на сервер данных



Batya_Montes
12.06.2018, 21:00
Rakcheat

GitHub (https://github.com/f0Re3t/rakcheat)

Описание
Простая библиотека, защищающая ваш сервер от кривых данных от игрока. Говорить о том, что самп не фильтрует многие данные - думаю не стоит и в итоге при отправке специфичных значений (NaN, inf, -inf) игроков можно крашить, отправлять в загрузку, заставлять самп удалять вашего персонажа (как вариант невидимки от сампа, легально же). Данная библиотека при помощи плагина Pawn.RakNet проверяет каждый пакет синхронизации персонажа и если находит такие невалидные данные - отключает его от сервера. Так же библиотека может выступать в некоторой степени как античит, но список конечно не богат, всего лишь защита от серфинг-невидимки и невалидном угле персонажа (ходьба на голове и прочие подобные читы).

Библиотека так же может передавать все обнаружения в свой специальный каллбек OnRakcheatFilteredData(playerid, sync, type, subtype), который вы можете объявить и наказывать игроков как хочется вам. Вернув в данном каллбеке 0 это рассинхронизирует пакет данных игрока. Описание параметров будет чуть ниже.

Константы
В библиотеке доступно несколько констант которые вы можете использовать и переопределить.

RAK_DEBUG - включает логирование каждого срабатывания защиты, выводит подробный лог с данными которые шлет игрок (включено по умолчанию).
RAK_MAX_QUAT_WARNINGS - количество варнингов, которые получит игрок за невалидный угол персонажа, прежде чем будет выгнан с сервера.
RAK_ENABLED_SHOT - включает защиту от невалидного выстрела

Параметры каллбека
playerid - ид игрока, на которого сработала защита
sync - ид пакета, в котором сработала защита
type - код сработавшей защиты
subtype - подкод сработавшей защиты, нужен при предъявлении ложных срабатываний, в другом смысле бесполезен для внимания

Описание ид пакетов, в которых может сработать защита
207 - onfoot синхра, игрок находится пешком
200 - vehicle синхра, игрок находится за рулем авто
211 - passenger синхра, игрок находится на пассажирском месте в авто
209 - unoccupied синхра, игрок толкает пустую машину
210 - trailer синхра, игрок отправляет синхронизацию прицепа
212 - spectator синхра, игрок наблюдает за кем либо
206 - bullet синхра, игрок стреляет из огнестрельного оружия
203 - aim синхра, игрок отправляет синхронизацию своей камеры

Описание кодов защиты
1 - невалидная позиция
2 - невалидные кватерионы
3 - невалидная скорость
4 - невалидные оффсеты серфинга
5 - невалидный ид объекта/машины для серфинга
6 - невалидные флаги анимации
7 - невалидное количество хп
8 - невалидная скорость поезда
9 - невалидный поворот
10 - невалидное направление
11 - невалидная угловая скорость
12 - невалидные координаты выстрела
13 - невалидные координаты попадания пули
14 - невалидные смещения выстрела
15 - невалидные вектора камеры
16 - невалидная позиция камеры
17 - невалидное значение aimz
18 - невалидный выстрел персонажа

Скачать актуальную версию вы всегда сможете с моего репозитория на GitHub (https://github.com/f0Re3t/rakcheat)

DeimoS
12.06.2018, 21:15
9 - невалидное ??? (не смогу объяснить данный параметр)

Всё же стоит хоть как-то попытаться :pardon:

Batya_Montes
12.06.2018, 22:01
Всё же стоит хоть как-то попытаться :pardon:

Ну, очередной из параметров который находится в unoccupied синхре и при подмене его, можно кидать игроков в загрузку.

Geebrox
13.06.2018, 06:53
Стоило бы и для контсанты DEBUG присвоить тег RAK, чтобы не путаться в будущем.

DeimoS
13.06.2018, 08:48
Ну, очередной из параметров который находится в unoccupied синхре и при подмене его, можно кидать игроков в загрузку.

Ну просто как людям использовать твой античит, если, в итоге, они не знают что означает тот или иной код? :) Стоит либо словами объяснять, либо примерами наказания, дабы люди понимали что делать с читером в такой ситуации

Batya_Montes
13.06.2018, 10:09
Ну просто как людям использовать твой античит, если, в итоге, они не знают что означает тот или иной код? :) Стоит либо словами объяснять, либо примерами наказания, дабы люди понимали что делать с читером в такой ситуации

Тут уже дело в описании именно значения 'roll'. Понять что калкор имеет под этим очень сложно, ибо не очень понятно для чего оно здесь используется, но шаря по многочисленными переводчикам и опираясь на свои знания это что-то вроде 'поворота'. На использование оно по сути никак не повлияет, ибо клиент вроде бы сам никогда не шлет невалидные данные ;)

- - - Добавлено - - -


Стоило бы и для контсанты DEBUG присвоить тег RAK, чтобы не путаться в будущем.

Да, добавлю везде тег где его не хватает ;)

Batya_Montes
13.06.2018, 11:11
Обновление системы
- Добавлен тег RAK там где его не хватало
- Добавлена поддержка static_enum и static_const
- Добавлена защита от невалидного выстрела. По умолчанию отключена, ибо протестировать на онлайне не предоставляется возможности (включается константой RAK_ENABLED_SHOT)

Batya_Montes
17.06.2018, 11:20
Обновление
- Переписан полностью алгоритм проверки на серфинг невидимку

Batya_Montes
24.06.2018, 17:52
Обновление
- Глобальное обновление системы
- Поправлен античит на серфинг по объекту (замена isobjectvalid на getobjectmodel)
- Почти каждое значение проверяемое на нан и инфинити получило доп. проверки на минимально и максимально возможное
- Закрыт новый вид крашера и возможно будущие версии всех крашеров
- Переписана защита синхронизации выстрела (bullet), не вышедшей обновы

* Некоторые минимально и максимально возможные значения занижены или завышены, ибо значения были получены экспериментальным путем и могут зависеть от лагов/пинга, на момент теста ложных не выявлено

Daniel_Cortez
24.06.2018, 18:47
Закрыт новый вид крашера и возможно будущие версии всех крашеров
Очень информативно (нет).

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

Также название коллбэка "OnRakcheatFilteredData" расходится со стилем именования стандартных коллбэков - к примеру, обработчик подключения игрока называется "OnPlayerConnect", а не "OnPlayerConnected".

Batya_Montes
24.06.2018, 18:56
Очень информативно (нет).

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

Также название коллбэка "OnRakcheatFilteredData" расходится со стилем именования стандартных коллбэков - к примеру, обработчик подключения игрока называется "OnPlayerConnect", а не "OnPlayerConnected".

Крашер, который действовал путем подмены значений в onnucupied синхронизации (незанятого авто) на невалидные. В частности это было значение 'roll'.
Насчет каллбека - будет изменено в последующих обновах.
П.С: Значения не попадали под фильтрацию, ибо были они не НАН и не инфинити, а просто огроменные числа.

Batya_Montes
24.07.2018, 21:55
Разработка была совмещена с пул регвестом от Nexius_Tailer, за что ему огромное спасибо. Изменения можете увидеть на гитхабе.

Web
26.07.2018, 00:21
Разработка была совмещена с пул регвестом от Nexius_Tailer, за что ему огромное спасибо. Изменения можете увидеть на гитхабе.

Думаю их все таки стоило бы огласить в топике.