Beispiel #1
0
        private void onKeyPacket(ByteBuffer packet)
        {
            packet.ReadByte();
            this.cryptKey = packet.ReadBytes(16);

            this.cryptKey[8]  = (byte)0xc8;
            this.cryptKey[9]  = (byte)0x27;
            this.cryptKey[10] = (byte)0x93;
            this.cryptKey[11] = (byte)0x01;
            this.cryptKey[12] = (byte)0xa1;
            this.cryptKey[13] = (byte)0x6c;
            this.cryptKey[14] = (byte)0x31;
            this.cryptKey[15] = (byte)0x97;

            serverCrypt.setKey(this.cryptKey);
            clientCrypt.setKey(this.cryptKey);
            // ddcd
            packet.ReadInt32();
            packet.ReadInt32();
            packet.ReadByte();
            this.obfusicateKey = packet.ReadInt32();
            this.clientCrypt.generateOpcodeTable(this.obfusicateKey);
        }
Beispiel #2
0
 public byte[] enableCrypt()
 {
     byte[] key = BlowFishKeygen.getRandomKey();
     _crypt.setKey(key);
     return(key);
 }
        /// <summary>
        /// Handles incoming packet.
        /// </summary>
        /// <param name="packet">Incoming packet.</param>
        protected override void Handle( Packet packet )
        {
            Logger.WriteLine(Source.OuterNetwork, "Received: {0}", packet.ToString());

            //Logger.WriteLine(Source.Debug, "packet.FirstOpcode = {0}", packet.FirstOpcode);

            switch ( State )
            {
                case UserConnectionState.Disconnected:
                    throw new InvalidOperationException();

                case UserConnectionState.Connected:
                    {
                        switch ( packet.FirstOpcode )
                        {
                            case 0x0e: // protocol
                                {
                                    int revision = packet.ReadInt();

                                    //Logger.WriteLine(Source.Debug, "Protocol Revision: {0}", revision);

                                    if ( revision == -2 )
                                    {
                                        CloseConnection();
                                        // remove from active connections list
                                    }

                                    if ( revision < Settings.Default.WorldMinProtoRev || revision > Settings.Default.WorldMaxProtoRev )
                                    {
                                        CloseConnection();
                                        // remove from active connections, log
                                    }

                                    byte[] keyIN = BlowFishKeygen.GetNext();
                                    //byte[] keyOUT = BlowFishKeygen.GetNext();

                                    m_Crypt = new GameCrypt();
                                    m_Crypt.setKey(keyIN);

                                    SendNoCrypt(KeyPacket.Create(keyIN));

                                    BeginReceive();

                                    break;
                                }
                            case 0x2b: // login
                                {
                                    new AuthLogin(packet).RunImpl();
                                    break;
                                }
                            default:
                                {
                                    Logger.WriteLine(Source.OuterNetwork, "Unknown packet on state {0}: Opcode = {1}", State, packet.FirstOpcode);
                                    break;
                                }
                        }

                        return;
                    }

                case UserConnectionState.Authed:
                    {
                        switch (packet.FirstOpcode)
                        {
                            default:
                                {
                                    Logger.WriteLine(Source.OuterNetwork, "Unknown packet on state {0}: Opcode = {1}", State, packet.FirstOpcode);
                                    break;
                                }
                        }
                        return;
                    }
            }
        }
Beispiel #4
0
        /// <summary>
        /// Handles incoming packet.
        /// </summary>
        /// <param name="packet">Incoming packet.</param>
        protected override void Handle(Packet packet)
        {
            Logger.WriteLine(Source.OuterNetwork, "Received: {0}", packet.ToString());

            //Logger.WriteLine(Source.Debug, "packet.FirstOpcode = {0}", packet.FirstOpcode);

            switch (State)
            {
            case UserConnectionState.Disconnected:
                throw new InvalidOperationException();

            case UserConnectionState.Connected:
            {
                switch (packet.FirstOpcode)
                {
                case 0x0e:             // protocol
                {
                    int revision = packet.ReadInt();

                    //Logger.WriteLine(Source.Debug, "Protocol Revision: {0}", revision);

                    if (revision == -2)
                    {
                        CloseConnection();
                        // remove from active connections list
                    }

                    if (revision < Settings.Default.WorldMinProtoRev || revision > Settings.Default.WorldMaxProtoRev)
                    {
                        CloseConnection();
                        // remove from active connections, log
                    }

                    byte[] keyIN = BlowFishKeygen.GetNext();
                    //byte[] keyOUT = BlowFishKeygen.GetNext();

                    m_Crypt = new GameCrypt();
                    m_Crypt.setKey(keyIN);

                    SendNoCrypt(KeyPacket.Create(keyIN));

                    BeginReceive();

                    break;
                }

                case 0x2b:             // login
                {
                    new AuthLogin(packet).RunImpl();
                    break;
                }

                default:
                {
                    Logger.WriteLine(Source.OuterNetwork, "Unknown packet on state {0}: Opcode = {1}", State, packet.FirstOpcode);
                    break;
                }
                }

                return;
            }

            case UserConnectionState.Authed:
            {
                switch (packet.FirstOpcode)
                {
                default:
                {
                    Logger.WriteLine(Source.OuterNetwork, "Unknown packet on state {0}: Opcode = {1}", State, packet.FirstOpcode);
                    break;
                }
                }
                return;
            }
            }
        }