123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- using System;
- using System.Collections.Generic;
- using System.Text;
- using Utilities;
- namespace SMBLibrary.Authentication
- {
- public class AuthenticationMessageUtils
- {
- public static string ReadAnsiStringBufferPointer(byte[] buffer, int offset)
- {
- byte[] bytes = ReadBufferPointer(buffer, offset);
- return ASCIIEncoding.Default.GetString(bytes);
- }
- public static string ReadUnicodeStringBufferPointer(byte[] buffer, int offset)
- {
- byte[] bytes = ReadBufferPointer(buffer, offset);
- return UnicodeEncoding.Unicode.GetString(bytes);
- }
- public static byte[] ReadBufferPointer(byte[] buffer, int offset)
- {
- ushort length = LittleEndianConverter.ToUInt16(buffer, offset);
- ushort maxLength = LittleEndianConverter.ToUInt16(buffer, offset + 2);
- uint bufferOffset = LittleEndianConverter.ToUInt32(buffer, offset + 4);
- if (length == 0)
- {
- return new byte[0];
- }
- else
- {
- return ByteReader.ReadBytes(buffer, (int)bufferOffset, length);
- }
- }
- public static void WriteBufferPointer(byte[] buffer, int offset, ushort bufferLength, uint bufferOffset)
- {
- LittleEndianWriter.WriteUInt16(buffer, offset, bufferLength);
- LittleEndianWriter.WriteUInt16(buffer, offset + 2, bufferLength);
- LittleEndianWriter.WriteUInt32(buffer, offset + 4, bufferOffset);
- }
- public static bool IsSignatureValid(byte[] messageBytes)
- {
- if (messageBytes.Length < 8)
- {
- return false;
- }
- string signature = ByteReader.ReadAnsiString(messageBytes, 0, 8);
- return (signature == AuthenticateMessage.ValidSignature);
- }
-
-
-
-
-
-
- public static bool IsNTLMv1ExtendedSecurity(byte[] lmResponse)
- {
- if (lmResponse.Length == 24)
- {
- if (ByteUtils.AreByteArraysEqual(ByteReader.ReadBytes(lmResponse, 0, 8), new byte[8]))
- {
-
- return false;
- }
- return ByteUtils.AreByteArraysEqual(ByteReader.ReadBytes(lmResponse, 8, 16), new byte[16]);
- }
- return false;
- }
-
-
-
- public static bool IsNTLMv2NTResponse(byte[] ntResponse)
- {
- return (ntResponse.Length >= 48 &&
- ntResponse[16] == NTLMv2ClientChallenge.StructureVersion &&
- ntResponse[17] == NTLMv2ClientChallenge.StructureVersion);
- }
- public static MessageTypeName GetMessageType(byte[] messageBytes)
- {
- return (MessageTypeName)LittleEndianConverter.ToUInt32(messageBytes, 8);
- }
- }
- }
|