Сообщений: 376
Тем: 12
Зарегистрирован: Jul 2012
Репутация:
1,000
10-11-2013, 10:11 PM
(Сообщение последний раз редактировалось: 10-11-2013, 10:49 PM Gattsu.)
Приветствую Вас многоуважаемые жители zg!
Клиент
SrcRegVer: 247703
ReleaseName: LIVE-22.04 EME #13
Version: LIVE-22.04 EME #13
ReleaseDate: 2013-08-30 오후 7:05:33
ShareRevision: 247322
ClientRevision: 247601
ServerRevision: 247703
ReleaseDataRevision: 69115
WebAppRevision: 247080
TeraReleaseName: LIVE-22.04 EME #13
Посмотрев на обстановку эмуляторов, ровным счетом увидел только одну толковую разработку на C#, занимается ею один человек.
Давайте делиться и разрабатывать вместе.
В данный момент изучаю исходники на предмет сетевого взаимодействия.
Что понял в контексте пиратского сервера)
Структуры
PHP код: <?php
struct ServerInitPacket {
byte[] data = {1,0,0,0};
}
struct ClientKeyPacket {
byte[128] key;
}
struct ServerKeyPacket {
byte[128] key;
}
ЭТАП 0
1. Сервер посылает ServerInitPacket
ЭТАП 1
2. Этап обмена ключами
2.1 Клиент отвечает посылая первый ключ(ckey1) ClientKeyPacket размером 128 байт
2.2 Сервер отвечает посылая первый ключ(skey1) ServerKeyPacket размером 128 байт
2.3 Клиент отвечает посылая второй ключ(ckey2) ClientKeyPacket размером 128 байт
2.4 Сервер отвечает посылая второй ключ(skey2) ServerKeyPacket размером 128 байт
Проходит установка состояния для чтения, клиент и сервер обрабатывают полученные ключи, подготавливают криптографию.
ЭТАП 2
3. Этап авторизации
3.1 Клиент посылает 96 байт
На пункте 3.1 не могу расшифровать уперся лбом в проблему.
Не могу разобрать алгоритм криптографии, особо тесный опыт с криптографией не имел, так что буду благодарен за подсказки.
Перенес алгоритм с C# на Java, проблема в многих местах, c SHA-1(160 бит хэш) там не понятная история, реализован не по RFC, тк выходные результат получаются разные и на C#, он выдает digest масива 5 uint32, но в общем худо бедно перенес на Java. Потом загвоздка в функциях криптографии, там используется без знаковые числа(проблема происходит при приведении типа). Одно завязано на другом, дебаг в двух средах, на двух языках, туго все идет.
Структуры
PHP код: <?php
struct EncryptData{
byte[] raw;
};
struct Packet {
short length;
short opcode;
byte[length-4] data;
};
struct DecryptData {
Packet packet1;
Packet packet2;
...
Packet packetN;
};
Обмен данными между клиентом и сервером.
ЭТАП 0 и ЭТАП 1 на прямую посылаются данные.
ЭТАП 2 данные зашифровываются.
Клиент-сервер посылает последовательность байт EncryptData.
При расшифровке выделяется структура DecryptData .
То-есть отправляя/получая, зашифровка/расшифровка происходит в один цикл, все данные обрабатываются одним проходом.
Концепцию четко вижу уже, расписал видение лаунчера, сервера авторизации и игрового.
ПС Написал пока пару строчек кода. Не вижу пока смысла, что-то выкладывать.
ПС Сетевая модель, модель работы с бд, потоками, я реализовал свою, никаких mmocore(l2j) и тому подобного. Ориентация идет на распределенные вычисления.
Дерзаем дамы и господа.
Добавлено через 31 минуту
Подготовка сервера для чтения.
Структуры
PHP код: <?php
struct SessionKey {
byte[128] skey1;
byte[128] skey2;
byte[128] ckey1;
byte[128] ckey2;
}
class Engine{
public void init(byte[128] key);
public void process(byte[] data);
}
class Crypto {
private Engine encryptor;
private Engine decryptor;;
public void init(SessionKey key)
{
byte[128] (dkey , ekey);
dkey = ((key.skey1 >> 31) ^ key.ckey1) ^ (key.ckey2 << 17);
decryptor.init(dkey);
ekey = key.skey2 >> 79;
decryptor.process(ekey);
encryptor.init(ekey);
}
public void encrypt(byte[] data)
{
encryptor.process(data):
}
public void decrypt(byte[] data)
{
decryptor.process(data);
}
}
После получения ключей вызывается метод Crypto.init(key)
<< , >> - циклический сдвиг массива (побайтовый).
!Проблема с proccess.
Сообщений: 1,660
Тем: 9
Зарегистрирован: Feb 2009
Репутация:
10,142
Gattsu Написал:На пункте 3.1 не могу расшифровать уперся лбом в проблему.
Не могу разобрать алгоритм криптографии, особо тесный опыт с криптографией не имел, так что буду благодарен за подсказки.
Перенес алгоритм с C# на Java, проблема в многих местах, c SHA-1(160 бит хэш) там не понятная история, реализован не по RFC, тк выходные результат получаются разные и на C#, он выдает digest масива 5 uint32, но в общем худо бедно перенес на Java. Потом загвоздка в функциях криптографии, там используется без знаковые числа(проблема происходит при приведении типа). Одно завязано на другом, дебаг в двух средах, на двух языках, туго все идет.
В разделе теры, возьми сорсы которые я шарил и вытяните с них криптор
Он полностью рабочий
open-team.ru - Freya, HighFive...
Сообщений: 376
Тем: 12
Зарегистрирован: Jul 2012
Репутация:
1,000
Сообщений: 2,455
Тем: 53
Зарегистрирован: Apr 2010
Репутация:
19,728
Спасибо за информацию, может быть когда-нибудь воспользуюсь
Немного обсуждения.
Signed/unsigned
u-типы данных ничем по структуре не отличаются от signed типов в джаве. Во всяком случае они представляются в таком же количестве байтов, что и оригинальная структура.
Зачастую, в шарпах unsigned типы используются для исключения "хрен пойми, что за хрень в переменной", так что можно не беспокоится о переполнении, но лучше всего оттестировать, как это все воспроизводится на клиентской стороне, чтобы не получилось такого: взял деньгу и сервер упал.
И да, для того, чтобы превратить signed в unsigned и наоборот достаточно в правильном порядке сложить байты из которых этот тип состоит.
SHA
На счет хеширования SHA. Полистайте мелкомягкую доку по их дигестам, возможно там есть какие-то... ммм... недокументированные возможности, если можно так сказать А вообще, мне кажется, что тут косяк с вашей стороны, а с алгоритмикой отпечатков все впорядке.
Network
Что за распределенная модель сети? Подробнее пожалуйста, если можно.
В любом случае Вы используете NIO или какой-нибудь нетворк-фреймворк, так что это мало будет отличаться от ммогоря, за исключением, что Вы возможно сможете это все правильно спроектировать и реализовать.
Троллинг: спасибо, что открыли глаза на сдвиги :redlol:
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
Сообщений: 509
Тем: 7
Зарегистрирован: Apr 2008
Репутация:
1,660
Кто сказал что нет проектов?
Проекты есть. Я вот до сих пор понемногу обновляю сборку которую мы разрабатывали с командой разработчиков (активный сервер правда уже закрыт из-за неприбыльности после F2P). 1-40lv Spawnzones, crafting, enchanting, gathering, mounts, most of skills etc...
Всю сеть можно прекрасно "уложить" с netty, добавить хендлеры ответственный за шифрование/дешифрование данных, да и маршаллинг макетов заодно (вот только сейчас идея появилась).
Есть ещё проект на Scala (гдето видел тут на форуме), не думаю что жив, но от туда можно взять пару наработок.
upd: http://forum.zone-game.info/showthread.php?t=24741
Сообщений: 376
Тем: 12
Зарегистрирован: Jul 2012
Репутация:
1,000
SHA
"Ошибка" не понятная мне реализованная разработчиком, хэш реализованный по стандартам, использовал встроенный алгоритм в java, для теста, выдает разный хэш, то-есть хэш разработчика отличается от стандарта и разработчик выдает выходной результат не массивом байт, а массивом без знаковых чисел, почему так, это действительно придется читать документацию вникать в алгоритм, и смотреть на чужой код, проводить анализ...
Работает не трогай, а то работать не будет
Это оставить так нельзя, надо понимать с чем работаешь, как оно работает, потом как улучшать, то что не знаешь
Алгоритм криптографии надо улучшать в первую очередь, он увеличит быстродействие, уменьшить задержку вычислений.
Улучшение в потреблении памяти, в меньшем количестве операции...
Меня мозолит эта криптография Не дает спокойно спать
Не смысла делать, то что выдает разный хэш...
Сдвиг мог быть побитовый
Network
Как отработаю конечный вариант, выложу
Сообщений: 76
Тем: 6
Зарегистрирован: Mar 2009
Репутация:
225
Ошибок там нет. В Тере используется странная имплементация SHA, которая по особому выравнивает (padding) байты если входной массив очень большой (а там по 300 вроде бы байтов?). В яве этот алгоритм "правильно" реализовывается в GNU Crypto. В C# - работает по умолчанию. В С++ я писал вручную (OpenSSL не подходил, а тянуть ради хеша здоровенную крипто-либу не хотелось).
НЛО прилетело и оставило подпись здесь.
Сообщений: 2,455
Тем: 53
Зарегистрирован: Apr 2010
Репутация:
19,728
Бамп во славу Ozzy! Ибо интересно: есть ли какие-нибудь продвижения у ТСа
Ну и ессесно все еще интересно посмотреть на реализацию сети.
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
|