From 3224c59eab79e1121e2e1724157a1bb32ff40697 Mon Sep 17 00:00:00 2001 From: ORelio Date: Fri, 19 Jun 2015 19:40:18 +0200 Subject: [PATCH] Remove padding mechanism Not needed anymore since proper encryption is now used under Mono --- MinecraftClient/Crypto/CryptoHandler.cs | 5 ++-- MinecraftClient/Crypto/IPaddingProvider.cs | 17 ----------- .../Crypto/Streams/MonoAesStream.cs | 4 +-- MinecraftClient/MinecraftClient.csproj | 1 - .../Protocol/Handlers/Protocol16.cs | 22 +------------- .../Protocol/Handlers/Protocol17.cs | 28 +----------------- .../Protocol/Handlers/Protocol18.cs | 29 +------------------ MinecraftClient/Protocol/IMinecraftCom.cs | 2 +- 8 files changed, 7 insertions(+), 101 deletions(-) delete mode 100644 MinecraftClient/Crypto/IPaddingProvider.cs diff --git a/MinecraftClient/Crypto/CryptoHandler.cs b/MinecraftClient/Crypto/CryptoHandler.cs index 7d31e162..ae46ccf5 100644 --- a/MinecraftClient/Crypto/CryptoHandler.cs +++ b/MinecraftClient/Crypto/CryptoHandler.cs @@ -197,14 +197,13 @@ namespace MinecraftClient.Crypto /// /// Stream to encrypt /// Key to use - /// Padding provider for Mono implementation /// Return an appropriate stream depending on the framework being used - public static IAesStream getAesStream(Stream underlyingStream, byte[] AesKey, IPaddingProvider paddingProvider) + public static IAesStream getAesStream(Stream underlyingStream, byte[] AesKey) { if (Program.isUsingMono) { - return new Streams.MonoAesStream(underlyingStream, AesKey, paddingProvider); + return new Streams.MonoAesStream(underlyingStream, AesKey); } else return new Streams.RegularAesStream(underlyingStream, AesKey); } diff --git a/MinecraftClient/Crypto/IPaddingProvider.cs b/MinecraftClient/Crypto/IPaddingProvider.cs deleted file mode 100644 index 48290494..00000000 --- a/MinecraftClient/Crypto/IPaddingProvider.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace MinecraftClient.Crypto -{ - /// - /// Interface for padding provider - /// Allow to get a padding plugin message from the current network protocol implementation. - /// - - public interface IPaddingProvider - { - byte[] getPaddingPacket(); - } -} diff --git a/MinecraftClient/Crypto/Streams/MonoAesStream.cs b/MinecraftClient/Crypto/Streams/MonoAesStream.cs index 430483b6..57d5598e 100644 --- a/MinecraftClient/Crypto/Streams/MonoAesStream.cs +++ b/MinecraftClient/Crypto/Streams/MonoAesStream.cs @@ -19,15 +19,13 @@ namespace MinecraftClient.Crypto.Streams public class MonoAesStream : Stream, IAesStream { - IPaddingProvider pad; CipherStream cstream; - public MonoAesStream(System.IO.Stream stream, byte[] key, IPaddingProvider provider) + public MonoAesStream(System.IO.Stream stream, byte[] key) { BaseStream = stream; BufferedBlockCipher enc = GenerateAES(key, true); BufferedBlockCipher dec = GenerateAES(key, false); cstream = new CipherStream(stream, dec, enc); - pad = provider; } public System.IO.Stream BaseStream { get; set; } diff --git a/MinecraftClient/MinecraftClient.csproj b/MinecraftClient/MinecraftClient.csproj index a530522c..0ef5d9ec 100644 --- a/MinecraftClient/MinecraftClient.csproj +++ b/MinecraftClient/MinecraftClient.csproj @@ -127,7 +127,6 @@ - diff --git a/MinecraftClient/Protocol/Handlers/Protocol16.cs b/MinecraftClient/Protocol/Handlers/Protocol16.cs index 935ad3cd..38686d17 100644 --- a/MinecraftClient/Protocol/Handlers/Protocol16.cs +++ b/MinecraftClient/Protocol/Handlers/Protocol16.cs @@ -42,19 +42,11 @@ namespace MinecraftClient.Protocol.Handlers private void Updater() { - int keep_alive_interval = 100; - int keep_alive_timer = 100; try { do { Thread.Sleep(100); - keep_alive_timer--; - if (keep_alive_timer <= 0) - { - Send(getPaddingPacket()); - keep_alive_timer = keep_alive_interval; - } } while (Update()); } @@ -504,7 +496,7 @@ namespace MinecraftClient.Protocol.Handlers if (pid[0] == 0xFC) { readData(4); - s = CryptoHandler.getAesStream(c.GetStream(), secretKey, this); + s = CryptoHandler.getAesStream(c.GetStream(), secretKey); encrypted = true; return true; } @@ -652,18 +644,6 @@ namespace MinecraftClient.Protocol.Handlers return result.ToArray(); } - public byte[] getPaddingPacket() - { - //Will generate a 15-bytes long padding packet - byte[] id = new byte[1] { 0xFA }; //Plugin Message - byte[] channel_name = Encoding.BigEndianUnicode.GetBytes("MCC|"); - byte[] channel_name_len = BitConverter.GetBytes((short)channel_name.Length); Array.Reverse(channel_name_len); - byte[] data = new byte[] { 0x00, 0x00 }; - byte[] data_len = BitConverter.GetBytes((short)data.Length); Array.Reverse(data_len); - byte[] packet_data = concatBytes(id, channel_name_len, channel_name, data_len, data); - return packet_data; - } - public static bool doPing(string host, int port, ref int protocolversion) { try diff --git a/MinecraftClient/Protocol/Handlers/Protocol17.cs b/MinecraftClient/Protocol/Handlers/Protocol17.cs index d3215068..b7c08e37 100644 --- a/MinecraftClient/Protocol/Handlers/Protocol17.cs +++ b/MinecraftClient/Protocol/Handlers/Protocol17.cs @@ -45,19 +45,11 @@ namespace MinecraftClient.Protocol.Handlers private void Updater() { - int keep_alive_interval = 100; - int keep_alive_timer = 100; try { do { Thread.Sleep(100); - keep_alive_timer--; - if (keep_alive_timer <= 0) - { - Send(getPaddingPacket()); - keep_alive_timer = keep_alive_interval; - } } while (Update()); } @@ -431,7 +423,7 @@ namespace MinecraftClient.Protocol.Handlers Send(encryption_response_tosend); //Start client-side encryption - s = CryptoHandler.getAesStream(c.GetStream(), secretKey, this); + s = CryptoHandler.getAesStream(c.GetStream(), secretKey); encrypted = true; //Read and skip the next packet @@ -444,24 +436,6 @@ namespace MinecraftClient.Protocol.Handlers return encryption_success; } - /// - /// Useless padding packet for solving Mono issue. - /// - /// The padding packet - - public byte[] getPaddingPacket() - { - //Will generate a 15-bytes long padding packet - byte[] id = getVarInt(0x17); //Plugin Message - byte[] channel_name = Encoding.UTF8.GetBytes("MCC|Pad"); - byte[] channel_name_len = getVarInt(channel_name.Length); - byte[] data = new byte[] { 0x00, 0x00, 0x00 }; - byte[] data_len = BitConverter.GetBytes((short)data.Length); Array.Reverse(data_len); - byte[] packet_data = concatBytes(id, channel_name_len, channel_name, data_len, data); - byte[] packet_length = getVarInt(packet_data.Length); - return concatBytes(packet_length, packet_data); - } - /// /// Send a chat message to the server /// diff --git a/MinecraftClient/Protocol/Handlers/Protocol18.cs b/MinecraftClient/Protocol/Handlers/Protocol18.cs index 432425f2..67fb96ca 100644 --- a/MinecraftClient/Protocol/Handlers/Protocol18.cs +++ b/MinecraftClient/Protocol/Handlers/Protocol18.cs @@ -46,19 +46,11 @@ namespace MinecraftClient.Protocol.Handlers private void Updater() { - int keep_alive_interval = 100; - int keep_alive_timer = 100; try { do { Thread.Sleep(100); - keep_alive_timer--; - if (keep_alive_timer <= 0) - { - SendRAW(getPaddingPacket()); - keep_alive_timer = keep_alive_interval; - } } while (Update()); } @@ -531,7 +523,7 @@ namespace MinecraftClient.Protocol.Handlers SendPacket(0x01, concatBytes(key_len, key_enc, token_len, token_enc)); //Start client-side encryption - s = CryptoHandler.getAesStream(c.GetStream(), secretKey, this); + s = CryptoHandler.getAesStream(c.GetStream(), secretKey); encrypted = true; //Process the next packet @@ -555,25 +547,6 @@ namespace MinecraftClient.Protocol.Handlers } } - /// - /// Useless padding packet for solving Mono issue. - /// - /// The padding packet - - public byte[] getPaddingPacket() - { - //Will generate a 15-bytes long padding packet - byte[] compression = compression_treshold >= 0 ? getVarInt(0) : new byte[] { }; - byte[] id = getVarInt(0x17); //Plugin Message - byte[] channel_name = Encoding.UTF8.GetBytes("MCC|Pad"); - byte[] channel_name_len = getVarInt(channel_name.Length); - byte[] data = compression_treshold >= 0 ? new byte[] { 0x00, 0x00, 0x00 } : new byte[] { 0x00, 0x00, 0x00, 0x00 }; - byte[] data_len = getVarInt(data.Length); - byte[] packet_data = concatBytes(compression, id, channel_name_len, channel_name, data_len, data); - byte[] packet_length = getVarInt(packet_data.Length); - return concatBytes(packet_length, packet_data); - } - /// /// Send a chat message to the server /// diff --git a/MinecraftClient/Protocol/IMinecraftCom.cs b/MinecraftClient/Protocol/IMinecraftCom.cs index d35a1fd7..2ae82c14 100644 --- a/MinecraftClient/Protocol/IMinecraftCom.cs +++ b/MinecraftClient/Protocol/IMinecraftCom.cs @@ -13,7 +13,7 @@ namespace MinecraftClient.Protocol /// The protocol handler will take care of parsing and building the appropriate network packets. /// - public interface IMinecraftCom : IDisposable, IAutoComplete, IPaddingProvider + public interface IMinecraftCom : IDisposable, IAutoComplete { /// /// Start the login procedure once connected to the server