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()); }
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()); }
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!"); } }
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 )); }