На днях заходил ко мне некий Zadrot и ложил сервер по кд.
При этом:
-Сервер вырубался;
-В логах нечего не было записано;
-Перед тем как сервер вырубался появлялась капюшонка у негодяя;
С помощью каких то пакетов он отправляет их в клиент (не знаю точно) у него появляется капюшонка и сервер вырубается.
Оказывается чтоб вырубился сервер нужно зайти в профиль, при этом пвпгн не распознает капюшонку и bnetd.exe тупо сворачивается ( родной баг пвпгн'a)
Было обнаружено что сервер сворачивается при иконке "CDRR" (капюшонка с вопросиком)
Я поставил себе её: /set xom91k record\w3xp\userselected_icon cdrr и спустя 3 секунды меня выкинуло.
В исходнике src/bnetd/account_wrap.cpp есть информация, которая выберает картинку в профиле
Но в этом исходнике не полностью проверяется 1-й символ переданного кода иконки, только на то что он не меньше 1.
Когда туда передавался например код символа C(ключ CDRR), то получалось что в коде:
result = profile_code[..][tmp_icon[0]-1];
значение tmp_icon[0] было равно явно больше чем 6,
т.к. 'C'-48-1 > 5 это приводило к выходу за границы массива profile_code, у которого вторая размерность была всего 6.
то поэтому проверка в профиле должна быть такой -
. . .
if (tmp_icon[0]>=1 && tmp_icon[0] <= 6) {
. . .
после этого я набрал снова /set xom91k record\w3xp\userselected_icon cdrr, и зашел в профиль, меня не выкинуло и сервер не свернулся, я вроде обрадовался, но вопрос:
Получается негодяй может устанавливать себе просто так капюшонки? (но при этом сервер ложиться не будет)