예제 #1
0
 public void UpdateStatus(SimulationStatusUpdate status)
 {
     Dispatcher.Invoke(() =>
     {
         ProgressDivider.Content = status.number + "/" + this.atomic_engine.atomic_runnables.Count + " " + status.message;
         ProgressBar.Value       = status.number;
     });
 }
예제 #2
0
        public async Task <Report> RunCleanup(MainWindow window)
        {
            Report report = new Report
            {
                started  = DateTime.Now,
                results  = new List <ReportEntry>(),
                finished = DateTime.Now
            };

            int i = 0;

            foreach (AtomicRunnable atomic in this.atomic_runnables)

            {
                string[] commands;
                if (atomic.cleanup_command == null)
                {
                    continue;
                }
                else
                {
                    commands    = new string[1];
                    commands[0] = atomic.cleanup_command;
                }
                foreach (string command in commands)

                {
                    if (command == "")
                    {
                        continue;
                    }
                    SimulationStatusUpdate status = new SimulationStatusUpdate
                    {
                        number  = i,
                        message = "Running Cleanup " + atomic.attack_technique + ": " + command
                    };
                    window.UpdateStatus(status);

                    ReportEntry entry = new ReportEntry
                    {
                        time             = DateTime.Now.ToString("u"),
                        command          = command,
                        display_name     = atomic.display_name,
                        attack_technique = atomic.attack_technique,
                        success          = false
                    };

                    try
                    {
                        string exitcode = Utils.RunCommandInBackground(command, atomic.type);

                        entry.error   = exitcode;
                        entry.success = true;
                    }
                    catch (Exception e)
                    {
                        entry.error = e.Message;
                    }
                    report.results.Add(entry);
                }
                Thread.Sleep(100);
                i++;
                Utils.ReportToCsv(report, window.output_dir);
            }
            report.finished = DateTime.Now;
            SimulationStatusUpdate finalstatus = new SimulationStatusUpdate
            {
                number  = i,
                message = "Completed!"
            };

            window.UpdateStatus(finalstatus);

            return(report);
        }