Ejemplo n.º 1
0
        internal void Start(ServerInfo info)
        {
            if (info != null)
            {
                var siv = new byte[4];
                var riv = new byte[4];

                Random.NextBytes(siv);
                Random.NextBytes(riv);

                m_clientCipher = new MapleCipher(info.Version, siv, m_aesCipher, CipherType.Encrypt);
                m_serverCipher = new MapleCipher(info.Version, riv, m_aesCipher, CipherType.Decrypt);

                using (var p = new PacketWriter(14, 16))
                {
                    p.WriteShort(info.Version);
                    p.WriteMapleString(info.Subversion);
                    p.WriteBytes(riv);
                    p.WriteBytes(siv);
                    p.WriteByte(info.Locale);

                    SendRawPacket(p.ToArray());
                }
            }

            Receive();
        }
Ejemplo n.º 2
0
        private static byte[] AuthSecond(string auth)
        {
            var data = new PacketWriter();

            data.WriteUnicodeString(auth);

            return(AuthCipher.WriteHeader(AUTH_2, authKey2, data.ToArray()));
        }
Ejemplo n.º 3
0
        private static byte[] AuthThird(string auth)
        {
            var data = new PacketWriter();

            data.WriteInt(2);
            data.WriteUnicodeString(auth);
            data.WriteBytes(0x13, 0x22, 0x00, 0x02);

            return(AuthCipher.WriteHeader(AUTH_3, authKey3, data.ToArray()));
        }
Ejemplo n.º 4
0
        private static byte[] AuthFirst(string user, string pass)
        {
            var data = new PacketWriter();

            data.WriteInt(8);
            data.WriteUnicodeString(user);
            data.WriteUnicodeString(pass);
            data.WriteBytes(0x00, 0x00, 0x13, 0x22, 0x00, 0x02, 0x01, 0x00);
            data.WriteZero(10);
            data.WriteUnicodeString(GetRandomString(23)); // 23 Random characters (Length 46 as unicode)
            data.WriteInt(1);
            data.WriteZero(2);

            return(AuthCipher.WriteHeader(AUTH_1, authKey1, data.ToArray()));
        }
Ejemplo n.º 5
0
        public void SendPacket(PacketWriter packet)
        {
            if (!m_connected)
            {
                throw new InvalidOperationException("Socket is not connected");
            }

            if (!m_encrypted)
            {
                throw new InvalidOperationException("Handshake has not been received yet");
            }

            byte[] data = packet.ToArray();

            if (data.Length < 2)
            {
                throw new ArgumentOutOfRangeException("Packet length must be greater than 2", "packet");
            }

            const int HeaderSize = 4;

            lock (m_sendLock)
            {
                byte[] final = new byte[data.Length + HeaderSize];

                switch (m_sessionType)
                {
                case SessionType.Client:
                    m_clientCipher.GetHeaderToServer(data.Length, final);
                    break;

                case SessionType.Server:
                    m_clientCipher.GetHeaderToClient(data.Length, final);
                    break;
                }

                m_clientCipher.Transform(data);

                Buffer.BlockCopy(data, 0, final, HeaderSize, data.Length);

                SendRawPacket(final);
            }
        }
Ejemplo n.º 6
0
        internal void Start(ServerInfo info)
        {
            m_serverCipher = new MapleCipher(info.Version, info.Riv, m_aesCipher, CipherType.Decrypt);
            m_clientCipher = new MapleCipher(info.Version, info.Siv, m_aesCipher, CipherType.Encrypt);

            PacketWriter pw = new PacketWriter(15, 17);

            pw.WriteShort(info.Version);
            pw.WriteMapleString(info.Subversion);
            pw.WriteBytes(info.Riv);
            pw.WriteBytes(info.Siv);
            pw.WriteShort(info.Locale);

            SendRawPacket(pw.ToArray());

            Receive();

            Debug.WriteLine("Started local server (toClient)");
        }
Ejemplo n.º 7
0
        internal void Start(ServerInfo info)
        {
            if (info != null)
            {
                byte[] siv = new byte[4];
                byte[] riv = new byte[4];
                var    rng = new Random(Interlocked.Increment(ref rngSeed));

                rng.NextBytes(siv);
                rng.NextBytes(riv);
                clientCipher = new MapleCipher(info.Version, siv, aesCipher);
                serverCipher = new MapleCipher(info.Version, riv, aesCipher);

                var p = new PacketWriter(14, 16);
                p.WriteShort(info.Version);
                p.WriteMapleString(info.Subversion);
                p.WriteBytes(riv);
                p.WriteBytes(siv);
                p.WriteByte(info.Locale);
                SendRawPacket(p.ToArray());
            }

            Receive();
        }
Ejemplo n.º 8
0
 public void SendPacket(PacketWriter packet)
 {
     SendPacket(packet.ToArray());
 }