Перейти к содержанию

Падение клиента из-за чатов


Functor

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

Вчера ко мне обратились с просьбой пофиксить баг. Сказали, что этот баг присутствует на многих серверах.

Если вытянуть чат с панельки чатов и выйти с игры, то при следующей попытке зайти на сервер получаем падение клиента.

2xgt.png

Изучив ситуацию в отладчике я нашел виновника. И решил поделится фиксом с комьюнити.

В исходнике eAmod-a есть такие строки:


// Security System
if( pc_readaccountreg(sd,"#SECURITYCODE") > 0 )
{
clif_displaymessage(sd->fd, "Item Security System ENABLE : Use @security for more options.");
sd->state.secure_items = 1;
}
else
clif_displaymessage(sd->fd, "Item Security System DISABLE : Use @security for more options.");

По сочетанию символов " :" клиент определяет ник в сообщении. В данном случае он считает "Item Security System DISABLE" и "Item Security System ENABLE" за ники.

При копировании таких больших ников в стековый буфер происходит порча стековых данных.

Что бы такого не происходило, нужно заменить приведенный выше участок кода на:


// Security System
if( pc_readaccountreg(sd,"#SECURITYCODE") > 0 )
{
clif_displaymessage(sd->fd, "Item Security System ENABLE: Use @security for more options.");
sd->state.secure_items = 1;
}
else
clif_displaymessage(sd->fd, "Item Security System DISABLE: Use @security for more options.");

Теперь клиент не будет находить ник в этих сообщениях.

  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

получается что если я напишу


@me AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA : я использую переполнение буфера как начальник

то это выполнится?

плиз можешь выполнить это и если упадет фулдамп скинуть?

P.S. лучше так


@me AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA : using buffer overflow like a boss

Изменено пользователем ph1047
Ссылка на комментарий
Поделиться на другие сайты

Странно, но у меня клиент не падает.

попробуй плиз как я написал. Я бы сам попробовал но у меня ни клиента ни сервера уже нет давно

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

Странно, но у меня клиент не падает.

попробуй плиз как я написал. Я бы сам попробовал но у меня ни клиента ни сервера уже нет давно

Так правильно?

bd649fded58et.jpg

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

@me AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA : using buffer overflow like a boss

двоеточие и текст тоже ввел?

аа он сам подставил двоеточие((

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

Это только с еамодом такое?

Я не замечал сообщений такого типа в дефолтных эмулях.

И не факт, что это единственное такое сообщение в eAmod-e. Лень смотреть. Но если кто-то найдет, то пофиксить не составит труда.

Странно, но у меня клиент не падает.

Видимо для 2010-07-30aRagexeRE не актуально. Я изучал падение на 2012-04-10aRagexeRE.

аа он сам подставил двоеточие((

Да, там получится ник из двух байт.

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

Это только с еамодом такое?

Я не замечал сообщений такого типа в дефолтных эмулях.

И не факт, что это единственное такое сообщение в eAmod-e. Лень смотреть. Но если кто-то найдет, то пофиксить не составит труда.

Странно, но у меня клиент не падает.

Видимо для 2010-07-30aRagexeRE не актуально. Я изучал падение на 2012-04-10aRagexeRE.

аа он сам подставил двоеточие((

Да, там получится ник из двух байт.

можешь как будет время сделать фулдамп при падении от вышеуказанной проблемы? просто интересно что можно из этого сделать

хотя можно и минидамп, если инет не позволяет

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

×
×
  • Создать...
Яндекс.Метрика