Warning: PlayerDialogResponse crash exploit
#41

Помниться мне Windows NT 4.0 Server настроенный по требованиям безопасности американских военных (не помню точное название документа) тоже легко задошевали через логи (там одно из требований было, чтобы ОС переставала работать, если не может записать лог. Вот ей что-то по сети слали, чтобы винда должна была писать лог, но не очень критичное, чтобы этого кто-то заметил. И ждали пока кончиться место на диске). Вот что значит, винда настроенная любителями - американскими военными

Вообще хочется заметить, что в любой мало-мальски большой и используемой сотнями людей программе будут находить ошибки безопасности. Для тех, кто далек от программирования, еще раз подчеркиваю, в любой программе.
Reply
#42

Quote:

Вот что значит, винда настроенная любителями - американскими военными

Самого убивает. "Крутые американские программисты" считают, что если они настроили сервер, то он непробиваем. Ага, как-же. Я конечно согласен, что и у нас такие есть, и у них есть настоящие специалисты, но уж слишком много у них "кулхацкеров".

Вообще самп тоже страдает прямыми руками своих создателей. Остается только радоваться, что самп все еще разрабатывают.
Reply
#43

Решение найдено, решение защищает как от данной DOS атаки, как и от многих других. Делаем таймер на 10 секунд с повтарением и вставляем туда

for (new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{

}
else
{
Kick(i);
}
}

Работает 100%

Если ресурсы сервера позволяют, можно вместо MAX_PLAYERS вставить 70000
Reply
#44

Это защита от невидимости, она конечно хорошая, но будет давать нагрузку на сервер. И не вижу смысла туда 70000 ставить
Reply
#45

Quote:
Originally Posted by Roman_Gazizov
Посмотреть сообщение
for (new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{

}
else
{
Kick(i);
}
}
Проще написать так:
for (new i = 0; i < MAX_PLAYERS; i++)
{
if(!IsPlayerConnected(i))
{
Kick(i);
}
}

Quote:
Originally Posted by Roman_Gazizov
Посмотреть сообщение
Если ресурсы сервера позволяют, можно вместо MAX_PLAYERS вставить 70000
Тогда уж 65535
Reply
#46

Давайте мыслить здраво, и писать хотя бы вот так
pawn Код:
for (new i = 0; i < GetMaxPlayers(); i++)
{
    if(!IsPlayerConnected(i)) Kick(i);
}
Или я что-то пропустил, и например при количестве слотов в 30, игрок-читер может присвоить себе слот 35? Тогда да, 65535.
Reply
#47

Quote:

Или я что-то пропустил, и например при количестве слотов в 30, игрок-читер может присвоить себе слот 35? Тогда да, 65535.

Опачки... Я выпал из темы. Такое вообще возможно со слотами?
Reply
#48

Ну раз человек намекнул про 70000, то... сам вот теперь думаю...
И как то заодно вспомнил - какого хрена в дефолтном ГФ при каждой команде проверяется IsPlayerConnected? Бред. Ну, может и не бред, раз на то пошло (вообще легче было бы в шапке написать !IsPlayerConnected() return 1; ).
Reply
#49

Quote:

Опачки... Я выпал из темы. Такое вообще возможно со слотами?

Сомневаюсь. Нет там такого, сколько я не изучал. А вот отправка команды, диалога и т.п. возможна с невидимым коннектом. То есть это как бы недоконнект. Только Incoming connetion в логах пишет и слот выделяется, а дальше начинается флуд пустыми диалогами и идёт это "Warning: PlayerDialogResponse crash exploit". Ходили слухи, что в 0.3a пофиксили это - так и есть. Мне не удалось вызвать команду, будучи не полностью присоединённом к серверу. А только вот почему проверка на эксплоит краша стоит раньше, чем проверка на полный коннект, я не знаю. Надеюсь, это фиксанули в 0.3e
Reply
#50

Quote:
Originally Posted by iEnemY
Посмотреть сообщение
Давайте мыслить здраво, и писать хотя бы вот так
pawn Код:
for (new i = 0; i < GetMaxPlayers(); i++)
{
    if(!IsPlayerConnected(i)) Kick(i);
}
Или я что-то пропустил, и например при количестве слотов в 30, игрок-читер может присвоить себе слот 35? Тогда да, 65535.
Вроде предложение выше было более здравомысленное
Reply
#51

итак, и до нас дошло сие чудо)) особо заморачиваться по количеству обрабатываемых ID не стоит - крашер получает наименьшее свободное ID, как и обычный игрок при подключении. Удалось ли вылечить баг приведенным выше примером сказать пока сложно, но на данный момент полет нормальный
Reply
#52

Warning: PlayerDialogResponse PlayerId: 18 dialog ID doesn't match last sent dialog ID
а вот новая шняга из логов. Что бы ЭТО могло быть?
Reply
#53

Похоже на попытку подмены ид диалога
Reply
#54

Quote:

Warning: PlayerDialogResponse PlayerId: 18 dialog ID doesn't match last sent dialog ID

Логика разработчиков сампа:

Они хранят на стороне сервера текущий у клиента диалог, при этом проверяют ид диалога примланный клиентом.

Кто из них блондинко?
Reply
#55

Quote:
Originally Posted by jhonyxakep
Посмотреть сообщение
Логика разработчиков сампа:

Они хранят на стороне сервера текущий у клиента диалог, при этом проверяют ид диалога примланный клиентом.

Кто из них блондинко?
По моему, это классный способ вычислить гнилую овцу с артмани среди игроков.
Reply
#56

Quote:

По моему, это классный способ вычислить гнилую овцу с артмани среди игроков.

Согласен... Был бы. Но нет ни коллбека, ничего нет. Зачем мне кусок лога, в которые я заглядываю раз в месяц. А тем более понять кем был ид 18 ну просто нереально
Reply
#57

Quote:
Originally Posted by jhonyxakep
Посмотреть сообщение
Согласен... Был бы. Но нет ни коллбека, ничего нет. Зачем мне кусок лога, в которые я заглядываю раз в месяц. А тем более понять кем был ид 18 ну просто нереально
Эм, что нереально? Крутануть кто коннектился с 16м ид выше.
Reply
#58

Quote:

Эм, что нереально? Крутануть кто коннектился с 16м ид выше.

20 мегабайт логов читать? Нет уж, спасибо. Я конечно понимаю там grep всякие... Но не проще-ли было сделать коллбек.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)