Строим эмулятор B&S emulator from scratch - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Пользователи Календарь Все разделы прочитаны
Вернуться   Форум администраторов игровых серверов > MMO > Другие игры / Other games > Blade & Soul

Важная информация

Blade & Soul Раздел посвящен Blade & Soul - новой игре от NCsoft, которая пока находится в стадии ЗБТ.
Описание темы:Loginserver, LobbyServer, GameServer, Packets, Opcodes, etc.

Ответ
Опции темы
Непрочитано 13.03.2014, 18:34   #1
Пользователь

Автор темы (Топик Стартер) Строим эмулятор B&S emulator from scratch

Дорогие, друзья!

К сожалению мой проект не стал опенсурсом. Не стал не потому, что я "зажал" код, а потому что труды мои никто в конце концов не оценит. Да, да, даже ника не вспомните. Поэтому я пилил эмулятор в привате. Сегодня хочу сообщить вам, что разработка эмулятора почти прекращена. Причина очевидная - разработчики изменяют сетевую часть игры каждый вторник, среду. Новые пакеты, новые опкоды. Идти по пути обновлений означает тратить свое время на сбор новых опкодов и разбор структуры пакетов. Не имею желания больше заниматься этим говном. Не потому что игра плохая, игра отличная, но потому что разработчики сами не определились со своей игрой. На этом сопельки можно закончить.

Что я планирую сделать в этом топике? Нет, я не выложу вам сурсы и свои наработки, поскольку это означало бы дать вам рыбу, сожрав которую, вы пришли бы в поисках очередной. Я дам вам удачку, ловите сами.

Большая часть наработок принадлежит разработчикам Атомикса, ребятам, которые поделились со мной своими наработками. Вопрос о доступности кода мы обсуждали, и они не против, если я покажу вам отрывки кода snippets.

Я покажу структуры серверов, покажу опкоды, пакеты, крипты и всякое навроде этого постепенно и шаг за шагом. Вы сможете сами запилить себе эмулятор. Как вы поступите со своими наработками мне не важно. Расшарите или продадите, но начальная информация будет общедоступной на этом форуме.

Язык программирования будет C# и все примеры будут включать в себя принципы C#. Но поскольку я не планирую отдать вам рабочий сурс ввиде "просто копипейст энд мейк билд", вы сможете переписать под любой вам нужный язык.

Данный топик, пожалуй посвящен людям с опытом в кодинге, нубы и нубские вопросы не приветствуются, т.к. обучать кого-либо я не собираюсь. Нуб? Проходи мимо. Также не приветствуются в топике "Одминистраторы фришек" с вопросами "когда уже выложат рабочий сервер, чтобы на школьниках можно было рубить бабло?". Никто вам ничего не выложит, и если у вас есть деньги но нету мозгов, вам тоже никто не собирается помогать, в частности я.

Поэтому не пишите мне в ЛС с предложениями.

Ну а теперь перейдем к технической части топика. Начнем естественно с логин сервера.

Относительно логин сервера / Concerning LoginServer:
Свернуть ↑Развернуть ↓


Продолжение следует.

Топик буду обновлять по мере ваших успехов и продвижений в разработке.

Последний раз редактировалось luna9966; 13.03.2014 в 19:02.
luna9966 вне форума Ответить с цитированием
Сказали спасибо:
Непрочитано 13.03.2014, 19:19   #2
Аватар для Deazer

По умолчанию Re: Строим эмулятор B&S emulator from scratch

Автора знаю прилично и сталкивались с разными проблемами в работе, которые были успешно исправлены. Конечно по поводу архитектуры у всех свои фломастеры , но уверен что будет успех
Deazer вне форума Ответить с цитированием
Непрочитано 15.03.2014, 20:34   #3
Аватар для n3k0nation
Antihero

По умолчанию Re: Строим эмулятор B&S emulator from scratch

offtop:
Свернуть ↑Развернуть ↓
__________________
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
n3k0nation вне форума Ответить с цитированием
Непрочитано 20.03.2014, 18:53   #4
Пользователь

Автор темы (Топик Стартер) Re: Строим эмулятор B&S emulator from scratch

Хотя интерес к данной теме угас значительно, все-таки решил продолжить ее наполнение. Перед тем, как преступить к изложению концепции системы крипта, который мы использовали, хочу выразить свое негодование по поводу идиотов, которые критикуют код и пишут болдом в каждой теме. Ни о каком уважении речь идти не может. О таких гуру кодертсва могу сказать одно - конченные.

Для отсальных скажу лишь то, что код атомикса выдерживал онлайн в 3к человек и выдерживал его стабильно. Поэтому если хотите убедить меня в том, что наш код плохой, напишите свой сервер без наших наработок и протестируйте его на живом онлайне.

Относительно Лобби Сервера:
Свернуть ↑Развернуть ↓


Человеческая просьба. Если вы не ставите плюсики или "спасибо", то хотя бы не пишите гадости про код. Не нравится? Не комментируйте, пройдите мимо, закройте эту закладку, а лучше забудьте.

п.с. чуть позже выложу сниффы пакетов лобби сервера, уже раскодированные под последнюю версию клиента. Сможете сами их ковырять.

Добавлено через 1 час 33 минуты
Далее выкладываю свежий снифф лобби сервера:

Пакеты Лобби Сервера (снифф):
Свернуть ↑Развернуть ↓


Первый байт означает опкод, второй байт является определяющим тип пакета. Таким образом грубо говоря, первые два байта можно использовать как опкод. Пакеты читаются очень легко, поэтому читающий да прочтет!

Последний раз редактировалось luna9966; 20.03.2014 в 20:27. Причина: Добавлено сообщение
luna9966 вне форума Ответить с цитированием
Сказали спасибо:
Непрочитано 22.03.2014, 12:17   #5
Аватар для Dolwin
Пользователь

По умолчанию Re: Строим эмулятор B&S emulator from scratch

А что за аргумент checkHash в методе public void OnAuthKeyData(byte[] exchangeKey, string checkHash, int serial)? Как он генерируется?

В роуте /Auth/KeyData я получают 2массива каких то.
По первому - я генерирую ключики:
Код:
handler.getKeyExchange().generateKey( AbstractKeyExchange.Mode.SERVER, exchangeKey );
      String hash = handler.getKeyExchange().getAuthentication();
Дальше не до проверить хеш с checkHash
Но вот что за checkHash я так и не понял

От клиент приходит вторым массивом какой то ключ 32 байта
То это далеко не текст..
Помогите плиз)

п.с.

Код:
package openbns.loginserver.net.client.impl;

import io.netty.buffer.ByteBufInputStream;
import openbns.commons.crypt.AbstractKeyExchange;
import openbns.commons.crypt.CryptUtil;
import openbns.commons.xml.StsXStream;
import openbns.loginserver.net.client.AbstractRequestPacket;
import openbns.loginserver.net.client.dto.KeyDataDTO;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.nio.ByteBuffer;
import java.nio.ByteOrder;

/**
 * Created with IntelliJ IDEA.
 * User: Eugene Chipachenko
 * Date: 27.01.14
 * Time: 21:14
 */
public class RequestKeyData extends AbstractRequestPacket
{
  private static final Log log = LogFactory.getLog( RequestKeyData.class );
  private KeyDataDTO keyData;

  @Override
  public void read()
  {
    StsXStream stream = new StsXStream();
    stream.processAnnotations( KeyDataDTO.class );
    keyData = (KeyDataDTO) stream.fromXML( new ByteBufInputStream( buf ) );
    log.debug( "Read from client object: " + keyData );
  }

  @Override
  public void execute()
  {
    byte[] data = CryptUtil.base64( keyData.getKeyData() );
    ByteBuffer bf = ByteBuffer.wrap( data );
    bf.order( ByteOrder.LITTLE_ENDIAN );

    int size1 = bf.getInt();
    byte[] exchangeKey = new byte[ size1 ];
    bf.get( exchangeKey );

    int size2 = bf.getInt();
    byte[] checkHash = new byte[ size2 ];
    bf.get( checkHash );

    try
    {
      handler.getKeyExchange().generateKey( AbstractKeyExchange.Mode.SERVER, exchangeKey );
      String hash = handler.getKeyExchange().getAuthentication();
      // Что я тут забыл то??
      System.out.println( hash );
    }
    catch( Exception e )
    {
      e.printStackTrace();
    }

    System.out.println( new String( exchangeKey ) );
    System.out.println( new String( checkHash ) );
  }
}
__________________
PLAYMMO.SU | OPENBNS | DARKOMENS
Dolwin вне форума Ответить с цитированием
Непрочитано 22.03.2014, 18:02   #6
Пользователь

Автор темы (Топик Стартер) Re: Строим эмулятор B&S emulator from scratch

Цитата:
Сообщение от Dolwin Посмотреть сообщение
А что за аргумент checkHash в методе public void OnAuthKeyData(byte[] exchangeKey, string checkHash, int serial)? Как он генерируется?

В роуте /Auth/KeyData я получают 2массива каких то.
По первому - я генерирую ключики:
Код:
handler.getKeyExchange().generateKey( AbstractKeyExchange.Mode.SERVER, exchangeKey );
      String hash = handler.getKeyExchange().getAuthentication();
Дальше не до проверить хеш с checkHash
Но вот что за checkHash я так и не понял

От клиент приходит вторым массивом какой то ключ 32 байта
То это далеко не текст..
Помогите плиз)
checkhash идет от пакета CM_AUTH_KEYDATA

CM_AUTH_KEYDATA:
Свернуть ↑Развернуть ↓


Ключ который приходит в 32 байтах считываем путем: byte[] hash = br.ReadBytes(br.ReadInt32());

И затем переводим в base64 string checkHash = Convert.ToBase64String(hash);

получая значение checkHash

Желательно в этой теме не обсуждать строительство эмулятора, лучше писать уже в существующих темах, чтобы данная тема была максимально чистой и понятной.
luna9966 вне форума Ответить с цитированием
Непрочитано 12.08.2014, 15:40   #7
Пользователь

По умолчанию Re: Строим эмулятор B&S emulator from scratch

you started this for which client ?
djoneill вне форума Ответить с цитированием
Непрочитано 12.08.2014, 18:41   #8
Пользователь

Автор темы (Топик Стартер) Re: Строим эмулятор B&S emulator from scratch

I already told you, take one thread and put all your questions there. Don't make a MESS on forum. OK? Moreover current thread is suppose to be guide-like, I strongly don't recommend you to put any dicussion here. Otherwise I will ask moderator to clean this thread up.

The answer you are looking for, there is no certain client. All information above is the same for all BNS versions. So doesn't matter what version you will choose, the login server, lobby always the same. The game part would be slightly different because of opcodes which are different for each update. The info above gives you basics to understand how things should work, but it never meant to be a source.

And you should understand too, why do you need a client without GG and Themida. First of all, full BNS encryption consists of RSA and Deffie-Hellman with Ripemd128 cipher which later is used to generate 16 bytes AES key, which will be used for main packets encryption. Got it? To get AES keys you don't need to reverse RSA stuff, you just need to write small hooker for AES Encryption function and you will get all of AES keys which are used in encryption process. Once you did it, you can decrypt all packets and see the structure... If you are good with C++ you can use MS Detour, if C# then use EasyHook. That's it.
luna9966 вне форума Ответить с цитированием
Непрочитано 23.08.2014, 00:05   #9
Пользователь

По умолчанию Re: Строим эмулятор B&S emulator from scratch

An English translation would be great!
(i know a little bit russian but its not enough tho :P)
NikolaSerb вне форума Ответить с цитированием
Ответ

Метки
blade and soul, bns emulator, bns server, crypt, network


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


© 2007–2018 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 06:41. Часовой пояс GMT +3.

Вверх