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(); }
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(); }
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(); }
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; }
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; }
/// <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; }
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); } }
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); }
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--; } }
/// <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; }
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(); }
public void Send(OutMessage message) { socket.Send(message.Buffer, message.Size, SocketFlags.None); }
internal void SendServerMarketLeave() { if (!client.LoggedIn) return; var message = new OutMessage(); message.WriteByte(0xF4); client.Proxy.SendToServer(message); }
public static void RealTibiaEncrypt(OutMessage msg) { Encrypt(msg, realTibiaEncryptEngine); }
internal void SendServerMarketBrowse(ushort itemid) { if (!client.LoggedIn) return; var message = new OutMessage(); message.WriteByte(0xF5); message.WriteUShort(itemid); client.Proxy.SendToServer(message); }
public static void OpenTibiaEncrypt(OutMessage msg) { Encrypt(msg, openTibiaEncryptEngine); }
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); }
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); }
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); }