@@ -4403,10 +4403,11 @@ def signSMBv1(self, connData, packet, signingSessionKey, signingChallengeRespons
4403
4403
packet ['SecurityFeatures' ] = m .digest ()[:8 ]
4404
4404
connData ['SignSequenceNumber' ] += 2
4405
4405
4406
- def signSMBv2 (self , packet , signingSessionKey ):
4406
+ def signSMBv2 (self , packet , signingSessionKey , padLength = 0 ):
4407
4407
packet ['Signature' ] = b'\x00 ' * 16
4408
4408
packet ['Flags' ] |= smb2 .SMB2_FLAGS_SIGNED
4409
- signature = hmac .new (signingSessionKey , packet .getData (), hashlib .sha256 ).digest ()
4409
+ packetData = packet .getData () + b'\x00 ' * padLength
4410
+ signature = hmac .new (signingSessionKey , packetData , hashlib .sha256 ).digest ()
4410
4411
packet ['Signature' ] = signature [:16 ]
4411
4412
# print "%s" % packet['Signature'].encode('hex')
4412
4413
@@ -4624,34 +4625,29 @@ def processRequest(self, connId, data):
4624
4625
else :
4625
4626
respPacket ['Data' ] = str (respCommand )
4626
4627
4627
- if connData ['SignatureEnabled' ]:
4628
- self .signSMBv2 (respPacket , connData ['SigningSessionKey' ])
4629
-
4630
4628
packetsToSend .append (respPacket )
4631
4629
else :
4632
4630
# The SMBCommand took care of building the packet
4633
4631
packetsToSend = respPackets
4634
4632
4635
4633
if isSMB2 is True :
4636
- # Let's build a compound answer
4637
- finalData = b''
4638
- i = 0
4639
- for i in range (len (packetsToSend ) - 1 ):
4640
- packet = packetsToSend [i ]
4641
- # Align to 8-bytes
4642
- padLen = (8 - (len (packet ) % 8 )) % 8
4643
- packet ['NextCommand' ] = len (packet ) + padLen
4634
+ # Let's build a compound answer and sign it
4635
+ finalData = []
4636
+ totalPackets = len (packetsToSend )
4637
+ for idx , packet in enumerate (packetsToSend ):
4638
+ padLen = - len (packet ) % 8
4639
+ if idx + 1 < totalPackets :
4640
+ packet ['NextCommand' ] = len (packet ) + padLen
4641
+
4642
+ if connData ['SignatureEnabled' ]:
4643
+ self .signSMBv2 (packet , connData ['SigningSessionKey' ], padLength = padLen )
4644
+
4644
4645
if hasattr (packet , 'getData' ):
4645
- finalData += packet .getData () + padLen * b'\x00 '
4646
+ finalData . append ( packet .getData () + padLen * b'\x00 ' )
4646
4647
else :
4647
- finalData += packet + padLen * b'\x00 '
4648
+ finalData . append ( packet + padLen * b'\x00 ' )
4648
4649
4649
- # Last one
4650
- if hasattr (packetsToSend [len (packetsToSend ) - 1 ], 'getData' ):
4651
- finalData += packetsToSend [len (packetsToSend ) - 1 ].getData ()
4652
- else :
4653
- finalData += packetsToSend [len (packetsToSend ) - 1 ]
4654
- packetsToSend = [finalData ]
4650
+ packetsToSend = [b"" .join (finalData )]
4655
4651
4656
4652
# We clear the compound requests
4657
4653
connData ['LastRequest' ] = {}
0 commit comments