public override MetadataWrapper generateMetadataWrapper() { MetadataWrapper metadata = base.generateMetadataWrapper(); // For Drone controller, currentTime should be based on // fixed update passes so use DroneTimeSinceStart instead of TimeSinceStart metadata.currentTime = DroneTimeSinceStart(); // TODO: clean this up with reflection. // it works, but will not update when something changes to AgentMetadata // metadata.agent = new AgentMetadata baseAgent = metadata.agent; DroneAgentMetadata droneMeta = new DroneAgentMetadata(); droneMeta.name = "drone"; droneMeta.position = baseAgent.position; droneMeta.rotation = baseAgent.rotation; droneMeta.cameraHorizon = baseAgent.cameraHorizon; droneMeta.inHighFrictionArea = baseAgent.inHighFrictionArea; // New drone stuff for agent metadata droneMeta.LauncherPosition = GetLauncherPosition(); metadata.agent = droneMeta; return(metadata); }
public async Task CreateOrUpdateAgentMetadataAsync(AgentMetadata metadata) { using (var ctx = new SmsServiceDbEntities(this.connectionString)) { var entity = await ctx.ConnectorAgentMetadata.SingleOrDefaultAsync( a => a.Provider == metadata.ConnectorName && a.Id == metadata.ConnectorId); if (entity == null) { entity = new ConnectorAgentMetadataEntity(); entity.Provider = metadata.ConnectorName; entity.Id = metadata.ConnectorId; entity.LastMessageSendTime = metadata.LastMessageSendTime; entity.LastReportUpdateTime = metadata.LastReportUpdateTime; entity.PendingReceive = metadata.PendingReceive; entity.Modified = DateTime.UtcNow; ctx.ConnectorAgentMetadata.Add(entity); } else { entity.LastMessageSendTime = metadata.LastMessageSendTime; entity.LastReportUpdateTime = metadata.LastReportUpdateTime; entity.PendingReceive = metadata.PendingReceive; entity.Modified = DateTime.UtcNow; } await ctx.SaveChangesAsync(); } }
private void HandleStageOneRequest(AgentMetadata metadata, C2Data c2Data) { var stage = PayloadControllerBase.GenerateStageOne(new StageRequest { TargetFramework = TargetFramework.Net40 }); Agent.SendDataToAgent(metadata.AgentID, "", "StageOne", stage); }
public void UpdateSession(AgentMetadata metadata) { if (!ConnectedAgents.Where(a => a.Metadata.AgentID.Equals(metadata.AgentID, StringComparison.OrdinalIgnoreCase)).Any()) { CreateSession(metadata); } else { ConnectedAgents.Where(a => a.Metadata.AgentID.Equals(metadata.AgentID, StringComparison.OrdinalIgnoreCase)) .FirstOrDefault().LastSeen = DateTime.UtcNow; } }
public static AgentMetadata ToModel(this ConnectorAgentMetadataEntity entity) { var meta = new AgentMetadata(); meta.ConnectorName = entity.Provider; meta.ConnectorId = entity.Id; meta.LastMessageSendTime = entity.LastMessageSendTime; meta.LastReportUpdateTime = entity.LastReportUpdateTime; meta.PendingReceive = entity.PendingReceive ?? 0; return(meta); }
private void CreateSession(AgentMetadata metadata) { ConnectedAgents.Add(new AgentSessionData { Metadata = metadata, FirstSeen = DateTime.UtcNow, LastSeen = DateTime.UtcNow }); var data = string.Format("{0}@{1} ({2})", metadata.Identity, metadata.IPAddress, metadata.Hostname); OnServerEvent?.Invoke(this, new ServerEvent(ServerEventType.InitialAgent, data)); Log.Logger.Information("AGENT {Event} {AgentID} {Hostname}", ServerEventType.InitialAgent.ToString(), metadata.AgentID, metadata.Hostname); }
public void Init() { var metadata = new AgentMetadata { AgentID = Common.Helpers.GeneratePseudoRandomString(8), Hostname = Helpers.GetHostname, IPAddress = Helpers.GetIpAddress, Integrity = Helpers.GetIntegrity, Identity = Helpers.GetIdentity, ProcessName = Helpers.GetProcessName, ProcessID = Helpers.GetProcessId, Arch = Helpers.GetArch, CLR = Helpers.GetCLRVersion }; Config.SetOption(ConfigSetting.Metadata, metadata); }
public void Init(string agentID, string parentAgentID) { AgentMetadata = new AgentMetadata { AgentID = agentID, ParentAgentID = parentAgentID, Hostname = Helpers.GetHostname, IPAddress = Helpers.GetIpAddress, Integrity = Helpers.GetIntegrity, Identity = Helpers.GetIdentity, ProcessName = Helpers.GetProcessName, ProcessID = Helpers.GetProcessId, Arch = Helpers.GetArch, CLR = Helpers.GetCLRVersion }; P2P = new P2PController(this); }
private void HandleC2Data(AgentMetadata metadata, C2Data c2Data) { OnServerCommand CallBack; try { CallBack = ServerModules .Where(m => m.Name.Equals(c2Data.Module, StringComparison.OrdinalIgnoreCase)) .Select(m => m.ServerCommands).FirstOrDefault() .Where(c => c.Name.Equals(c2Data.Command, StringComparison.OrdinalIgnoreCase)) .Select(c => c.CallBack).FirstOrDefault(); } catch { return; } CallBack?.Invoke(metadata, c2Data); }
public void RegisterAgentModule(AgentMetadata metadata, AgentModule module) { var agent = ConnectedAgents.FirstOrDefault(a => a.Metadata.AgentID.Equals(metadata.AgentID, StringComparison.OrdinalIgnoreCase)); if (agent == null) { CreateSession(metadata); agent = ConnectedAgents.FirstOrDefault(a => a.Metadata.AgentID.Equals(metadata.AgentID, StringComparison.OrdinalIgnoreCase)); } if (agent.LoadModules.Any(m => m.Name.Equals(module.Name, StringComparison.OrdinalIgnoreCase))) { agent.LoadModules.Remove(agent.LoadModules.FirstOrDefault(m => m.Name.Equals(module.Name, StringComparison.OrdinalIgnoreCase))); } agent.LoadModules.Add(module); OnAgentEvent?.Invoke(this, new AgentEvent(agent.Metadata.AgentID, AgentEventType.ModuleRegistered, module.Name)); Log.Logger.Information("AGENT {Event} {ModuleName}", AgentEventType.ModuleRegistered.ToString(), module.Name); }
private void DataFromAgent(AgentMetadata metadata, C2Data c2Data) { var packet = Serialisation.DeserialiseData <ReversePortForwardPacket>(c2Data.Data); if (!IPAddress.TryParse(packet.ForwardHost, out IPAddress ipAddress)) { ipAddress = Dns.GetHostEntry(packet.ForwardHost).AddressList[0]; } var endPoint = new IPEndPoint(ipAddress, packet.ForwardPort); var sender = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.IP); sender.Connect(endPoint); var bytesSent = sender.Send(packet.Data); if (bytesSent > 0) { Log.Logger.Information("MODULE {ModuleName} {Data}", "ReversePortForward", $"{bytesSent} bytes sent"); } var buffer = new byte[65535]; var bytesRecv = sender.Receive(buffer); if (bytesRecv > 0) { packet.Data = buffer.TrimBytes(); Agent.SendAgentCommand(new AgentCommandRequest { AgentId = c2Data.AgentID, Module = "rportfwd", Command = "DataFromTeamServer", Data = Convert.ToBase64String(Serialisation.SerialiseData(packet)) }, null); } sender.Shutdown(SocketShutdown.Both); sender.Close(); }
private AgentMetadata ExtractAgentMetadata(string webRequest) { AgentMetadata metadata = null; var regex = Regex.Match(webRequest, "Cookie: Metadata=([^\\s].*)"); if (regex.Captures.Count > 0) { var encrypted = Convert.FromBase64String(regex.Groups[1].Value); if (CryptoController.VerifyHMAC(encrypted)) { metadata = CryptoController.Decrypt <AgentMetadata>(encrypted); } else { OnAgentEvent?.Invoke(this, new AgentEvent("", AgentEventType.CryptoError, "HMAC validation failed on AgentMetadata")); } } return(metadata); }
public TrashBin CreateTrashBin(TimeSpan birthTime, Vector position) { AgentMetadata agentMetaData = contentManager.GetAgentMetadata("TrashBin"); return(CreateEquipment <TrashBin>(birthTime, "TrashBin", position, agentMetaData)); }
public virtual void SetMetadata(string agentID) { Metadata = new AgentMetadata { AgentID = agentID }; }
public SodaMachine CreateSodaMachine(TimeSpan birthTime, Vector position) { AgentMetadata agentMetaData = contentManager.GetAgentMetadata("SodaMachine"); return(CreateEquipment <SodaMachine>(birthTime, "SodaMachine", position, agentMetaData)); }
private T CreateEquipment <T>(TimeSpan birthTime, string texturePathKey, Vector position, AgentMetadata agentMetaData) where T : Equipment { if (log.IsDebugEnabled) { log.Debug(String.Format("Creating agent of type {0} at ({1},{2}) with birth time: {3}", typeof(T), position.X, position.Y, birthTime)); } Texture texture = GetTextureFromStore(texturePathKey); return((T)Activator.CreateInstance(typeof(T), birthTime, texture, position, agentMetaData.Name, agentMetaData.Price, agentMetaData.Description, agentMetaData.IconKey, agentMetaData.NecessityEffect, agentMetaData.SkillEffect)); }
private void RegisterAgentModule(AgentMetadata metadata, C2Data c2Data) { var moduleInfo = Serialisation.DeserialiseData <AgentModule>(c2Data.Data); Agent.RegisterAgentModule(metadata, moduleInfo); }
private void HandleAgentError(AgentMetadata metadata, C2Data c2Data) { var error = Encoding.UTF8.GetString(c2Data.Data); OnAgentEvent?.Invoke(this, new AgentEvent(metadata.AgentID, AgentEventType.AgentError, error)); }
private void HandleAgentOutput(AgentMetadata metadata, C2Data c2Data) { var output = Encoding.UTF8.GetString(c2Data.Data); OnAgentEvent?.Invoke(this, new AgentEvent(metadata.AgentID, AgentEventType.CommandResponse, output)); }
private void HandleAgentCheckin(AgentMetadata metadata, C2Data c2Data) { Agent.UpdateSession(metadata); }
private void LoadAgentMetadata(string json) { if (json == null) { throw new ArgumentNullException("json"); } JObject o = JObject.Parse(json); foreach (var equipment in o["equipment"]) { NecessityEffect necessityEffectData = null; SkillEffect skillEffectData = null; string key = equipment["key"].ToString(); string name = equipment["name"].ToString(); int price = Int32.Parse(equipment["price"].ToString()); string iconKey = equipment["icon"].ToString(); string description = equipment["description"].ToString(); foreach (var necessityEffect in equipment["necessityEffect"]) { int health = Int32.Parse(necessityEffect["health"].ToString()); int hygiene = Int32.Parse(necessityEffect["hygiene"].ToString()); int sleep = Int32.Parse(necessityEffect["sleep"].ToString()); int thirst = Int32.Parse(necessityEffect["thirst"].ToString()); int hunger = Int32.Parse(necessityEffect["hunger"].ToString()); necessityEffectData = new NecessityEffect(health, hygiene, sleep, thirst, hunger); } foreach (var skillEffect in equipment["skillEffect"]) { int intelligence = Int32.Parse(skillEffect["intelligence"].ToString()); int creativity = Int32.Parse(skillEffect["creativity"].ToString()); int communication = Int32.Parse(skillEffect["communication"].ToString()); int leadership = Int32.Parse(skillEffect["leadership"].ToString()); skillEffectData = new SkillEffect(intelligence, creativity, communication, leadership); } AgentMetadata agentMetadata = new AgentMetadata(price, name, description, iconKey, necessityEffectData, skillEffectData); agentMetadataDictionary.Add(key, agentMetadata); } foreach (var room in o["rooms"]) { NecessityEffect necessityEffectData = null; SkillEffect skillEffectData = null; string key = room["key"].ToString(); string name = room["name"].ToString(); int price = Int32.Parse(room["price"].ToString()); string iconKey = room["icon"].ToString(); string mapPathKey = room["map"].ToString(); string description = room["description"].ToString(); foreach (var necessityEffect in room["necessityEffect"]) { int health = Int32.Parse(necessityEffect["health"].ToString()); int hygiene = Int32.Parse(necessityEffect["hygiene"].ToString()); int sleep = Int32.Parse(necessityEffect["sleep"].ToString()); int thirst = Int32.Parse(necessityEffect["thirst"].ToString()); int hunger = Int32.Parse(necessityEffect["hunger"].ToString()); necessityEffectData = new NecessityEffect(health, hygiene, sleep, thirst, hunger); } foreach (var skillEffect in room["skillEffect"]) { int intelligence = Int32.Parse(skillEffect["intelligence"].ToString()); int creativity = Int32.Parse(skillEffect["creativity"].ToString()); int communication = Int32.Parse(skillEffect["communication"].ToString()); int leadership = Int32.Parse(skillEffect["leadership"].ToString()); skillEffectData = new SkillEffect(intelligence, creativity, communication, leadership); } RoomMetadata roomMetadata = new RoomMetadata(price, name, description, iconKey, necessityEffectData, skillEffectData, mapPathKey); roomMetadataDictionary.Add(key, roomMetadata); } }
public void SetMetadata(AgentMetadata metadata) { Metadata = metadata; }
public OfficeDesk CreateOfficeDesk(TimeSpan birthTime, Vector position) { AgentMetadata agentMetaData = contentManager.GetAgentMetadata("OfficeDesk"); return(CreateEquipment <OfficeDesk>(birthTime, "OfficeDesk", position, agentMetaData)); }