Доступ к готовым решениям

Переход в группу "Пользователь"

300.00
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Защита от нового крашера игроков (unoccupied)

kissad21

Мастер
Пользователь
Регистрация
16 Июн 2011
Сообщения
2,115
Лучшие ответы
0
Репутация
853
Награды
1
Совсем недавно на просторах порталов читеров появился новый крашер игроков для аризоны РП, который работает по принципу отправки неверных данных в пакет к серверу, а сервер отправляет этот неверный пакет игроку и вызывается зависание клиента.


На следующие сутки мы(аризона и эвольве) нашли решение и исправило несколько популярных проектов, которым скинули решение. После этим крашером стали пользоваться на других незащищенныхпроектах и количество злоумышленников возрастало с каждым днем. В ближайшее время т.к принцип действия крашера известен многим, планировалось создан аналоги и выложить в открытый доступ. Решение данного крашера найти удалось бы не многим, так как обычными нативками SAMP'a исправить его невозможно, толькл через плагины с перехватом RakNet пакетов.
В итоге мы сливаем решение в паблик и разочаруем всех покупателей этого крашера)

Лучше всего, рекомендую и выкладываю решение через плагин Pawn.RakNet от urShadow

Для начала требуется скачать и подключить сам плагин Pawn.RakNet, подключить инклуд плагина к игровому моду (#include <Pawn.RakNet>) и в конец игрового мода добавить перехват синхронизации(код ниже)

PHP:
const UNOCCUPIED_SYNC = 209;

IPacket:UNOCCUPIED_SYNC(playerid, BitStream:bs)
{
    new unoccupiedData[PR_UnoccupiedSync];
 
    BS_IgnoreBits(bs, 8);
    BS_ReadUnoccupiedSync(bs, unoccupiedData);
 
    if(floatcmp(floatabs(unoccupiedData[PR_roll][0]), 1.00000) == 1
        || floatcmp(floatabs(unoccupiedData[PR_roll][1]), 1.00000) == 1
        || floatcmp(floatabs(unoccupiedData[PR_roll][2]), 1.00000) == 1
        || floatcmp(floatabs(unoccupiedData[PR_direction][0]), 1.00000) == 1
        || floatcmp(floatabs(unoccupiedData[PR_direction][1]), 1.00000) == 1
        || floatcmp(floatabs(unoccupiedData[PR_direction][2]), 1.00000) == 1
        || floatcmp(floatabs(unoccupiedData[PR_position][0]), 20000.00000) == 1
        || floatcmp(floatabs(unoccupiedData[PR_position][1]), 20000.00000) == 1
        || floatcmp(floatabs(unoccupiedData[PR_position][2]), 20000.00000) == 1
    ) {
        return false;
    }

    return true;
}
Сам автор плагина опубликовал решение по ссылке ниже



Наши коллеги с Live Samp'а так же опубликовали статью с подробным объяснение проблемы по ссылке ниже
 
Последнее редактирование:
Сверху Снизу