Beispiel #1
0
        public override byte[] GetBytes(bool isUnicode)
        {
            ChallengeLength = (byte)Challenge.Length;

            SMBParameters = new byte[ParametersLength];
            LittleEndianWriter.WriteUInt16(SMBParameters, 0, DialectIndex);
            ByteWriter.WriteByte(SMBParameters, 2, (byte)SecurityMode);
            LittleEndianWriter.WriteUInt16(SMBParameters, 3, MaxMpxCount);
            LittleEndianWriter.WriteUInt16(SMBParameters, 5, MaxNumberVcs);
            LittleEndianWriter.WriteUInt32(SMBParameters, 7, MaxBufferSize);
            LittleEndianWriter.WriteUInt32(SMBParameters, 11, MaxRawSize);
            LittleEndianWriter.WriteUInt32(SMBParameters, 15, SessionKey);
            LittleEndianWriter.WriteUInt32(SMBParameters, 19, (uint)Capabilities);
            FileTimeHelper.WriteFileTime(SMBParameters, 23, SystemTime);
            LittleEndianWriter.WriteInt16(SMBParameters, 31, ServerTimeZone);
            ByteWriter.WriteByte(SMBParameters, 33, ChallengeLength);

            // [MS-CIFS] <90> Padding is not added before DomainName
            // DomainName and ServerName are always in Unicode
            SMBData = new byte[Challenge.Length + (DomainName.Length + 1) * 2 + (ServerName.Length + 1) * 2];
            int offset = 0;

            ByteWriter.WriteBytes(SMBData, ref offset, Challenge);
            SMB1Helper.WriteSMBString(SMBData, ref offset, true, DomainName);
            SMB1Helper.WriteSMBString(SMBData, ref offset, true, ServerName);

            return(base.GetBytes(isUnicode));
        }
Beispiel #2
0
 public override byte[] GetBytes()
 {
     byte[] buffer = new byte[Length];
     FileTimeHelper.WriteFileTime(buffer, 0, CreationTime);
     FileTimeHelper.WriteFileTime(buffer, 8, LastAccessTime);
     FileTimeHelper.WriteFileTime(buffer, 16, LastWriteTime);
     FileTimeHelper.WriteFileTime(buffer, 24, LastChangeTime);
     LittleEndianWriter.WriteUInt32(buffer, 32, (uint)ExtFileAttributes);
     LittleEndianWriter.WriteUInt32(buffer, 36, Reserved);
     return(buffer);
 }
Beispiel #3
0
        public override byte[] GetBytes(bool isUnicode)
        {
            VolumeLabelSize = (uint)(VolumeLabel.Length * 2);

            byte[] buffer = new byte[this.Length];
            FileTimeHelper.WriteFileTime(buffer, 0, VolumeCreationTime);
            LittleEndianWriter.WriteUInt32(buffer, 8, SerialNumber);
            LittleEndianWriter.WriteUInt32(buffer, 12, VolumeLabelSize);
            LittleEndianWriter.WriteUInt16(buffer, 16, Reserved);
            ByteWriter.WriteUTF16String(buffer, 18, VolumeLabel);
            return(buffer);
        }
Beispiel #4
0
 public override void WriteCommandBytes(byte[] buffer, int offset)
 {
     LittleEndianWriter.WriteUInt16(buffer, offset + 0, StructureSize);
     LittleEndianWriter.WriteUInt16(buffer, offset + 2, (ushort)Flags);
     LittleEndianWriter.WriteUInt32(buffer, offset + 4, Reserved);
     FileTimeHelper.WriteFileTime(buffer, offset + 8, CreationTime);
     FileTimeHelper.WriteFileTime(buffer, offset + 16, LastAccessTime);
     FileTimeHelper.WriteFileTime(buffer, offset + 24, LastWriteTime);
     FileTimeHelper.WriteFileTime(buffer, offset + 32, ChangeTime);
     LittleEndianWriter.WriteInt64(buffer, offset + 40, AllocationSize);
     LittleEndianWriter.WriteInt64(buffer, offset + 48, EndofFile);
     LittleEndianWriter.WriteUInt32(buffer, offset + 56, (uint)FileAttributes);
 }
        public override byte[] GetBytes()
        {
            byte[] buffer = new byte[Length];
            int    offset = 0;

            FileTimeHelper.WriteFileTime(buffer, ref offset, CreationTime);
            FileTimeHelper.WriteFileTime(buffer, ref offset, LastAccessTime);
            FileTimeHelper.WriteFileTime(buffer, ref offset, LastWriteTime);
            FileTimeHelper.WriteFileTime(buffer, ref offset, LastChangeTime);
            LittleEndianWriter.WriteUInt32(buffer, ref offset, (uint)ExtFileAttributes);
            LittleEndianWriter.WriteUInt32(buffer, ref offset, Reserved);
            return(buffer);
        }
Beispiel #6
0
        public byte[] GetBytes()
        {
            byte[] sequenceBytes = AVPairUtils.GetAVPairSequenceBytes(AVPairs);

            byte[] buffer = new byte[28 + sequenceBytes.Length];
            ByteWriter.WriteByte(buffer, 0, CurrentVersion);
            ByteWriter.WriteByte(buffer, 1, MaximumSupportedVersion);
            LittleEndianWriter.WriteUInt16(buffer, 2, Reserved1);
            LittleEndianWriter.WriteUInt32(buffer, 4, Reserved2);
            FileTimeHelper.WriteFileTime(buffer, 8, TimeStamp);
            ByteWriter.WriteBytes(buffer, 16, ClientChallenge, 8);
            LittleEndianWriter.WriteUInt32(buffer, 24, Reserved3);
            ByteWriter.WriteBytes(buffer, 28, sequenceBytes);
            return(buffer);
        }
        public override void WriteBytes(byte[] buffer, ref int offset, bool isUnicode)
        {
            uint fileNameLength = (byte)(isUnicode ? FileName.Length * 2 : FileName.Length);

            LittleEndianWriter.WriteUInt32(buffer, ref offset, NextEntryOffset);
            LittleEndianWriter.WriteUInt32(buffer, ref offset, FileIndex);
            FileTimeHelper.WriteFileTime(buffer, ref offset, CreationTime);
            FileTimeHelper.WriteFileTime(buffer, ref offset, LastAccessTime);
            FileTimeHelper.WriteFileTime(buffer, ref offset, LastWriteTime);
            FileTimeHelper.WriteFileTime(buffer, ref offset, LastAttrChangeTime);
            LittleEndianWriter.WriteInt64(buffer, ref offset, EndOfFile);
            LittleEndianWriter.WriteInt64(buffer, ref offset, AllocationSize);
            LittleEndianWriter.WriteUInt32(buffer, ref offset, (uint)ExtFileAttributes);
            LittleEndianWriter.WriteUInt32(buffer, ref offset, fileNameLength);
            SMB1Helper.WriteSMBString(buffer, ref offset, isUnicode, FileName);
        }
        public override byte[] GetBytes(bool isUnicode)
        {
            SMBParameters = new byte[ParametersLength];
            int parametersOffset = 4;

            ByteWriter.WriteByte(SMBParameters, ref parametersOffset, (byte)OpLockLevel);
            LittleEndianWriter.WriteUInt16(SMBParameters, ref parametersOffset, FID);
            LittleEndianWriter.WriteUInt32(SMBParameters, ref parametersOffset, (uint)CreateDisposition);
            FileTimeHelper.WriteFileTime(SMBParameters, ref parametersOffset, CreateTime);
            FileTimeHelper.WriteFileTime(SMBParameters, ref parametersOffset, LastAccessTime);
            FileTimeHelper.WriteFileTime(SMBParameters, ref parametersOffset, LastWriteTime);
            FileTimeHelper.WriteFileTime(SMBParameters, ref parametersOffset, LastChangeTime);
            LittleEndianWriter.WriteUInt32(SMBParameters, ref parametersOffset, (uint)ExtFileAttributes);
            LittleEndianWriter.WriteInt64(SMBParameters, ref parametersOffset, AllocationSize);
            LittleEndianWriter.WriteInt64(SMBParameters, ref parametersOffset, EndOfFile);
            LittleEndianWriter.WriteUInt16(SMBParameters, ref parametersOffset, (ushort)ResourceType);
            NMPipeStatus.WriteBytes(SMBParameters, ref parametersOffset);
            ByteWriter.WriteByte(SMBParameters, ref parametersOffset, Convert.ToByte(Directory));
            return(base.GetBytes(isUnicode));
        }
Beispiel #9
0
 public override void WriteCommandBytes(byte[] buffer, int offset)
 {
     LittleEndianWriter.WriteUInt16(buffer, offset + 0, StructureSize);
     ByteWriter.WriteByte(buffer, offset + 2, (byte)OplockLevel);
     ByteWriter.WriteByte(buffer, offset + 3, (byte)Flags);
     LittleEndianWriter.WriteUInt32(buffer, offset + 4, (uint)CreateAction);
     FileTimeHelper.WriteFileTime(buffer, offset + 8, CreationTime);
     FileTimeHelper.WriteFileTime(buffer, offset + 16, LastAccessTime);
     FileTimeHelper.WriteFileTime(buffer, offset + 24, LastWriteTime);
     FileTimeHelper.WriteFileTime(buffer, offset + 32, ChangeTime);
     LittleEndianWriter.WriteInt64(buffer, offset + 40, AllocationSize);
     LittleEndianWriter.WriteInt64(buffer, offset + 48, EndofFile);
     LittleEndianWriter.WriteUInt32(buffer, offset + 56, (uint)FileAttributes);
     LittleEndianWriter.WriteUInt32(buffer, offset + 60, Reserved2);
     FileId.WriteBytes(buffer, offset + 64);
     CreateContextsOffsets = 0;
     CreateContextsLength  = (uint)CreateContext.GetCreateContextListLength(CreateContexts);
     if (CreateContexts.Count > 0)
     {
         CreateContextsOffsets = SMB2Header.Length + 88;
         CreateContext.WriteCreateContextList(buffer, 88, CreateContexts);
     }
 }
Beispiel #10
0
        public override byte[] GetBytes(bool isUnicode)
        {
            ChallengeLength = 0;

            this.SMBParameters = new byte[ParametersLength];
            LittleEndianWriter.WriteUInt16(this.SMBParameters, 0, DialectIndex);
            ByteWriter.WriteByte(this.SMBParameters, 2, (byte)SecurityMode);
            LittleEndianWriter.WriteUInt16(this.SMBParameters, 3, MaxMpxCount);
            LittleEndianWriter.WriteUInt16(this.SMBParameters, 5, MaxNumberVcs);
            LittleEndianWriter.WriteUInt32(this.SMBParameters, 7, MaxBufferSize);
            LittleEndianWriter.WriteUInt32(this.SMBParameters, 11, MaxRawSize);
            LittleEndianWriter.WriteUInt32(this.SMBParameters, 15, SessionKey);
            LittleEndianWriter.WriteUInt32(this.SMBParameters, 19, (uint)Capabilities);
            FileTimeHelper.WriteFileTime(this.SMBParameters, 23, SystemTime);
            LittleEndianWriter.WriteInt16(this.SMBParameters, 31, ServerTimeZone);
            ByteWriter.WriteByte(this.SMBParameters, 33, ChallengeLength);

            this.SMBData = new byte[16 + SecurityBlob.Length];
            LittleEndianWriter.WriteGuid(this.SMBData, 0, ServerGuid);
            ByteWriter.WriteBytes(this.SMBData, 16, SecurityBlob);

            return(base.GetBytes(isUnicode));
        }
        public override byte[] GetBytes(bool isUnicode)
        {
            this.SMBParameters = new byte[ParametersLength];
            int parametersOffset = 4;

            ByteWriter.WriteByte(this.SMBParameters, ref parametersOffset, (byte)OpLockLevel);
            LittleEndianWriter.WriteUInt16(this.SMBParameters, ref parametersOffset, FID);
            LittleEndianWriter.WriteUInt32(this.SMBParameters, ref parametersOffset, (uint)CreateDisposition);
            FileTimeHelper.WriteFileTime(this.SMBParameters, ref parametersOffset, CreateTime);
            FileTimeHelper.WriteFileTime(this.SMBParameters, ref parametersOffset, LastAccessTime);
            FileTimeHelper.WriteFileTime(this.SMBParameters, ref parametersOffset, LastWriteTime);
            FileTimeHelper.WriteFileTime(this.SMBParameters, ref parametersOffset, LastChangeTime);
            LittleEndianWriter.WriteUInt32(this.SMBParameters, ref parametersOffset, (uint)ExtFileAttributes);
            LittleEndianWriter.WriteInt64(this.SMBParameters, ref parametersOffset, AllocationSize);
            LittleEndianWriter.WriteInt64(this.SMBParameters, ref parametersOffset, EndOfFile);
            LittleEndianWriter.WriteUInt16(this.SMBParameters, ref parametersOffset, (ushort)ResourceType);
            LittleEndianWriter.WriteUInt16(this.SMBParameters, ref parametersOffset, NMPipeStatus_or_FileStatusFlags);
            ByteWriter.WriteByte(this.SMBParameters, ref parametersOffset, Convert.ToByte(Directory));
            LittleEndianWriter.WriteGuidBytes(this.SMBParameters, ref parametersOffset, VolumeGuid);
            LittleEndianWriter.WriteUInt64(this.SMBParameters, ref parametersOffset, FileID);
            LittleEndianWriter.WriteUInt32(this.SMBParameters, ref parametersOffset, (uint)MaximalAccessRights);
            LittleEndianWriter.WriteUInt32(this.SMBParameters, ref parametersOffset, (uint)GuestMaximalAccessRights);
            return(base.GetBytes(isUnicode));
        }
Beispiel #12
0
        public override byte[] GetBytes()
        {
            uint fileNameLength = (uint)(FileName.Length * 2);

            byte[] buffer = new byte[FixedLength + fileNameLength];
            int    offset = 0;

            FileTimeHelper.WriteFileTime(buffer, ref offset, CreationTime);
            FileTimeHelper.WriteFileTime(buffer, ref offset, LastAccessTime);
            FileTimeHelper.WriteFileTime(buffer, ref offset, LastWriteTime);
            FileTimeHelper.WriteFileTime(buffer, ref offset, LastChangeTime);
            LittleEndianWriter.WriteUInt32(buffer, ref offset, (uint)ExtFileAttributes);
            LittleEndianWriter.WriteUInt32(buffer, ref offset, Reserved1);
            LittleEndianWriter.WriteInt64(buffer, ref offset, AllocationSize);
            LittleEndianWriter.WriteInt64(buffer, ref offset, EndOfFile);
            LittleEndianWriter.WriteUInt32(buffer, ref offset, NumberOfLinks);
            ByteWriter.WriteByte(buffer, ref offset, Convert.ToByte(DeletePending));
            ByteWriter.WriteByte(buffer, ref offset, Convert.ToByte(Directory));
            LittleEndianWriter.WriteUInt16(buffer, ref offset, Reserved2);
            LittleEndianWriter.WriteUInt32(buffer, ref offset, EaSize);
            LittleEndianWriter.WriteUInt32(buffer, ref offset, fileNameLength);
            ByteWriter.WriteUTF16String(buffer, ref offset, FileName);
            return(buffer);
        }