Beispiel #1
0
        private byte GetDecryptedByte(byte[] inputData, int baseOffset, int offset)
        {
            if (Interlocked.Exchange(ref decryptSeq, 1) == 1)
            {
                log.Error("Decrypt Error");
            }
            int start = baseOffset + offset;

            if (decryptUntil < offset)
            {
                m_packetCrypt.Decrypt(inputData, start, 1);
            }
            Interlocked.Exchange(ref decryptSeq, 0);
            return(inputData[start]);
        }
Beispiel #2
0
        public void HandleEncryptedPacket(ClientEncrypted encrypted)
        {
            byte[] data = encryption.Decrypt(encrypted.Data, encrypted.Data.Length);

            var packet = new ClientGamePacket(data);

            HandlePacket(packet);
        }
Beispiel #3
0
        protected void Decode(ref byte[] data)
        {
            Crypt.Decrypt(data);

            var    header = BitConverter.ToUInt32(data, 0);
            ushort size   = (ushort)(header >> 12);
            ushort opcode = (ushort)(header & 0xFFF);

            data[0] = (byte)(0xFF & size);
            data[1] = (byte)(0xFF & (size >> 8));
            data[2] = (byte)(0xFF & opcode);
            data[3] = (byte)(0xFF & (opcode >> 8));
        }
        public void HandleEncryptedPacket(ClientEncrypted encrypted)
        {
            byte[] data = encryption.Decrypt(encrypted.Data, encrypted.Data.Length);

            // TODO: research this...
            if (data[0] == 0x8C)
            {
                byte[] dataHack = new byte[data.Length - 7];
                Buffer.BlockCopy(data, 7, dataHack, 0, dataHack.Length);

                var packet = new ClientGamePacket(dataHack);
                HandlePacket(packet);
            }
            else
            {
                var packet = new ClientGamePacket(data);
                HandlePacket(packet);
            }
        }
Beispiel #5
0
        protected override void Dispatch(InPacket inPacket)
        {
            try
            {
                PacketCrypt pd = new PacketCrypt(0);

                byte[] ii;
                if (inPacket.Array[0] == 0xAA && inPacket.Array[1] == 0x55)
                {
                    ii = inPacket.Array;
                }
                else
                {
                    ii = pd.Decrypt(inPacket.Array);
                }

                InPacket ip = new InPacket(ii);

                if (ip.OperationCode == (ushort)ClientOpcode.SERVER)
                {
                    var Header = ip.ReadShort();
#if DEBUG
                    Log.Hex("Received (0x{0:X2}) packet from {1}: ", ip.Content, Header, this.Title);
#endif
                    switch (Header)
                    {
                    case 0x0C:
                        FriendPacket.FriendList(this);
                        break;
                    }
                }
            }
            catch (HackException e)
            {
                // TODO: Register offense using the exception's message.
                Log.Warn("Hack exception from {0}: \n{1}", this.Title, e.ToString());
            }
            catch (Exception e)
            {
                Log.Error("Unhandled exception from {0}: \n{1}", this.Title, e.ToString());
            }
        }
Beispiel #6
0
        protected override void Dispatch(InPacket inPacket)
        {
            try
            {
                //Log.Hex("Received packet from {0}: ", inPacket.Array, this.Title);
                PacketCrypt pd = new PacketCrypt(SessionID);

                byte[] ii;
                if (inPacket.Array[0] == 0x4D && inPacket.Array[1] == 0x0)
                {
                    ii = inPacket.Array;
                }
                else
                {
                    ii = pd.Decrypt(inPacket.Array);
                }
                InPacket ip = new InPacket(ii);

                if (ip.OperationCode == (ushort)ClientOpcode.SERVER)
                {
                    GameServerHandler.ServerHandlerReceive(ip, this);
                }
            }
            catch (HackException e)
            {
                if (this.Character != null)
                {
                    // TODO: Register offense points in the database (?).

                    //Log.Warn("Taking Hack Action of {0} against {1}: \n{2}", e.Action, this.Character.Name, e.Message);

                    switch (e.Action)
                    {
                    case HackAction.Disconnection:
                    {
                        this.Dispose();
                    }
                    break;

                    case HackAction.ThirthyDays:
                    {
                    }
                    break;

                    case HackAction.NinetyDays:
                    {
                    }
                    break;

                    case HackAction.Permanent:
                    {
                    }
                    break;
                    }
                }
            }
            catch (Exception e)
            {
                Log.Error("Unhandled Packet Exception from {0}: \n{1}", this.Title, e.ToString());
            }
        }