l2jmobius high five бот l2project

Reagwyr

Последний из атеистов
Участник
Сообщения
100
Розыгрыши
0
Решения
1
Репутация
85
Реакции
45
Баллы
898
Хроники
  1. Chaotic Throne: High Five
Исходники
Присутствуют
Сборка
L2JMobius
Не удается залогиниться на логин сервер ботом L2Project. На l2jserver все проходит успешно. Сборка мобиуса отправляет пакет init, бот его не воспринимает.
Инит пакет мобиуса, длина 172 байта
AC000075F0256721C600000920751AD2C00E4296F0AF016E71BDD7E91C82083A40E1C2C91A039C0BAED45204C77798B62E377F3BE48D1D9550C22001232114531F21CF00B256319C1F98E08730C37AC90D3C771F9D33AAF7EC4CEE8B854657E0F8168923EBC4E70A56407D4EA76F337B875429E01E942749EDEA8077F802A29C0A78138514798B81D5176D4E95DD29FC9CC37720B6AD97F7E0BD07AF83D6207305F6BC3AC484331C24F47000
Инит пакет лыжи, длина 186 байт
BA00D6AE0A94CD0F68AEC97E9C8416582A8563853DFF35193E4F4C14388CCA02687BD73FED5B0ABE0AC5D15D65FB4866936DAC5267ABCF5D5C7BD26805408B6521186F9F0F27192360CC7B98C264CBAFF89D7D77EBE5550376000043D21D94CA2755E0B4468C5FD0CF2F9422E9C74768379DF58141FB006B9CEA0C47E37F3677F1EF893D77943645D654A769413E72FA04C1DC9BC1D832CBB539F6BAF8AF228F4299B1230DD49135CB0938E865A789FEB0D78E3E8AEE35837F7D
Подскажите как исправить или куда копать
 
Не удается залогиниться на логин сервер ботом L2Project. На l2jserver все проходит успешно. Сборка мобиуса отправляет пакет init, бот его не воспринимает.
Инит пакет мобиуса, длина 172 байта
AC000075F0256721C600000920751AD2C00E4296F0AF016E71BDD7E91C82083A40E1C2C91A039C0BAED45204C77798B62E377F3BE48D1D9550C22001232114531F21CF00B256319C1F98E08730C37AC90D3C771F9D33AAF7EC4CEE8B854657E0F8168923EBC4E70A56407D4EA76F337B875429E01E942749EDEA8077F802A29C0A78138514798B81D5176D4E95DD29FC9CC37720B6AD97F7E0BD07AF83D6207305F6BC3AC484331C24F47000
Инит пакет лыжи, длина 186 байт
BA00D6AE0A94CD0F68AEC97E9C8416582A8563853DFF35193E4F4C14388CCA02687BD73FED5B0ABE0AC5D15D65FB4866936DAC5267ABCF5D5C7BD26805408B6521186F9F0F27192360CC7B98C264CBAFF89D7D77EBE5550376000043D21D94CA2755E0B4468C5FD0CF2F9422E9C74768379DF58141FB006B9CEA0C47E37F3677F1EF893D77943645D654A769413E72FA04C1DC9BC1D832CBB539F6BAF8AF228F4299B1230DD49135CB0938E865A789FEB0D78E3E8AEE35837F7D
Подскажите как исправить или куда копать
Без пакета с логин сервера, который blowfish ключ инициирует - смотреть на эти пакеты нет смысла.
 
Без пакета с логин сервера, который blowfish ключ инициирует - смотреть на эти пакеты нет смысла.
Как я понял инит пакет шифруется статическим ключом, а он на всех сборках хф один и тот же
6B 60 CB 5B 82 CE 90 B1 CC 2B 6C 55 6C 6C 6C 6C
Мне б пофиксить по быстрому, может кто знает что не так, что там мобиус наковырял. Клиент же норм заходит, а бот не хочет. Не хотелось бы лыжу расковыривать и сравнивать с мобиусом
 
Ну вот INIT (AKA AUTH_SERVER_PROTOCOL_VERSION) у мобиусовского логин сервера
Java:
        LoginServerPackets.INIT.writeId(this);
        writeInt(_sessionId); // session id
        writeInt(0x0000c621); // protocol revision
        
        writeBytes(_publicKey); // RSA Public Key
        
        // unk GG related?
        writeInt(0x29DD954E);
        writeInt(0x77C39CFC);
        writeInt(0x97ADB620);
        writeInt(0x07BDE0F7);
        
        writeBytes(_blowfishKey); // BlowFish key
        writeByte(0); // null termination ;)
Вот пакет от L2JServer:
Java:
    @Override
    protected void write() {
        writeC(0x00); // init packet id
        
        writeD(_sessionId); // session id
        writeD(0x0000c621); // protocol revision
        
        writeB(_publicKey); // RSA Public Key
        
        // unk GG related?
        writeD(0x29DD954E);
        writeD(0x77C39CFC);
        writeD(0x97ADB620);
        writeD(0x07BDE0F7);
        
        writeB(_blowfishKey); // BlowFish key
        writeC(0x00); // null termination ;)
    }
Вот что сейчас в 418 протоколе происходит:
Java:
        OutgoingPackets.AUTH_SERVER_PROTOCOL_VERSION.writeHeader(packet);
        packet.writeInt(client.getSessionId()); // session id
        packet.writeInt(50721); // 0xC621 protocol version
        packet.writeBytes(client.getScrambledPair().getScrambledModulus()); // 128 key

        // on NA not used anymore
        packet.writeBytes(new byte[16]);    // 16 gg key
        // on NA not used anymore

        packet.writeBytes(client.getBlowfishKey()); // 16 second key
        packet.writeByte(4);    // login type?
        packet.writeByte(0);    // company code 0
        packet.writeByte(0);    // company code 1
        packet.writeByte(0);    // company code 2
        packet.writeBytes(new byte[15]);    // in engine it looks as C D D D, but it has more data than needs
 
Ну вот INIT (AKA AUTH_SERVER_PROTOCOL_VERSION) у мобиусовского логин сервера
Java:
        LoginServerPackets.INIT.writeId(this);
        writeInt(_sessionId); // session id
        writeInt(0x0000c621); // protocol revision
     
        writeBytes(_publicKey); // RSA Public Key
     
        // unk GG related?
        writeInt(0x29DD954E);
        writeInt(0x77C39CFC);
        writeInt(0x97ADB620);
        writeInt(0x07BDE0F7);
     
        writeBytes(_blowfishKey); // BlowFish key
        writeByte(0); // null termination ;)
Вот пакет от L2JServer:
Java:
    @Override
    protected void write() {
        writeC(0x00); // init packet id
     
        writeD(_sessionId); // session id
        writeD(0x0000c621); // protocol revision
     
        writeB(_publicKey); // RSA Public Key
     
        // unk GG related?
        writeD(0x29DD954E);
        writeD(0x77C39CFC);
        writeD(0x97ADB620);
        writeD(0x07BDE0F7);
     
        writeB(_blowfishKey); // BlowFish key
        writeC(0x00); // null termination ;)
    }
Вот что сейчас в 418 протоколе происходит:
Java:
        OutgoingPackets.AUTH_SERVER_PROTOCOL_VERSION.writeHeader(packet);
        packet.writeInt(client.getSessionId()); // session id
        packet.writeInt(50721); // 0xC621 protocol version
        packet.writeBytes(client.getScrambledPair().getScrambledModulus()); // 128 key

        // on NA not used anymore
        packet.writeBytes(new byte[16]);    // 16 gg key
        // on NA not used anymore

        packet.writeBytes(client.getBlowfishKey()); // 16 second key
        packet.writeByte(4);    // login type?
        packet.writeByte(0);    // company code 0
        packet.writeByte(0);    // company code 1
        packet.writeByte(0);    // company code 2
        packet.writeBytes(new byte[15]);    // in engine it looks as C D D D, but it has more data than needs
Ну да, много чего смотрел в сурсах, многое идентично, те же классы пакетов инит. Мне кажется мобиусовский инит в бловфиш не заворачивается, хотя как тогда его клиент нормально обрабатывает. Мне кажется, что вообще куски кода в логин сервере мобиуса тупо не работают. Инит вроде просто отправляется на outputstream и флушится
Код:
public void sendPacket(WritablePacket packet)
    {
        final Socket socket = getSocket();
        if ((socket != null) && socket.isConnected())
        {
            final byte[] sendableBytes = packet.getSendableBytes();
            if (sendableBytes == null)
            {
                return;
            }
          
            try
            {
                final OutputStream outputStream = getOutputStream();
                synchronized (this)
                {
                    outputStream.write(sendableBytes);
                    outputStream.flush();
                }
            }
            catch (Exception ignored)
            {
            }
        }
    }
Хотя должен в SendThread идти, где должен через
final byte[] sendableBytes = writablePacket.getSendableBytes(_client.getEncryption());
обрабатываться.
Где класс SendThread там используется я не нашел, скорее всего нигде не используется

Init содержит динамический Blowfish ключ случайно генерируемый для каждого клиента. Этот пакет сначала шифруется по алгоритму XOR(ключ генерируется
случайным образом и помещается в конце пакета), а потом шифруется по алгоритму Blowfish, статическим ключом.
Где инит в бловфиш в логинсервере оборачивается я не не нашел

Да я был прав, логин сервер мобиуса не криптует пакет инит. Ни rsa, ни blowfish. Но клиент некриптованный пакет принимает и так. Сейчас реализовал крипт пакета инит, клиент его нормально обрабатывает, но бот по прежнему нет. Возможно что-то с чексуммами не дописал. Посмотрю, потом отпишусь что там

Пока на этом этапе. Логин сервер мобиуса не криптовал рса и блоуфишем пакет инит, потом не криптовал блоуфишем пакеты логин сервера. Думаю это потому что он перевел ByteBuffer пакетов лыжи на byte array, а дальше функционал не доделал. Это я сейчас реализовал. Теперь не заходит на гейм сервер, еще не смотрел, но думаю и там блоуфиша нет. Потом посмотрю. Удивительно, что клиент пакеты без шифрования нормально обрабатывает

Все, разобрался. Да, логин сервер мобиуса ничего не шифрует и клиент это нормально принимает, а бот нет. К гейм серверу не мог подключиться, потому что чексумму неправильно к пакету подключал
 
Назад
Сверху Снизу