Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Структура/шифрация пакетов Логин сервера
#1
Хотелось бы узнать, от знающих, "на пальцах" структуру и алгоритм шифрации пакетов для логин сервера приходящих от клиента.

Тыкать в сорцы не стоит. Я не настолько знаток, чтобы хорошо разбираться в Java коде касаемо работы с байт кодом и шифрациями.

Если есть мануалы или кто-то может словами объяснить, буду очень признателен. Реализация пакетов планируется осуществлять на PHP. Знаний PHP достаточно (полностью реализована пакетная работа с гейм сервером), но на данный момент не могу понять смысла шифрации в Java коде.

Заранее спасибо.
Родился, живу и когда-нибудь умру.
Ответ
#2
Первые данные, которые приходят/уходят криптуются статичным блоуфиш ключем.
Код:
6b 60 cb 5b 82 ce 90 b1 cc 2b 6c 55 6c 6c 6c 6c
Затем генерируется рандомный ключ. Обмен ключами производится в пакете Init (cddbddddbc).
RSA ключем криптуется логин и пароль пользователя. RSA ключи генерируются опять же - рандомно.

Для большей конкретики - напишите более конкретные вопросы, на которые, я постараюсь ответить Smile
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
Ответ
#3
Pointer*Rage, спасибо за инфу. Конкретней изложу проблему ниже.

Итак, всё что я смог узнать, так это строение пакета, и то, общее.

Любой пакет к логин серверу имеет примерно следующую структуру:

XX XX - длина пакета (little-endian) которая никогда не шифруется
XX - опкод пакета
---------
XX XX XX XX XX
XX XX XX XX XX - тело пакета (данные)
XX XX XX XX XX
---------
XX XX XX XX - чексумма (little-endian)
00 00 00 00 - суффикс непостоянен

1. Непонятно откуда берётся чексумма (как генерируется, т.е. какой участок пакета берётся и каким методом вычисляется чексумма);
2. Насколько важен суффикс в пакете (т.е. возможно его постоянное использование как статического блока);
3. Шифрация. Люди пишут что шифруется весь пакет начиная с третьего байта. Собсбвенно, есть ли смысл выполнять шифрацию, если планируется общаться с сервером одним пакетом (отправил пакет с сайта и получил ответ с логина), не доходя до Init пакета?

Пока эти моменты мне очень непонятны, опять же, из-за моего хиленького скила в Java. Sad
Родился, живу и когда-нибудь умру.
Ответ
#4
Все данные при передаче по сети идут в LittleEndian.

Длина пакета вычисляется таким образом:
Код:
encryptData + header

Заголовок статичен, он имеет размер 2 байта.
В дату входит опкод и сама дата.

Проверка чексуммы
Начинаем собирать посредством побайтовой сборки - dword и дальнейшим захориванием нуль-числа.
Код:
        long chksum = 0;
        for (int i = 0; i < count; i += 4) {
            check = raw[i] & 0xff;
            check |= raw[i + 1] << 8 & 0xff00;
            check |= raw[i + 2] << 0x10 & 0xff0000;
            check |= raw[i + 3] << 0x18 & 0xff000000;
            chksum ^= check;
        }

Последние 4 байта делаем тоже самое, но без хора и далее сравниваем:
Код:
check == chksum

Запись чексуммы точно такая же, но конечно, в обратном порядке:


Я забыл упомянуть, что при статичном крипте (когда используется статичный ключ блоуфиша) - мы хорим все данные перед криптом блоуфиша. Перед данными, мы кладем хор-ключ длиной в 4 байта, а уже после, мы покрываем блоуфишем все это.

Добавлено через 3 минуты
Суффикс
Его нету ;D Если это пакет Init, то он означает окончание блоуфиш ключа.

Добавлено через 5 минут
Чексумма генерится для даты (опкод + дата)

Добавлено через 12 минут
Donatte Написал:3. Шифрация. Люди пишут что шифруется весь пакет начиная с третьего байта. Собсбвенно, есть ли смысл выполнять шифрацию, если планируется общаться с сервером одним пакетом (отправил пакет с сайта и получил ответ с логина), не доходя до Init пакета?

Можно, почему нет? Правда для этого придется править сервер Smile Плюс вопрос в том, насколько передаваемые данные секретны.
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
Ответ
#5
Мануал хорош. Спасибо.

Осталось всё это обмозговать и нарисовать в PHP версии.

По поводу данных. Я думаю пакетная структура общения с сервером имеет массу преимуществ по сравнению с прямыми SQL запросами. Например:
1. Невозможность отправить свой запрос, т.к. все пакеты имеют статичный вид (взломщик не нарисует ничего лишнего);
2. Скорость обработки запроса во много раз выше, т.к. задержки в SQL запросах иногда бывают по 5-10 секунд;
3. Простота (сервер сам формирует нужные данные).

Если позаботиться о безопасности веб части, то это лучшее что можно придумать для обвязки.

Серверная часть не проблема, т.к. блок идентификации входящего пакета обзаведётся новыми условиями для новых опкодов. Ну и обработчик ответа придётся запилить соответственно.

Для меня основная проблема дойти до L2LoginPacketHandler с правильным пакетом в буфере. Smile
Родился, живу и когда-нибудь умру.
Ответ
#6
Donatte Написал:Мануал хорош. Спасибо.

Осталось всё это обмозговать и нарисовать в PHP версии.

Если не секрет - зачем может понадобиться php ?
Кажется вопрос снимается.
Donatte Написал:это лучшее что можно придумать для обвязки.
Sad
Ответ
#7
Воу воу, палехче!11111
Вам все объяснят тут, с 100500 летним стажем данной статьи О_о
П.С - обязательно обращать внимание на "до и после"!!!
П.С2 - обязую, от лица оверАхеревшихПасанофф(Это шутка как бы!!111111111111111111111111111111111111111), скопипастить статью в облако и сохранить линки на нее с зиги!!!111
Ответ
#8
После долгих пыток отправил пакет логину:
Код:
10 00 00 00 00 00 00 00 00 00 00 00 10 00 00 00

где,
10 00 - длина
00 - опкод
00 00 00 00 00 00 00 00 00 - данные
10 00 00 00 - чексумма

Сервер выдаёт
Код:
Wrong checksum from client: [192.168.1.1]

Неужели всё таки нужно ещё и криптовать пакет? Или я неправильно чексумму посчитал?
Родился, живу и когда-нибудь умру.
Ответ
#9
KilRoy Написал:Воу воу, палехче!11111
Вам все объяснят тут, с 100500 летним стажем данной статьи О_о
П.С - обязательно обращать внимание на "до и после"!!!
П.С2 - обязую, от лица оверАхеревшихПасанофф(Это шутка как бы!!111111111111111111111111111111111111111), скопипастить статью в облако и сохранить линки на нее с зиги!!!111

Спасибо за статью,скпопипастил в .txt документ! Big Grin
Ответ
#10
Если вы пытаетесь наладить общение между сервером и обвязкой, то юзайте XML-RPC. Проверено временем и показало себя только с лучшей стороны.
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  Как нарисовать свой плащ для сервера. Retribution 3 2,565 07-28-2024, 03:14 PM
Последний пост: DarthNergal
  Изменение порта подключения к логин-серверу Credo 16 16,049 10-02-2021, 10:23 PM
Последний пост: flopix
  Новая структура файлов ukx CozyMucus 7 4,281 02-02-2021, 05:08 PM
Последний пост: babyjason
  Проблема при запуске сервера Remove88 0 1,345 04-29-2020, 07:44 PM
Последний пост: Remove88
  Продажа уникального сервера High Five. BloodMorty 3 2,088 12-13-2017, 08:46 PM
Последний пост: BloodMorty
  Отключает от сервера во время простоя Flexx 5 1,849 09-17-2016, 08:49 PM
Последний пост: KateKate7912
  Логин Скрин \ Картинка Выбора Персонажей PainTr 15 3,837 06-21-2016, 02:37 PM
Последний пост: Gaikotsu
  Загруженность сервера KateKate7912 2 1,278 11-07-2015, 10:34 PM
Последний пост: KateKate7912
  Копирайты при выборе сервера nn03 9 2,089 08-03-2015, 09:32 PM
Последний пост: gorodetskiy
  Защита адреса сервера в клиенте HF5 Scream 8 2,279 07-03-2015, 08:19 PM
Последний пост: med_ved

Перейти к форуму:


Пользователи, просматривающие эту тему: 1 Гость(ей)