Esempio n. 1
0
    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);
    }
Esempio n. 2
0
    private void ProcessTeamServerResponse(byte[] result)
    {
        if (Crypto.VerifyHMAC(result))
        {
            var message = Crypto.Decrypt <AgentMessage>(result);

            if (message != null)
            {
                Inbound.Enqueue(message);
            }
        }
    }
Esempio n. 3
0
    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);
        }
    }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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);
        }