14. Баг с RequestRestartPoint (оживление и побег из тюрьмы)
Этот баг был найден нашим соотечественником из подполья www.allcheats.ru под ником sshd.
Когда вы умираете, у вас появляется окно с выбором места, где как бы вас оживить. При обычных условиях там всего одна
кнопка: "return to the nearest village". После нажатия на которую игра посылает пакет: 6d // тип пакета (RequestRestartPoint)
00 00 00 00 // аргумент, который собственно говорит серверу о том, куда нас вернуть
Баг заключается в том, что как раз клиент говорит серверу куда вернуть чара после смерти. То есть, не клиент, а мы.
LA2 С3/C4 серверы поддерживают следующие значения аргумента (места возврата):
0 – return to town (в город)
1 – hide PK (если вы ПК, возвращает в город ПК или в окрестности того города, где вас убили)
2 – to castle (в замок)
3 – to siege HQ (к флагу во время осады)
4 – fixed, festival (во время фестиваля тьмы оживляет вас на месте).
Таким образом, послав вместе "00 00 00 00", "04 00 00 00" наш чар оживится на том месте, где собственно был убит.
В связи с этим багом, у меня возникла мысль о том, как можно вызволить из тюрьмы персонажа.
Для этого чар, находящийся в тюрьме, должен быть в клане. Этот клан записывается на осаду и ставит флаг, при этом
чара, который в тюрьме надо каким-нибудь образом убить. На antaras.ru, к примеру, это не сложно, там вокруг тюрьмы
аггры, бьющие через стену. Далее вы просто посылаете "RequestRestartPoint" пакет с аргументом "03 00 00 00" и чар
появляется (должен появится :)) живой у флага.
15. Раздеть чужого персонажа не зная ни логина, ни пароля - разве это реально?
Да, к сожалению это реально. Я решил убрать этот параграф из статьи, так как это очень серьёзная брешь в lineage2,
которая наделает ещё не мало шуму. Не хочу, чтобы это было на моей совести smile
Скажу лишь, что существует возможность входить под рандомными персонажами (то есть сами мы конкретного персонажа
выбрать не можем, это делает сервер). Пока что это было опробовано только на известном сервере www.l2extreme.com,
но я уверен, что это работает и на других.
Так что не удивляйтесь, если вашего чара с паролем аля "6IlZk9qR[!]" вдруг разденут.
16. Итог
Чтож, я описал достаточное кол-во багов. К сожалению, к моменту публикации статьи большинство из них стали уже не так актуальны. То, что актульно сейчас или находится в данный момент в разработке, возможно будет выложено позднее на нашем форуме.
VI. Пара слов о C4
Вообще С4 всё ещё никак не может устаканиться. Точнее пошло некое разветвление в реализации авторизации.
L2J C4 серверы стали применять для шифрования авторизационного пакета RSA (впрочем как и ОФФ от NCSoft).
Причём, пара private/public-ключей генерируется для каждого соединения. Клиенту в первом пакете сервер
передаёт 1024-битный публичный ключ, которым клиент _поверх_ blowfish шифрует пакет с логином/паролем.
Этот способ гарантирует то, что никто извне не сможет получить клиентский логин и пароль. Хотя, если
вспомнить взлом Rc5-64, то раскрытие 128-байтного ключа не кажется таким уж заоблочным.
Хочется отметить, что генерация key-pair в RSA достаточно трудоёмкое занятие. У меня на генерацию пары ключей
с помощью библиотек openssl уходило ~1.5-2 секунды, что для сервера с онлайном, скажем, в 1000 человек -
непозволительная роскошь. Хотя опять же, login-сервер по задумкам NCSoft должен быть на другой машине нежели
game-сервер, но, как я уже писал выше, это не всегда выполняется у нас в России.
Что же касается С1ОФФ переделанных в С4, RSA в них не используется. Хотя изменена работа с внутренними
идентификаторами, которые используются для авторизации на game-сервере. При этом и для l2j и для с1офф-с4
используется один и тот же С4 клиент.
© darkgrey / m00.blackhat.ru