Перейти к содержанию
Авторизация  
TrollFace

Защита от накрутки денег.

Рекомендуемые сообщения

Komaroff 71

О,вот так сюрприз!Сегодня хотел написать подобную,а тут.. =)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
SHOROOP

Хорошо. Но можно лучше.

Гораздо удобнее устанавливать количество денег своей функцией, чем чекать по предложенному варианту.

А писать в серверную переменную значение из GetPlayerMoney - вообще не есть хорошо, смысла в этом нет. Теоретически возможен вариант, что игрок успеет в памяти изменить значение денег ПОСЛЕ проверки на количество, но ДО записи в переменную нового значения.

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
TrollFace

Хорошо. Но можно лучше.

Гораздо удобнее устанавливать количество денег своей функцией, чем чекать по предложенному варианту.

А писать в серверную переменную значение из GetPlayerMoney - вообще не есть хорошо, смысла в этом нет. Теоретически возможен вариант, что игрок успеет в памяти изменить значение денег ПОСЛЕ проверки на количество, но ДО записи в переменную нового значения.

Но исключительно теоретически. Сотая доля секунды ушла бы на обработку GiveMoneyAntiCheat

И даже если заменит, то та же функция вызывается из дисконнекта.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
SHOROOP

 

Хорошо. Но можно лучше.

Гораздо удобнее устанавливать количество денег своей функцией, чем чекать по предложенному варианту.

А писать в серверную переменную значение из GetPlayerMoney - вообще не есть хорошо, смысла в этом нет. Теоретически возможен вариант, что игрок успеет в памяти изменить значение денег ПОСЛЕ проверки на количество, но ДО записи в переменную нового значения.

Но исключительно теоретически. Сотая доля секунды ушла бы на обработку GiveMoneyAntiCheat

И даже если заменит, то та же функция вызывается из дисконнекта.

 

Да и практический шанс есть.

Конкретно если успеть подменить данные в оперативке между:

 

GivePlayerMoney(playerid, money);

и

realmoney[playerid] = GetPlayerMoney(playerid);
в realmoney[playerid] уже запишутся неверные данные.
И проверка в дисконнекте не поможет - переменная уже хранит в себе хакнутое значение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Red_Devils

[Offtop]Рассказали прям тут как можно обойти анти-чит. :D

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
meL

[Offtop]Рассказали прям тут как можно обойти анти-чит. :D

Тем самым рассказали разработчикам как защититься.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Rici

Вроде норм 

RHihJCSXe8o.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
TrollFace

 

 

Хорошо. Но можно лучше.

Гораздо удобнее устанавливать количество денег своей функцией, чем чекать по предложенному варианту.

А писать в серверную переменную значение из GetPlayerMoney - вообще не есть хорошо, смысла в этом нет. Теоретически возможен вариант, что игрок успеет в памяти изменить значение денег ПОСЛЕ проверки на количество, но ДО записи в переменную нового значения.

Но исключительно теоретически. Сотая доля секунды ушла бы на обработку GiveMoneyAntiCheat

И даже если заменит, то та же функция вызывается из дисконнекта.

 

Да и практический шанс есть.

Конкретно если успеть подменить данные в оперативке между:

GivePlayerMoney(playerid, money);

и

realmoney[playerid] = GetPlayerMoney(playerid);
в realmoney[playerid] уже запишутся неверные данные.
И проверка в дисконнекте не поможет - переменная уже хранит в себе хакнутое значение.

 

Это-то понятно, но вот как программист сможет провернуть подобное, имея минимум доступа?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
#Kot

Полезно.Автору поставлю спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
SHOROOP

 

 

 

Хорошо. Но можно лучше.

Гораздо удобнее устанавливать количество денег своей функцией, чем чекать по предложенному варианту.

А писать в серверную переменную значение из GetPlayerMoney - вообще не есть хорошо, смысла в этом нет. Теоретически возможен вариант, что игрок успеет в памяти изменить значение денег ПОСЛЕ проверки на количество, но ДО записи в переменную нового значения.

Но исключительно теоретически. Сотая доля секунды ушла бы на обработку GiveMoneyAntiCheat

И даже если заменит, то та же функция вызывается из дисконнекта.

 

Да и практический шанс есть.

Конкретно если успеть подменить данные в оперативке между:

GivePlayerMoney(playerid, money);

и

realmoney[playerid] = GetPlayerMoney(playerid);
в realmoney[playerid] уже запишутся неверные данные.
И проверка в дисконнекте не поможет - переменная уже хранит в себе хакнутое значение.

 

Это-то понятно, но вот как программист сможет провернуть подобное, имея минимум доступа?

 

Так о том и речь. Доступ к серверу не нужен.

Если есть уязвимость и есть шанс ее использовать - дыру закрывать надо.

Тут уязвимое место именно в присвоении переменной значения из GetPlayerMoney, которое, по факту, можно подменить на стороне клиента.

По-хорошему - надо наоборот. Сначала писать новое значение в realmoney и уже потом ResetPlayerMoney(playerid)+GivePlayerMoney(playerid, realmoney[playerid]). А GetPlayerMoney не использовать вообще как потенциально уязвимую.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Гость
Эта тема закрыта для публикации ответов.
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.