static public SMB_COM_NEGOTIATE_REQUEST SMB_COMNegotiateRequestFromBytes(byte[] arr) { SMB_COM_NEGOTIATE_REQUEST str = new SMB_COM_NEGOTIATE_REQUEST(); int size = Marshal.SizeOf(str); IntPtr ptr = Marshal.AllocHGlobal(size); Marshal.Copy(arr, 0, ptr, size); str = (SMB_COM_NEGOTIATE_REQUEST)Marshal.PtrToStructure(ptr, str.GetType()); Marshal.FreeHGlobal(ptr); return(str); }
static public byte[] ClientNegotiate(Socket sock) { SMB_HEADER header = new SMB_HEADER { protocol = 0x424d53ff, command = 0x72, errorClass = 0x00, _reserved = 0x00, errorCode = 0x0000, flags = 0x18, flags2 = 0x2801, PIDHigh = 0x0000, SecurityFeatures = 0x0000000000000000, reserved = 0x0000, TID = 0x0000, PIDLow = 0x4b2f, UID = 0x0000, MID = 0x5ec5 }; byte[] headerBytes = GetBytes(header); SMB_COM_NEGOTIATE_REQUEST req = new SMB_COM_NEGOTIATE_REQUEST { WordCount = 0x00 }; List <byte> dialects = new List <byte>(); dialects.AddRange(Encoding.UTF8.GetBytes("\x2LANMAN1.0\0")); dialects.AddRange(Encoding.UTF8.GetBytes("\x2LM1.2X002\0")); dialects.AddRange(Encoding.UTF8.GetBytes("\x2NT LANMAN 1.0\0")); dialects.AddRange(Encoding.UTF8.GetBytes("\x2NT LM 0.12\0")); req.ByteCount = (ushort)dialects.Count; byte[] negotitateRequest = GetBytes(req).Concat(dialects.ToArray()).ToArray(); string hex = BitConverter.ToString(negotitateRequest); byte[] pkt = headerBytes.Concat(negotitateRequest).ToArray(); SendSMBMessage(sock, pkt, true); return(ReceiveSMBMessage(sock)); }