Форум администраторов игровых серверов

Форум администраторов игровых серверов (https://forum.zone-game.info/TT.php)
-   Игровой клиент (https://forum.zone-game.info/forumdisplay.php?f=54)
-   -   Структура/шифрация пакетов Логин сервера (https://forum.zone-game.info/showthread.php?t=35784)

Donatte 11.07.2014 19:05

Структура/шифрация пакетов Логин сервера
 
Хотелось бы узнать, от знающих, "на пальцах" структуру и алгоритм шифрации пакетов для логин сервера приходящих от клиента.

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

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

Заранее спасибо.

n3k0nation 12.07.2014 16:44

Re: Структура/шифрация пакетов Логин сервера
 
Первые данные, которые приходят/уходят криптуются статичным блоуфиш ключем.
Код:

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

Для большей конкретики - напишите более конкретные вопросы, на которые, я постараюсь ответить :)

Donatte 12.07.2014 19:20

Re: Структура/шифрация пакетов Логин сервера
 
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. :(

n3k0nation 12.07.2014 20:21

Re: Структура/шифрация пакетов Логин сервера
 
Все данные при передаче по сети идут в 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 (Сообщение 369327)
3. Шифрация. Люди пишут что шифруется весь пакет начиная с третьего байта. Собсбвенно, есть ли смысл выполнять шифрацию, если планируется общаться с сервером одним пакетом (отправил пакет с сайта и получил ответ с логина), не доходя до Init пакета?

Можно, почему нет? Правда для этого придется править сервер :) Плюс вопрос в том, насколько передаваемые данные секретны.

Donatte 12.07.2014 21:00

Re: Структура/шифрация пакетов Логин сервера
 
Мануал хорош. Спасибо.

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

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

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

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

Для меня основная проблема дойти до L2LoginPacketHandler с правильным пакетом в буфере. :)

AleBrider 12.07.2014 21:48

Re: Структура/шифрация пакетов Логин сервера
 
Цитата:

Сообщение от Donatte (Сообщение 369333)
Мануал хорош. Спасибо.

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

Если не секрет - зачем может понадобиться php ?
Кажется вопрос снимается.
Цитата:

Сообщение от Donatte (Сообщение 369333)
это лучшее что можно придумать для обвязки.


KilRoy 12.07.2014 22:24

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

Donatte 13.07.2014 04:23

Re: Структура/шифрация пакетов Логин сервера
 
После долгих пыток отправил пакет логину:
Код:

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]
Неужели всё таки нужно ещё и криптовать пакет? Или я неправильно чексумму посчитал?

P3iNN 13.07.2014 11:16

Re: Структура/шифрация пакетов Логин сервера
 
Цитата:

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

Спасибо за статью,скпопипастил в .txt документ! :D

ANZO 13.07.2014 13:16

Re: Структура/шифрация пакетов Логин сервера
 
Если вы пытаетесь наладить общение между сервером и обвязкой, то юзайте XML-RPC. Проверено временем и показало себя только с лучшей стороны.


Текущее время: 20:52. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2022, Jelsoft Enterprises Ltd. Перевод: zCarot