Ejemplo n.º 1
0
        public static unsafe void DecryptPacket(Blowfish blowfish, ref BasePacket packet)
        {
            byte[] data = packet.data;
            int    size = packet.header.packetSize;

            int offset = 0;

            while (offset < data.Length)
            {
                if (data.Length < offset + SubPacket.SUBPACKET_SIZE)
                {
                    throw new OverflowException("Packet Error: Subpacket was too small");
                }

                SubPacketHeader header;
                fixed(byte *pdata = &data[offset])
                {
                    header = (SubPacketHeader)Marshal.PtrToStructure(new IntPtr(pdata), typeof(SubPacketHeader));
                }

                if (data.Length < offset + header.subpacketSize)
                {
                    throw new OverflowException("Packet Error: Subpacket size didn't equal subpacket data");
                }

                blowfish.Decipher(data, offset + 0x10, header.subpacketSize - 0x10);

                offset += header.subpacketSize;
            }
        }
Ejemplo n.º 2
0
        public static BasePacket CreatePacket(SubPacket subpacket, bool isAuthed, bool isEncrypted)
        {
            //Create Header
            BasePacketHeader header = new BasePacketHeader();

            byte[] data = null;

            header.isAuthenticated = isAuthed ? (byte)1 : (byte)0;
            header.isEncrypted     = isEncrypted ? (byte)1 : (byte)0;
            header.numSubpackets   = 1;
            header.packetSize      = BASEPACKET_SIZE;
            header.timestamp       = Utils.MilisUnixTimeStampUTC();

            //Get packet size
            header.packetSize += subpacket.header.subpacketSize;

            data = new byte[header.packetSize - 0x10];

            //Add Subpackets
            byte[] subpacketData = subpacket.getBytes();
            Array.Copy(subpacketData, 0, data, 0, subpacketData.Length);

            Debug.Assert(data != null);

            BasePacket packet = new BasePacket(header, data);

            return(packet);
        }
Ejemplo n.º 3
0
        public unsafe static BasePacketHeader GetHeader(byte[] bytes)
        {
            BasePacketHeader header;

            if (bytes.Length < BASEPACKET_SIZE)
                throw new OverflowException("Packet Error: Packet was too small");

            fixed(byte *pdata = &bytes[0])
            {
                header = (BasePacketHeader)Marshal.PtrToStructure(new IntPtr(pdata), typeof(BasePacketHeader));
            }

            return(header);
        }
Ejemplo n.º 4
0
        public static BasePacket CreatePacket(byte[] data, bool isAuthed, bool isEncrypted)
        {
            Debug.Assert(data != null);

            //Create Header
            BasePacketHeader header = new BasePacketHeader();

            header.isAuthenticated = isAuthed ? (byte)1 : (byte)0;
            header.isEncrypted     = isEncrypted ? (byte)1 : (byte)0;
            header.numSubpackets   = 1;
            header.packetSize      = BASEPACKET_SIZE;
            header.timestamp       = Utils.MilisUnixTimeStampUTC();

            //Get packet size
            header.packetSize += (ushort)data.Length;

            BasePacket packet = new BasePacket(header, data);

            return(packet);
        }
Ejemplo n.º 5
0
        public unsafe BasePacket(byte[] bytes, ref int offset)
        {
            if (bytes.Length < offset + BASEPACKET_SIZE)
            {
                throw new OverflowException("Packet Error: Packet was too small");

                fixed(byte *pdata = &bytes[offset])
                {
                    header = (BasePacketHeader)Marshal.PtrToStructure(new IntPtr(pdata), typeof(BasePacketHeader));
                }

                int packetSize = header.packetSize;
                Console.WriteLine("packetSize: " + packetSize);
                if (bytes.Length < offset + header.packetSize)
                    throw new OverflowException("Packet Error: Packet size didn't equal given size"); }

                data = new byte[packetSize - BASEPACKET_SIZE];
                Array.Copy(bytes, offset + BASEPACKET_SIZE, data, 0, packetSize - BASEPACKET_SIZE);

                offset += packetSize;
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Default BasePacketConnectionType = zone
        /// </summary>
        /// <param name="subpackets"></param>
        /// <param name="isAuthed"></param>
        /// <param name="isEncrypted"></param>
        /// <returns></returns>
        public static BasePacket CreatePacket(List <SubPacket> subpackets, bool isAuthed, bool isEncrypted, BasePacketConnectionTypes connectionType = BasePacketConnectionTypes.Zone)
        {
            //Create Header
            BasePacketHeader header = new BasePacketHeader();

            byte[] data = null;

            header.isAuthenticated = isAuthed ? (byte)1 : (byte)0;
            header.isEncrypted     = isEncrypted ? (byte)1 : (byte)0;
            header.numSubpackets   = (ushort)subpackets.Count;
            header.packetSize      = BASEPACKET_SIZE;
            header.timestamp       = Utils.MilisUnixTimeStampUTC();
            header.connectionType  = (ushort)connectionType;

            //Get packet size
            foreach (SubPacket subpacket in subpackets)
            {
                header.packetSize += subpacket.header.subpacketSize;
            }

            data = new byte[header.packetSize - 0x10];

            //Add Subpackets
            int offset = 0;

            foreach (SubPacket subpacket in subpackets)
            {
                byte[] subpacketData = subpacket.getBytes();
                Array.Copy(subpacketData, 0, data, offset, subpacketData.Length);
                offset += (ushort)subpacketData.Length;
            }

            Debug.Assert(data != null && offset == data.Length && header.packetSize == 0x10 + offset);

            BasePacket packet = new BasePacket(header, data);

            return(packet);
        }
Ejemplo n.º 7
0
 public BasePacket(BasePacketHeader header, byte[] data)
 {
     this.header = header;
     this.data   = data;
 }