public ChallengeMessage(byte[] cm) { if (cm.Length < 56) { throw new ArgumentOutOfRangeException(); } if (!Signature.CompareArray(cm, 0, 8))//0-8 { throw new Exception("ChallengeMessage Signature Error"); } if (MessageType != BitConverter.ToUInt32(cm, 8))//8-4 { throw new Exception("ChallengeMessage MessageType Error"); } TargetNameField = new MetaDataPayloadString(cm, 12); //12-8 NegotiateFlag = (NegotiateFlags)BitConverter.ToUInt32(cm, 20); //20-4 Array.Copy(cm, 24, ServerChallenge, 0, 8); //24-8 if (!Reserved.CompareArray(cm, 32, 8)) //32-8 { throw new Exception("ChallengeMessage Reserved Error"); } TargetInfoField = new MetaDataVariableTargetInfos(cm, 40); //40-8 Version = new Versions(cm, 48); //48-8 }
public AuthenticateMessage( MetaDataPayloadHex lmChallengeResponseField, NtChallengeResponseFields ntChallengeResponseField, MetaDataPayloadString domainNameField, MetaDataPayloadString userNameField, MetaDataPayloadString workstationField, MetaDataPayloadString encryptedRandomSessionKeyField, NegotiateFlags negotiateFlag, Versions version ) { LmChallengeResponseField = lmChallengeResponseField; NtChallengeResponseField = ntChallengeResponseField; DomainNameField = domainNameField; UserNameField = userNameField; WorkstationField = workstationField; EncryptedRandomSessionKeyField = encryptedRandomSessionKeyField; NegotiateFlag = negotiateFlag; Version = version; }
static public AuthenticateMessage CreateAuthenticateMessage(ChallengeMessage challengeMessage, string strUserName, byte[] passwordNTHash) { uint payloadPointer = 88 - 16; MetaDataPayloadHex lcrf = new MetaDataPayloadHex(payloadPointer, new byte[24]); payloadPointer += lcrf.Len; NtChallengeResponseFields ncrf = NtChallengeResponseFields.CreateNtChallengeResponseFields(challengeMessage, strUserName, passwordNTHash, ref payloadPointer); MetaDataPayloadString domainNameField = new MetaDataPayloadString(payloadPointer, challengeMessage.TargetNameField.Buffer); payloadPointer += domainNameField.Len; var userNames = Encoding.Unicode.GetBytes(strUserName); var len = (ushort)userNames.Length; MetaDataPayloadString userNameField = new MetaDataPayloadString(payloadPointer, userNames); payloadPointer += userNameField.Len; MetaDataPayloadString workstationField = new MetaDataPayloadString(payloadPointer, challengeMessage.TargetNameField.Buffer); payloadPointer += workstationField.Len; byte[] t = new byte[16]; if (challengeMessage.NegotiateFlag.HasFlag(NegotiateFlags.NEGOTIATE_KEY_EXCH)) { // EncryptedRandomSessionKey=MasterKey RC4-encrypts SecondaryMasterKey throw new NotImplementedException(); } MetaDataPayloadString EncryptedRandomSessionKeyField = new MetaDataPayloadString(payloadPointer, t); payloadPointer += EncryptedRandomSessionKeyField.Len; return(new AuthenticateMessage(lcrf, ncrf, domainNameField, userNameField, workstationField, EncryptedRandomSessionKeyField, challengeMessage.NegotiateFlag, new Versions() )); }