Exemplo n.º 1
0
        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
        }
Exemplo n.º 2
0
 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;
 }
Exemplo n.º 3
0
        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()
                                           ));
        }