Пример #1
0
        public void Enable()
        {
            client.Rsa = Constants.RSAKey.OpenTibiaM;

            loginClientPort = GetFreePort();
            worldClientPort = GetFreePort(loginClientPort + 1);

            if (!client.IsOpenTibiaServer && client.LoginServers[0].Server == "localhost")
            {
                loginServers = Client.DefaultServers;
            }
            else
            {
                loginServers = client.LoginServers;
            }


            client.LoginServers = new LoginServer[] { new LoginServer("localhost", loginClientPort) };

            clientInMessage  = new InMessage();
            clientOutMessage = new OutMessage();

            serverInMessage  = new InMessage();
            serverOutMessage = new OutMessage();

            StartListen();
        }
Пример #2
0
        public void Enable()
        {
            client.Rsa = Constants.RSAKey.OpenTibiaM;

            loginClientPort = GetFreePort();
            worldClientPort = GetFreePort(loginClientPort + 1);

            if (!client.IsOpenTibiaServer && client.LoginServers[0].Server == "127.0.0.1")
            {
                loginServers = Client.DefaultServers;
            }
            else
            {
                loginServers = client.LoginServers;
            }

            client.LoginServers = new LoginServer[] { new LoginServer("127.0.0.1", loginClientPort) };

            if (client.Version.Number == ClientVersion.Version1011.Number)
            {
                Util.Memory.WriteBytes(client.ProcessHandle, client.MemoryAddresses.ClientProxyCheckFunctionPointer, client.MemoryAddresses.ClientProxyCheckFunctionNOP, 15);
            }

            clientInMessage  = new InMessage();
            clientOutMessage = new OutMessage();

            serverInMessage  = new InMessage();
            serverOutMessage = new OutMessage();

            StartListen();
        }
Пример #3
0
		public void Enable()
		{
			client.Rsa = Constants.RSAKey.OpenTibiaM;

			loginClientPort = GetFreePort();
			worldClientPort = GetFreePort(loginClientPort + 1);

			if (!client.IsOpenTibiaServer && client.LoginServers[0].Server == "127.0.0.1")
				loginServers = Client.DefaultServers;
			else
				loginServers = client.LoginServers;

			client.LoginServers = new LoginServer[] { new LoginServer("127.0.0.1", loginClientPort) };
            
            if (client.Version.Number == ClientVersion.Version1011.Number)
                Util.Memory.WriteBytes(client.ProcessHandle, client.MemoryAddresses.ClientProxyCheckFunctionPointer, client.MemoryAddresses.ClientProxyCheckFunctionNOP, 15);

			clientInMessage = new InMessage();
			clientOutMessage = new OutMessage();

			serverInMessage = new InMessage();
			serverOutMessage = new OutMessage();

			StartListen();
		}
Пример #4
0
        private static void Encrypt(OutMessage msg, RsaEngine engine)
        {
            var encrpted = engine.ProcessBlock(msg.Buffer, msg.WritePosition, 128);

            if (msg.WritePosition + 128 > msg.Size)
                msg.Size = msg.WritePosition + 128;

            Array.Copy(encrpted, 0, msg.Buffer, msg.WritePosition, 128);
            msg.Encrypted = true;
        }
Пример #5
0
        private static void Encrypt(OutMessage msg, RsaEngine engine)
        {
            var encrpted = engine.ProcessBlock(msg.Buffer, msg.WritePosition, 128);

            if (msg.WritePosition + 128 > msg.Size)
            {
                msg.Size = msg.WritePosition + 128;
            }

            Array.Copy(encrpted, 0, msg.Buffer, msg.WritePosition, 128);
            msg.Encrypted = true;
        }
Пример #6
0
        /// <summary>
        /// Encrypts the message.
        /// </summary>
        /// <param name="msg">The message to be encrypted.</param>
        /// <param name="key">The key to be used.</param>
        public unsafe static void Encrypt(OutMessage msg, uint[] key)
        {
            if (msg == null)
            {
                throw new ArgumentNullException("msg");
            }

            if (key == null)
            {
                throw new ArgumentNullException("key");
            }

            if (msg.Encrypted)
            {
                throw new Exception("Can't encrypt a encrypted message.");
            }

            var msgSize = msg.Size - 6;

            var pad = msgSize % 8;

            if (pad > 0)
            {
                msgSize += (8 - pad);
                msg.Size = 6 + msgSize;
            }

            fixed(byte *bufferPtr = msg.Buffer)
            {
                var words = (uint *)(bufferPtr + 6);

                for (var pos = 0; pos < msgSize / 4; pos += 2)
                {
                    uint sum   = 0;
                    uint count = 32;

                    while (count-- > 0)
                    {
                        words[pos] += (words[pos + 1] << 4 ^ words[pos + 1] >> 5) + words[pos + 1] ^ sum
                                      + key[sum & 3];
                        sum            += DELTA;
                        words[pos + 1] += (words[pos] << 4 ^ words[pos] >> 5) + words[pos] ^ sum
                                          + key[sum >> 11 & 3];
                    }
                }
            }

            msg.Encrypted = true;
        }
Пример #7
0
        public void SendToServer(OutMessage message)
        {
            if (message != serverOutMessage)
            {
                message.WriteInternalHead();
                Xtea.Encrypt(message, xteaKey);
                Adler.Generate(message, true);
                message.WriteHead();
            }

            lock (serverSocket)
            {
                serverSocket.Send(message.Buffer, 0, message.Size, SocketFlags.None);
            }
        }
Пример #8
0
        internal void SendServerSay(string text, MessageClasses type)
        {
            if (!client.LoggedIn)
            {
                return;
            }

            var message = new OutMessage();

            message.WriteByte(0x96);
            message.WriteByte((byte)type);
            message.WriteString(text);

            client.Proxy.SendToServer(message);
        }
Пример #9
0
        public void SendToClient(OutMessage message)
        {
            if (message != clientOutMessage)
            {
                message.WriteInternalHead();
                Xtea.Encrypt(message, xteaKey);
                Adler.Generate(message, true);
                message.WriteHead();
            }

            lock (clientSocket)
            {
                pendingSend++;
                clientSocket.Send(message.Buffer, 0, message.Size, SocketFlags.None);
                pendingSend--;
            }
        }
Пример #10
0
        /// <summary>
        /// Encrypts the message.
        /// </summary>
        /// <param name="msg">The message to be encrypted.</param>
        /// <param name="key">The key to be used.</param>
        public static unsafe void Encrypt(OutMessage msg, uint[] key)
        {
            if (msg == null)
                throw new ArgumentNullException("msg");

            if (key == null)
                throw new ArgumentNullException("key");

            if(msg.Encrypted)
                throw new Exception("Can't encrypt a encrypted message.");

            var msgSize = msg.Size - 6;

            var pad = msgSize % 8;
            if (pad > 0)
            {
                msgSize += (8 - pad);
                msg.Size = 6 + msgSize;
            }

            fixed (byte* bufferPtr = msg.Buffer)
            {
                var words = (uint*)(bufferPtr + 6);

                for (var pos = 0; pos < msgSize / 4; pos += 2)
                {
                    uint sum = 0;
                    uint count = 32;

                    while (count-- > 0)
                    {
                        words[pos] += (words[pos+1] << 4 ^ words[pos+1] >> 5) + words[pos+1] ^ sum
                            + key[sum & 3];
                        sum += DELTA;
                        words[pos+1] += (words[pos] << 4 ^ words[pos] >> 5) + words[pos] ^ sum
                            + key[sum >> 11 & 3];
                    }
                }
            }

            msg.Encrypted = true;
        }
Пример #11
0
        public void Enable()
        {
            client.Rsa = Constants.RSAKey.OpenTibiaM;

            loginClientPort = GetFreePort();
            worldClientPort = GetFreePort(loginClientPort + 1);

            if (!client.IsOpenTibiaServer && client.LoginServers[0].Server == "localhost")
                loginServers = Client.DefaultServers;
            else
                loginServers = client.LoginServers;

            client.LoginServers = new LoginServer[] { new LoginServer("localhost", loginClientPort) };

            clientInMessage = new InMessage();
            clientOutMessage = new OutMessage();

            serverInMessage = new InMessage();
            serverOutMessage = new OutMessage();

            StartListen();
        }
Пример #12
0
 public void Send(OutMessage message)
 {
     socket.Send(message.Buffer, message.Size, SocketFlags.None);
 }
Пример #13
0
        internal void SendServerMarketLeave()
        {
            if (!client.LoggedIn)
                return;

            var message = new OutMessage();
            message.WriteByte(0xF4);

            client.Proxy.SendToServer(message);
        }
Пример #14
0
 public static void RealTibiaEncrypt(OutMessage msg)
 {
     Encrypt(msg, realTibiaEncryptEngine);
 }
Пример #15
0
        internal void SendServerMarketBrowse(ushort itemid)
        {
            if (!client.LoggedIn)
                return;

            var message = new OutMessage();
            message.WriteByte(0xF5);
            message.WriteUShort(itemid);

            client.Proxy.SendToServer(message);
        }
Пример #16
0
 public static void RealTibiaEncrypt(OutMessage msg)
 {
     Encrypt(msg, realTibiaEncryptEngine);
 }
Пример #17
0
 public static void OpenTibiaEncrypt(OutMessage msg)
 {
     Encrypt(msg, openTibiaEncryptEngine);
 }
Пример #18
0
        internal void SendServerMarketCreate(OfferKind kind, ushort itemid, ushort amount, uint pieceprice, bool isanonymous)
        {
            if (!client.LoggedIn)
                return;

            var message = new OutMessage();
            message.WriteByte(0xF5);
            message.WriteByte((byte)kind);
            message.WriteUShort(itemid);
            message.WriteUShort(amount);
            message.WriteUInt(pieceprice);
            message.WriteByte(Convert.ToByte(isanonymous));

            client.Proxy.SendToServer(message);
        }
Пример #19
0
        internal void SendServerMarketAccept(uint timestamp, ushort counter, ushort amount)
        {
            if (!client.LoggedIn)
                return;

            var message = new OutMessage();
            message.WriteByte(0xF5);
            message.WriteUInt(timestamp);
            message.WriteUShort(counter);
            message.WriteUShort(amount);

            client.Proxy.SendToServer(message);
        }
Пример #20
0
 public static void OpenTibiaEncrypt(OutMessage msg)
 {
     Encrypt(msg, openTibiaEncryptEngine);
 }
Пример #21
0
        public void SendToClient(OutMessage message)
        {
            if (message != clientOutMessage)
            {
                message.WriteInternalHead();
                Xtea.Encrypt(message, xteaKey);
                Adler.Generate(message, true);
                message.WriteHead();
            }

            lock (clientSocket)
            {
                pendingSend++;
                clientSocket.Send(message.Buffer, 0, message.Size, SocketFlags.None);
                pendingSend--;
            }
        }
Пример #22
0
        public void SendToServer(OutMessage message)
        {
            if (message != serverOutMessage)
            {
                message.WriteInternalHead();
                Xtea.Encrypt(message, xteaKey);
                Adler.Generate(message, true);
                message.WriteHead();
            }

            lock (serverSocket)
            {
                serverSocket.Send(message.Buffer, 0, message.Size, SocketFlags.None);
            }
        }
Пример #23
0
 public MapShare()
 {
     queue = new Queue<Tile>();
     message = new OutMessage();
     connection = new Connection(Constants.MAP_SHARE_HOST, Constants.MAP_SHARE_PORT);
 }
        internal void SendServerSay(string text, MessageClasses type)
        {
            if (!client.LoggedIn)
                return;

            var message = new OutMessage();
            message.WriteByte(0x96);
            message.WriteByte((byte)type);
            message.WriteString(text);

            client.Proxy.SendToServer(message);
        }