Exemplo n.º 1
0
        public byte[] Smb2GetReadRequestPackage(
            uint length)
        {
            var request = new Smb2ReadRequestPacket();

            request.Header.CreditCharge          = CalculateCreditCharge(length);
            request.Header.Command               = Smb2Command.READ;
            request.Header.CreditRequestResponse = 64;
            request.Header.Flags     = Packet_Header_Flags_Values.FLAGS_SIGNED;
            request.Header.MessageId = messageId;
            request.Header.TreeId    = TreeId;
            request.Header.SessionId = sessionId;

            request.PayLoad.Length         = length;
            request.PayLoad.Offset         = 0;
            request.PayLoad.FileId         = FileId;
            request.PayLoad.MinimumCount   = 0;
            request.PayLoad.Channel        = Channel_Values.CHANNEL_NONE;
            request.PayLoad.RemainingBytes = 0;

            messageId += request.Header.CreditCharge;

            var processedPacket = Smb2Crypto.SignCompressAndEncrypt((Smb2SinglePacket)request, cryptoInfoTable, CompressionInfo, Smb2Role.Client);

            return(processedPacket.ToBytes());
        }
Exemplo n.º 2
0
        public byte[] Smb2GetWriteRequestPackage(
            UInt64 offset,
            byte[] content)
        {
            var request = new Smb2WriteRequestPacket();

            request.Header.CreditCharge          = 1;
            request.Header.Command               = Smb2Command.WRITE;
            request.Header.CreditRequestResponse = 64;
            request.Header.Flags     = Packet_Header_Flags_Values.FLAGS_SIGNED;
            request.Header.MessageId = messageId++;
            request.Header.TreeId    = TreeId;
            request.Header.SessionId = sessionId;

            request.PayLoad.Length  = (uint)content.Length;
            request.PayLoad.Offset  = offset;
            request.PayLoad.FileId  = FileId;
            request.PayLoad.Channel = Channel_Values.CHANNEL_NONE;
            request.PayLoad.WriteChannelInfoOffset = 0;
            request.PayLoad.WriteChannelInfoLength = 0;
            request.PayLoad.DataOffset             = (ushort)(request.BufferOffset);
            request.PayLoad.Flags = WRITE_Request_Flags_Values.None;

            request.Buffer = content;

            var processedPacket = Smb2Crypto.SignCompressAndEncrypt((Smb2SinglePacket)request, cryptoInfoTable, CompressionInfo, Smb2Role.Client);

            return(processedPacket.ToBytes());
        }
Exemplo n.º 3
0
        private Smb2Packet DecodeEncryptedSmb2Packet(
            byte[] messageBytes,
            Smb2Role role,
            ulong realSessionId,
            uint realTreeId,
            out int consumedLength,
            out int expectedLength
            )
        {
            Transform_Header transformHeader;
            var decryptedBytes = Smb2Crypto.Decrypt(messageBytes, cryptoInfoTable, decodeRole, out transformHeader);

            if (transformHeader.OriginalMessageSize != decryptedBytes.Length)
            {
                throw new InvalidOperationException("[MS-SMB2] section 3.3.5.2.1.1 OriginalMessageSize in TRANSFORM_HEADER does not match received message size.");
            }

            byte[] protocolVersion = new byte[sizeof(uint)];
            Array.Copy(decryptedBytes, 0, protocolVersion, 0, protocolVersion.Length);

            SmbVersion version = DecodeVersion(protocolVersion);

            if (version == SmbVersion.Version2Compressed)
            {
                return(DecodeCompressedSmb2Packet(
                           decryptedBytes,
                           role,
                           realSessionId,
                           realTreeId,
                           out consumedLength,
                           out expectedLength,
                           transformHeader
                           ));
            }
            else if (version == SmbVersion.Version2)
            {
                return(DecodeSmb2Packet(
                           decryptedBytes,
                           role,
                           realSessionId,
                           realTreeId,
                           out consumedLength,
                           out expectedLength,
                           transformHeader
                           ));
            }
            else
            {
                throw new InvalidOperationException("Unkown ProtocolId!");
            }
        }
        private Smb2Packet DecodeEncryptedSmb2Packet(
            byte[] messageBytes,
            Smb2Role role,
            ulong realSessionId,
            uint realTreeId,
            out int consumedLength,
            out int expectedLength
            )
        {
            Transform_Header transformHeader;
            var decryptedBytes = Smb2Crypto.Decrypt(messageBytes, cryptoInfoTable, decodeRole, out transformHeader);

            byte[] protocolVersion = new byte[sizeof(uint)];
            Array.Copy(decryptedBytes, 0, protocolVersion, 0, protocolVersion.Length);

            SmbVersion version = DecodeVersion(protocolVersion);

            if (version == SmbVersion.Version2Compressed)
            {
                return(DecodeCompressedSmb2Packet(
                           decryptedBytes,
                           role,
                           realSessionId,
                           realTreeId,
                           out consumedLength,
                           out expectedLength,
                           transformHeader
                           ));
            }
            else if (version == SmbVersion.Version2)
            {
                return(DecodeSmb2Packet(
                           decryptedBytes,
                           role,
                           realSessionId,
                           realTreeId,
                           out consumedLength,
                           out expectedLength,
                           transformHeader
                           ));
            }
            else
            {
                throw new InvalidOperationException("Unkown ProtocolId!");
            }
        }
Exemplo n.º 5
0
 private Smb2Packet DecodeEncryptedSmb2Packet(
     byte[] messageBytes,
     Smb2Role role,
     bool ignoreCompoundFlag,
     ulong realSessionId,
     uint realTreeId,
     out int consumedLength,
     out int expectedLength
     )
 {
     return(DecodeSmb2Packet(
                Smb2Crypto.Decrypt(messageBytes, cryptoInfoTable, decodeRole),
                role,
                ignoreCompoundFlag,
                realSessionId,
                realTreeId,
                out consumedLength,
                out expectedLength));
 }
        private Smb2Packet DecodeEncryptedSmb2Packet(
            byte[] messageBytes,
            Smb2Role role,
            ulong realSessionId,
            uint realTreeId,
            out int consumedLength,
            out int expectedLength
            )
        {
            Transform_Header transformHeader;
            var decryptedBytes = Smb2Crypto.Decrypt(messageBytes, cryptoInfoTable, decodeRole, out transformHeader);

            return(DecodeSmb2Packet(
                       decryptedBytes,
                       role,
                       realSessionId,
                       realTreeId,
                       out consumedLength,
                       out expectedLength,
                       transformHeader
                       ));
        }