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

Форум администраторов игровых серверов (https://forum.zone-game.info/TT.php)
-   Blade & Soul (https://forum.zone-game.info/forumdisplay.php?f=183)
-   -   Строим эмулятор B&S emulator from scratch (https://forum.zone-game.info/showthread.php?t=34425)

luna9966 13.03.2014 18:34

Строим эмулятор B&S emulator from scratch
 
Дорогие, друзья!

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

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

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

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

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

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

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

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

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


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

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

Deazer 13.03.2014 19:19

Re: Строим эмулятор B&S emulator from scratch
 
Автора знаю прилично и сталкивались с разными проблемами в работе, которые были успешно исправлены. Конечно по поводу архитектуры у всех свои фломастеры , но уверен что будет успех

n3k0nation 15.03.2014 20:34

Re: Строим эмулятор B&S emulator from scratch
 
offtop:
Свернуть ↑Развернуть ↓

luna9966 20.03.2014 18:53

Re: Строим эмулятор B&S emulator from scratch
 
Хотя интерес к данной теме угас значительно, все-таки решил продолжить ее наполнение. Перед тем, как преступить к изложению концепции системы крипта, который мы использовали, хочу выразить свое негодование по поводу идиотов, которые критикуют код и пишут болдом в каждой теме. Ни о каком уважении речь идти не может. О таких гуру кодертсва могу сказать одно - конченные.

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

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


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

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

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

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


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

Dolwin 22.03.2014 12:17

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 ) );
  }
}


luna9966 22.03.2014 18:02

Re: Строим эмулятор B&S emulator from scratch
 
Цитата:

Сообщение от Dolwin (Сообщение 357379)
А что за аргумент 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

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

djoneill 12.08.2014 15:40

Re: Строим эмулятор B&S emulator from scratch
 
you started this for which client ?

luna9966 12.08.2014 18:41

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.

NikolaSerb 23.08.2014 00:05

Re: Строим эмулятор B&S emulator from scratch
 
An English translation would be great!
(i know a little bit russian but its not enough tho :P)


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

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