o
    jy                    @   s  d dl mZ d dl mZ d dlZd dlZd dlZd dlZd dlZd dlm	Z	m
Z
 d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZmZmZmZ d d
lT d dlmZmZmZmZmZmZm Z  d dl!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' d dl(m)Z) d dl*Z*d dl+Z+d dl,Z,ze- Z.W n e/y   eZ.Y nw dd d ddddd dZ0g dd d dZ1i dddd dd dd dddddddd dd dg dddddddd d dd!dd"dZ2ddd d#Z3dd d$Z4i d%d&d'd&d(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d=d?d=d@dAdBdCi dDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdQdSdTdUdQdVdTdWdTdXdYdZdYd[dYd\dYd]dYdQdQdQd^d_d_d_d^d`da	Z5G dbdc dce6Z7G ddde deZ8dS )f    )division)print_functionN)
indexbytesb)a2b_hex)contextmanager)noValue)AES)nmbntlmuuidcrypto)*)STATUS_SUCCESSSTATUS_MORE_PROCESSING_REQUIREDSTATUS_INVALID_PARAMETERSTATUS_NO_MORE_FILESSTATUS_PENDINGSTATUS_NOT_IMPLEMENTEDERROR_MESSAGES)SPNEGO_NegTokenInit	TypesMechSPNEGO_NegTokenRespASN1_OID
asn1encodeASN1_AID)KRB5_AP_REQ F)	ShareNameTreeConnectIdSession
IsDfsShare	IsCAShareEncryptDataIsScaleoutShareNumberOfUses)	OpenTableLeaseKey
LeaseState
LeaseEpochFileIDTreeConnect
ConnectionOplocklevelDurableFileNameResilientHandleLastDisconnectTimeResilientTimeoutOperationBuckets
CreateGuidIsPersistentDesiredAccess	ShareModeCreateOptionFileAttributesCreateDisposition)CancelIDMessage	Timestamp)
SigningKeyr,   f   zWindows 3.1g      zWindows 3.2i,  zWindows 3.11i  zWindows NT 3.1 SP3i'  zWindows NT 3.5i  z
Windows 95i!  zWindows NT 3.51ie  zWindows NT 4.0i  z
Windows 98i  zWindows 2000i  zWindows 98 Second Editioni(
  z
Windows XPi
  i
  i  z
Windows Mei  z)Windows XP / Server 2003 / Server 2003 R2ir  zWindows Vistais  zWindows Server 2008i  zWindows 7 / Server 2008 R2i   zWindows Home Server 2011i#  zWindows 8 / Server 2012i%  zWindows 8.1 / Server 2012 R2i (  z
Windows 10iZ)  i98  zWindows 10 / Server 2016i:  i?  iB  icE  zWindows 10 / Server 2019iG  iG  iaJ  ibJ  zWindows Server 2022z
Windows 11zWindows 11 / Server 2025)	icJ  idJ  ieJ  i|O  iU  i]X  igX  i6c  ie  c                   @   s.   e Zd ZdddZdd Zdd Zdd	 Zd
S )SessionErrorr   c                 C   s   t |  || _|| _d S N)	Exception__init__errorpacket)selfrF   rG    rI   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/impacket/smb3.pyrE      s   

zSessionError.__init__c                 C      | j S rC   )rF   rH   rI   rI   rJ   get_error_code      zSessionError.get_error_codec                 C   rK   rC   )rG   rL   rI   rI   rJ   get_error_packet   rN   zSessionError.get_error_packetc                 C   s   dt | j  S )NzSMB SessionError: %s(%s))r   rF   rL   rI   rI   rJ   __str__      zSessionError.__str__N)r   r   )__name__
__module____qualname__rE   rM   rO   rP   rI   rI   rI   rJ   rB      s
    
rB   c                   @   s6  e Zd ZG dd deZdejddddddfddZd	d
 Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zed-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zdd7d8Z dd9d:Z!d;d< Z"dd?d@Z#ddAdBZ$dCdD Z%dEdF Z&e'de(dfdGdHZ)dIdJ Z*ddLdMZ+ddNdOZ,dPde-dd>d>fdQdRZ.dSdT Z/dUdV Z0ddYdZZ1d[d\ Z2dd]d^Z3d_d` Z4d=e5e6ddfdadbZ7d=e5e6dfdcddZ8dedf Z9dgdh Z:didj Z;ddkdlZ<dmdn Z=dodp Z>ddqdrZ?ddsdtZ@ddudvZAddwdxZBeCddeDfdydzZEeFddeDfd{d|ZGdd~dZHdd ZIeZJeZKeZLeZMeZNeZOeZPeZQeZReZSeZTeZUe%ZVe%ZWe%ZXe&ZYeZZeZ[eGZ\eEZ]e?Z^dd Z_dd Z`dd Zadd ZbdddZcdd ZddddZedddZfdd ZgdddZhdd Zidd Zjdd Zkdd Zldd ZmdS )SMB3c                   @   s   e Zd ZdS )z SMB3.HostnameValidationExceptionN)rR   rS   rT   rI   rI   rI   rJ   HostnameValidationException   s    rV   N  <   r   c                 C   s  d| _ i | _i | _ddd tdD | _dg| _g | _d| _i di di d	d
dddd
dd
dd
dddddddd
ddddddddddddd
d
d
d
ddi d
t	dd
d
| _
i dd
di ddddd d
d!dd"i d#g d$d
d%d&d'dd(dd)dd*dd+d
ddd,dddddt	dd&d-| _t| _|| _|| j
d.< d | _|| _d| _d| _d&| _d| _d| _d| _d| _d| _d| _d| _d| _d | _d | _|d/kr|d0kr|| j
d< n|| j
d< |d u rd| j
d1< n|| j
d1< |	d u rF|st }| d2}|d3kr|d | }|r0t!"|| j
d |||| j| _d S t!#|| j
d |||| j| _| $| d S |	| _| j
d	  d47  < | $||
 d S )5NFr   c                 S      g | ]}t tjqS rI   )randomchoicestringascii_letters).0irI   rI   rJ   
<listcomp>       z!SMB3.__init__.<locals>.<listcomp>   zAES-CCMOutstandingRequestsOutstandingResponsesSequenceWindowr   GSSNegotiateTokenMaxTransactSizeMaxReadSizeMaxWriteSize
ServerGuidRequireSigning
ServerNameDialectSupportsFileLeasingSupportsMultiCreditSupportsDirectoryLeasingSupportsMultiChannelSupportsPersistentHandlesSupportsEncryption   00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000)
ClientCapabilitiesServerCapabilitiesClientSecurityModeServerSecurityModeServerIP
ClientName
GSSoptionsPreauthIntegrityHashIdPreauthIntegrityHashValueCipherId	SessionIDTreeConnectTable
SessionKey    SigningRequiredr,   UserCredentialsr&   ChannelListChannelSequencer#   TEncryptionKeyDecryptionKeyr>   ApplicationKeySessionFlagsServerDomain)ServerDNSDomainNameServerDNSHostNameServerOSSigningActivatedr}   CalculatePreAuthHashry   rW   z
*SMBSERVERrz   .   )%RequireMessageSigningConnectionTableGlobalFileTablejoinrange
ClientGuidEncryptionAlgorithmList
MaxDialectRequireSecureNegotiater   _Connection_Session
SMB2Packet
SMB_PACKET_timeout_NetBIOSSession_preferredDialect_doKerberos_strict_hostname_validation_validation_allow_absent_accepted_hostname_SMB3__userName_SMB3__password_SMB3__domain_SMB3__lmhash_SMB3__nthash
_SMB3__kdc_SMB3__aesKey
_SMB3__TGT
_SMB3__TGSsocketgethostnamefindr
   NetBIOSUDPSessionNetBIOSTCPSessionnegotiateSession)rH   remote_nameremote_hostmy_name	host_type	sess_porttimeoutUDPpreferredDialectsessionnegSessionResponser_   rI   rI   rJ   rE      s  	

)







"zSMB3.__init__c                 C   sZ   t d t| j D ]}t d|  qt   t d t| j D ]}t d|  q"d S )N
CONNECTIONz
%-40s : %sSESSION)printlistr   itemsr   )rH   r_   rI   rI   rJ   printStatusJ  s   zSMB3.printStatusc                 C   @   ddl m} | }|| jd  || | | jd< d S Nr   )SHA512r}   )Cryptodome.Hashr   newupdater   digestrH   datar   calculatedHashrI   rI   rJ   __UpdateConnectionPreAuthHashS  
   
z"SMB3.__UpdateConnectionPreAuthHashc                 C   r   r   )r   r   r   r   r   r   r   rI   rI   rJ   __UpdatePreAuthHashZ  r   zSMB3.__UpdatePreAuthHashc                 C   rK   rC   )r   rL   rI   rI   rJ   getKerberosa  rN   zSMB3.getKerberosc                 C   
   | j d S )Nrl   r   rL   rI   rI   rJ   getServerNamed     
zSMB3.getServerNamec                 C   r   )Nrz   r   rL   rI   rI   rJ   getClientNameg  r   zSMB3.getClientNamec                 C   s"   | j d dkr| jd S | j d S )Nrl   r   )r   r   rL   rI   rI   rJ   getRemoteNamej  s   

zSMB3.getRemoteNamec                 C   s   || j d< dS )Nrl   Tr   )rH   namerI   rI   rJ   setRemoteNameo  s   
zSMB3.setRemoteNamec                 C   r   )Nry   r   rL   rI   rI   rJ   getServerIPs  r   zSMB3.getServerIPc                 C   r   )Nr   r   rL   rI   rI   rJ   getServerDomainv  r   zSMB3.getServerDomainc                 C   r   )Nr   r   rL   rI   rI   rJ   getServerDNSDomainNamey  r   zSMB3.getServerDNSDomainNamec                 C   r   )Nr   r   rL   rI   rI   rJ   getServerDNSHostName|  r   zSMB3.getServerDNSHostNamec                 C   r   )Nr   r   rL   rI   rI   rJ   getServerOS  r   zSMB3.getServerOSc                 C   r   )NServerOSMajorr   rL   rI   rI   rJ   getServerOSMajor  r   zSMB3.getServerOSMajorc                 C   r   )NServerOSMinorr   rL   rI   rI   rJ   getServerOSMinor  r   zSMB3.getServerOSMinorc                 C   r   )NServerOSBuildr   rL   rI   rI   rJ   getServerOSBuild  r   zSMB3.getServerOSBuildc                 C   s   | j d t@ S )Nr   )r   SMB2_SESSION_FLAG_IS_GUESTrL   rI   rI   rJ   isGuestSession  rQ   zSMB3.isGuestSessionc                 C   s
   || _ d S rC   )r   )rH   r   rI   rI   rJ   
setTimeout  r   zSMB3.setTimeoutc              	   c   s0    |  |}zd V  W | | d S | | w rC   )
getTimeoutr   )rH   r   prev_timeoutrI   rI   rJ   
useTimeout  s
   
zSMB3.useTimeoutc                 C   r   )Nrm   r   rL   rI   rI   rJ   
getDialect  r   zSMB3.getDialectc           	      C   s   d}|dkrwt ||d  }|d tkr(t|d }td|d d | jd< n3|d tkrMt|d }td|d d }|| jd< |dkrLd	| jd
< n|d tkrTn|d t	kr[	 d|d d  d }d|d  | }|d8 }|dksd S d S )Nr   ContextTypeData<HHashAlgorithmsr|   Ciphersr~   Trs      
DataLengthr   )
SMB2NegotiateContext#SMB2_PREAUTH_INTEGRITY_CAPABILITIES SMB2PreAuthIntegrityCapabilitiesstructunpackr   SMB2_ENCRYPTION_CAPABILITIESSMB2EncryptionCapabilitiesSMB2_COMPRESSION_CAPABILITIES!SMB2_NETNAME_NEGOTIATE_CONTEXT_ID)	rH   contextCountcontextListoffsetcontextcontextPreAuthcontextEncryptioncipherIdpaddingrI   rI   rJ   processContextList  s*   

zSMB3.processContextListc                 C   s   d|d< | j d tks| j d tkr6t| jd dkr4t| jd | tj	
 }|d d |d< d S d S t| jd dkrU| }t| jd |t|}||d< d S d S )Nz                	Signaturerm   r   r   rb   r>   )r   SMB2_DIALECT_21SMB2_DIALECT_002lenr   hmacr   getDatahashlibsha256r   r   AES_CMAC)rH   rG   	signatureprI   rI   rJ   signSMB  s   zSMB3.signSMBc                 C   sR  |d t ur| jd |d< | jd  d7  < | jd |d< d|jv du r(d|d< | jd dkr3d	|d
< |d }| jd du r|| jd dkr||d dkrm|d | jd v du rm| jd |d  d du rlt|d< | | n|d dkr|t|d< | | |d tu r| }| | d| jd< |d t	u rd| jd< | jd t
@ s|d dkr| jd |d  d du r| }t }ddd tdD |d< t||d< t|d< | jd |d< t| jd tjt|d }|| dd   ||}| |d< | | }| j| |S | }| jd du r!| | | j| |S )NCommandre   	MessageIDr   r   CreditChargeF      CreditRequestResponser   T   TreeIDr   r   r#   Flagsr   r   r   c                 S   rY   rI   randr[   r\   r]   r^   _rI   rI   rJ   r`     ra   z SMB3.sendSMB.<locals>.<listcomp>   NonceOriginalMessageSizeEncryptionAlgorithmr      r	  )SMB2_CANCELr   r   fieldsSMB2_FLAGS_SIGNEDr  SMB2_NEGOTIATEr  "_SMB3__UpdateConnectionPreAuthHashSMB2_SESSION_SETUPSMB2_SESSION_FLAG_ENCRYPT_DATASMB2_TRANSFORM_HEADERr   r   r  SMB2_ENCRYPTION_AES128_CCMr	   r   MODE_CCMr   r   encryptr   r   send_packet_SMB3__UpdatePreAuthHash)rH   rG   	messageIdr   	plainTexttransformHeadercipher
cipherTextrI   rI   rJ   sendSMB  sV   	"




8

zSMB3.sendSMBc                 C   s  || j d v r| j d |S | j| j}| drRt| }t	| j
d tj|d d d }|| dd   || tt d  }t|}nt| }|d tkrt}|tkr| j| j}| dryt| }n4t| }t	| j
d tj|d d d }|| dd   || tt d  }t|}|d }|tksd|d	 |ks|d u r| j d
 tkr| j d  |d d 7  < |S || j d |d	 < | |S )Nrd   s   SMBr   r#  r"  r&  Statuss   SMBr  rm   re   r  r   )r   popr   recv_packetr   get_trailer
startswithr.  r	   r   r   r0  r   r  decryptr  r   r   r  recvSMB)rH   packetIDr   r6  r7  r5  rG   statusrI   rI   rJ   r@    s:   "
"
zSMB3.recvSMBc                 C   s  t | jd< | jdu r| jd  tO  < t| jd< t}|d ur(t|d }|d }|tkr2|  }t|d< t	 }| jd |d< | jd |d< | j
|d< |d urU|g|d	< n	tttttg|d	< t|d	 |d
< t|d	 v rt }t|d	 dkr}d|d< nd|d< d|d< t }t|d< t }	d|	d< d|	d< d|	d< ddd t|	d D |	d< |	 |d< t|d |d< |d  d7  < dd|d d  d  }
t }t|d< t }d|d< d|d< | |d< t|d |d< |d  d7  < | |d < d!|d"< | |
 |  |d#< ||d< | |}| |}|tr2t|d }|d tkr2| |j t d$|d% | jd%< t d$|d& | jd&< t d$|d' | jd'< |d( | jd(< |d) | jd*< |d | jd+< |d t@ tksv| jd+ tkr{d| jd,< | jd+ tkrd| jd,< |d }|dkr| !||d#  |d t"@ t"krd| jd-< |d t#@ t#krd| jd.< | jd+ tkrt$| _|d t%@ t%krd| jd/< |d t&@ t&krd| jd0< |d t'@ t'krd| jd1< |d t@ tkrd| jd2< |d | jd3< |d | jd4< d S d S )5Nrw   TCapabilitiesr   DialectRevisionr  SecurityModer   DialectsDialectCountr   p   NegotiateContextOffseth   r   NegotiateContextCountr   HashAlgorithmCount    
SaltLengths    r   r   c                 S   rY   rI   r  r   rI   rI   rJ   r`   c  ra   z)SMB3.negotiateSession.<locals>.<listcomp>Saltr      r   CipherCountr   ClientStartTimes   PaddingNegotiateContextListi   rg   rh   ri   rj   Bufferrf   rm   rk   rn   ro   rp   rq   rr   rs   rv   rx   )(SMB2_NEGOTIATE_SIGNING_ENABLEDr   r   SMB2_NEGOTIATE_SIGNING_REQUIREDSMB2_GLOBAL_CAP_ENCRYPTIONSMB2_DIALECT_WILDCARDSMB2Negotiate_Responser   r*  SMB2Negotiater   r  r
  SMB2_DIALECT_30SMB2_DIALECT_302SMB2_DIALECT_311r  SMB311ContextDatar   r   r   r   r   r  r   r   r9  r@  isValidAnswerr   r+  rawDataminr  SMB2_GLOBAL_CAP_LEASINGSMB2_GLOBAL_CAP_LARGE_MTU
SMB3Packet!SMB2_GLOBAL_CAP_DIRECTORY_LEASINGSMB2_GLOBAL_CAP_MULTI_CHANNEL"SMB2_GLOBAL_CAP_PERSISTENT_HANDLES)rH   r   r   currentDialectnegResprG   
negSessioncontextDatanegotiateContextpreAuthIntegrityCapabilitiespadnegotiateContext2encryptionCapabilitiesrA  ansnegContextCountrI   rI   rJ   r   0  s   


















zSMB3.negotiateSessionc                 C   s$   | j | j| j| j| j| j| j| jfS rC   )r   r   r   r   r   r   r   r   rL   rI   rI   rJ   getCredentials  s   zSMB3.getCredentialsr   Fc           9      C   s  |dks|dkr+t |d rd| }t |d rd| }z
t|}t|}W n   Y || _|| _|| _|| _|| _|| _|| _|| _	|	| _
d| _t }| jdu rVt|d< nt|d< d|d< ddlm}m}m}m} dd	lm}m} dd
lm} ddlm}m}m} ddlm}m } dd l!}|||j"j#j$d}|d u r|	d u r||||||||\}}}}n|d }|d }|d }|	d u r|d| j%d  |j"j&j$d}|||||||\}}}}n|	d }|	d }|	d }t' } t(d g| d< |j)|| dd }| }!|!*|d  | }"d|"d< t+|j,jj$|"d< t- }#|
dkr*ddl.m/}$ |#0|j/j1j$ |2|#|"d< ||"d|!j3 | }%d|%d< ||%d< ||%d|j4 |j!5|j6j7}&|&j8|%d< |3|&|%d < |9|%}'|:|d!|'d }(t;|"d"< |j<|"d" d#< |(|"d" d< t=>d$t?t@t=>d$tAt@t(d%  tB |9|"  | d&< t | |d'< | C |d(< | D })tE|)d)< ||)d*< | j%d+ | jFd+< | G|)}*| H|*}+|+ItJrH|+d, | jFd,< | j%d- | jFd.< |||||f| jFd/< | jKL | jFd0< |
dkrddd1lmM},mN}- dd2lOmP}.mQ}/ tR|+d* }0tS|0d( }1|j)|1d3 d4d  |, dd }2|j<|2d5 d# kr)tTd6|2d5 d }3|U|d7|3}4|j)|4|- dd }5|/t+|5d8 d9   }6|.|6j<|5d8 d: V }7t+|5d; }8|7jW| jFd<< n
|jWd d4 | jFd<< | jFd. du r| j%d= tXkr| j%d= tYkrtZ[| jFd< d>| jFd+ d?| jFd@< ntZ[| jFd< dAdBd?| jFd@< |dks| \ rdC| j%dD< | jFd. du rd| jFdE< | j%d= tXkrA| j%dD du rA| jFdF  t]O  < | j%d= tYkrtZ[| jFd< dG| jFd+ d?| jFdH< tZ[| jFd< dI| jFd+ d?| jFdJ< tZ[| jFd< dK| jFd+ d?| jFdL< n*tZ[| jFd< dMdNd?| jFdH< tZ[| jFd< dOdPd?| jFdJ< tZ[| jFd< dOdQd?| jFdL< dC| jFdR< dS d| jFd/< d| jFd0< d| jFd,< dC| jFd.< d| jFd@< d| jFd<< dC| jFdE< dC| jFdR< tdS| jFd+< tTdT)UNr   r  0%sTrE  r   r  )AP_REQAuthenticatorTGS_REPseq_set)getKerberosTGTgetKerberosTGS)	constants)	PrincipalKerberosTimeTicket)decoderencoder)typeKDC_REPr7  
sessionKeyzcifs/%srl   zMS KRB5 - Microsoft Kerberos 5	MechTypes)asn1Specticket   pvnozmsg-type)	APOptionsz
ap-optionszauthenticator-vnocrealmcnamecusecctimer"  authenticatoretypeBzKRB5 - Kerberos 5	MechTokenSecurityBufferLengthrU  r  r   r}   r   rk   r   r   r,   )AP_REPEncAPRepPart)Key_enctype_tableResponseTokenrb   zenc-partz?Unable to decrypt AP_REP: cipher does not match TGS session key   subkeykeytypekeyvaluez
seq-numberr   rm      SMBSigningKey    r>      SMB2AESCMAC    SmbSign Frs   r   r   
   SMBAppKey r      SMBC2SCipherKey r      SMBS2CCipherKey r      SMB2APP    SmbRpc    SMB2AESCCM 
   ServerIn  
   ServerOut r   rt   zUnsuccessful Login)^r  r   r   r   r   r   r   r   r   r   r   r   SMB2SessionSetupr   rW  rV  impacket.krb5.asn1rv  rw  rx  ry  impacket.krb5.kerberosv5rz  r{  impacket.krb5r|  impacket.krb5.typesr}  r~  r  pyasn1.codec.derr  r  datetimePrincipalNameTypeNT_PRINCIPALvaluer   NT_SRV_INSTr   r   decode	from_asn1intApplicationTagNumbersr   impacket.krb5.constantsr  appendmutual_requiredencodeFlagsto_asn1components_to_asn1nowtimezoneutcmicrosecondencoder1  r   enctyper   packr   r   r   r   r  r   r,  r   r9  r@  r`  r   r   
get_socketr  r  impacket.krb5.cryptor  r  SMB2SessionSetup_Responser   rD   r?  asOctetscontentsr\  r^  r   KDF_CounterModer   r-  )9rH   userpassworddomainlmhashnthashaesKeykdcHostTGTTGS
mutualAuthsessionSetuprv  rw  rx  ry  rz  r{  r|  r}  r~  r  r  r  r  userNametgtr7  oldSessionKeyr  
serverNametgsblobr  apReqoptsr  r  r  encodedAuthenticatorencryptedEncodedAuthenticatorrG   rA  rr  r  r  r  r  smbSessSetupRespnegTokenRespap_repr8  r5  encAPRepPartapCipherapSessionKeysequenceNumberrI   rI   rJ   kerberosLogin  s,  








  



 
















zSMB3.kerberosLoginc              	   C   s  |dks|dkr+t |d rd| }t |d rd| }z
t|}t|}W n   Y || _|| _|| _|| _|| _d| _d | _d | _	t
 }| jdu rPt|d< nt|d< d|d< t }td g|d	< t| jd
 || jd }| |d< t ||d< | |d< |  }	t|	d< ||	d< | jd | jd< | |	}
| |
}| jd tkr| |j |trI|d | jd< | jd | jd< |||||f| jd< | j | jd< t |d }t!|d }t"|d }|d dkrt#|d d |d  }|tj$ d urz|tj$ d %d| jd< W n   Y |tj& d urBz| jd |tj& d %dkr<|tj& d %d| jd< W n   Y |tj' d ur^z|tj' d %d| jd< W n   Y |tj( d urzz|tj( d %d| jd< W n   Y | j)r| *  d |j+v r|d  }t |d!krt,-d"|dd! d t./ v rt.t,-d"|dd! d  d#t,-d"|dd! d   | jd$< nd%t0|dt0|dt,-d"|dd! d f | jd$< t0|d| jd&< t0|d| jd'< t,-d"|dd! d | jd(< t1||d |||||\}}t! }| |d< t ||d< | |d< | |	}
| |
}	|d urg|| jd)< | jd du rg| jd t2krg| jd tkr\t34|d*| jd d+| jd,< nt34|d-d.d+| jd,< z|	t5rt |	d }|d/ | jd/< |	d | jd< |dks| 6 rd0| jd1< | jd du rd| jd2< | jd t2kr| jd1 du r| jd/  t7O  < | jd tkrt34|d3| jd d+| jd4< t34|d5| jd d+| jd6< t34|d7| jd d+| jd8< n!t34|d9d:d+| jd4< t34|d;d<d+| jd6< t34|d;d=d+| jd8< d0| jd>< W dS W d S    d| jd< d| jd< d| jd< d0| jd< d| jd,< d| jd)< d0| jd2< d0| jd>< td?| jd<  d S )@Nr   r  ru  TrE  r   r  z2NTLMSSP - Microsoft NTLM Security Support Providerr  rz   rk   r  r  rU  r  r   r}   rm   r   r   r   r,   r  TargetInfoFields_lenTargetInfoFieldsr   utf-16lerl   r   r   r   Version   r   z	 Build %dr   zWindows %d.%d Build %dr   r   r   r   r  r  r>   r  r  r   Frs   r   r  r   r  r   r  r   r  r  r  r  r  r   rt   )8r  r   r   r   r   r   r   r   r   r   r  r   rW  rV  r   r   r   getNTLMSSPType1r   r  r   r,  r   r9  r@  r^  r3  ra  r`  r   r   r  r  r   NTLMAuthChallengeAV_PAIRSNTLMSSP_AV_HOSTNAMEr  NTLMSSP_AV_DOMAINNAMENTLMSSP_AV_DNS_DOMAINNAMENTLMSSP_AV_DNS_HOSTNAMEr   perform_hostname_validationr(  r   r   WIN_VERSIONSkeysr   getNTLMSSPType3r\  r   r  r   r   r-  )rH   r  r  r  r  r  r  r  authrG   rA  rr  sessionSetupResponse	respTokenntlmChallengeav_pairsversiontype3exportedSessionKey
respToken2rI   rI   rJ   login  s  




 "@4



 


 








-







 z
SMB3.loginc                 C   s   | dd }|| jd v r0| jd | }|d  d7  < | jd |d  d  d7  < |d S zt| jd dd	d	tjd	 \}}}}}|d	 }W n	   | jd }Y d
| d | }t }|d|d< t|d |d< | 	 }t
|d< ||d< | |}	| |	}|trt|d }
tt}||d< |d |d< |d |d< |d  d7  < |
d t@ tkrd|d< |
d t@ tkrd|d< | jd tkr| jd du r|
d t@ tkrd|d< |
d t@ tkrd|d< || jd |d < || jd |< |d S d S )N\r   r   r%   r   r   ry   P   r   \\r  rU  
PathLengthr  r   r   r  r   r    rC  Tr!   r"   rm   rs   
ShareFlagsr#   r$   )splitr   r   getaddrinfor   IPPROTO_TCPSMB2TreeConnectr  r  r   SMB2_TREE_CONNECTr9  r@  r`  r   SMB2TreeConnect_ResponsecopydeepcopyTREE_CONNECTSMB2_SHARE_CAP_DFS&SMB2_SHARE_CAP_CONTINUOUS_AVAILABILITYr\  SMB2_SHAREFLAG_ENCRYPT_DATASMB2_SHARE_CAP_SCALEOUT)rH   share	treeEntryr!  sockaddr
remoteHostpathtreeConnectrG   rA  treeConnectResponserI   rI   rJ   connectTree  sP   (



zSMB3.connectTreec           
      C   sF  || j d v du rtt|| j d v r?| j d | d dkr?| j d | }|d  d8  < | j d |d  d  d8  < dS |  }t|d< ||d< t }||d	< | |}| |}|t	r| j d | d }| j d |= | j d |= g }t
| j d
  D ]}| j d
 | d |kr|| q|D ]}	| j d
 |	= qdS d S )Nr   Fr%   r   r   Tr  r  r   r&   r+   )r   rB   r   r   SMB2_TREE_DISCONNECTSMB2TreeDisconnectr9  r@  r`  r   r   r  r  )
rH   treeIdr  rG   treeDisconnectrA  	shareNamefilesIDToBeRemovedfileIDfileIDToBeRemovedrI   rI   rJ   disconnectTree  s8   



zSMB3.disconnectTreec                 C   s`  || j d v du rtt|dd}t|dkr*t|}|d dkr*|dd  }| j d | d du r8|}nd	| jd
  d | }t	t
}t |d< t|d< || j|< | jd tkr| jd du rt|ddkrst|}|| jv r|tdt	t
}t |d< t|d< || j|< |  }t|d< ||d< | j d | d du rt|d< t }d|d< |
|d< ||d< ||d< ||d< ||d< ||d< ||d< t|d|d< |dkr|d|d< nd |d< |d ur<d!d"d# |D }tt tj t|d  |d$< |d$ d% r-|d  d d%|d$ d%   7  < tt tj t|d  |d$< t||d&< |d  |7  < nd|d$< d|d&< ||d'< | |}| |}|trt|d' }t	t }|d( |d(< ||d)< |
|d*< d|d+< d|d,< d|d-< ||d.< | jd tkr|
|d< |
|d/< |
|d< |
|d< |
|d< || j d0 |d( ! < |d( ! S d S )1Nr   F/r  r   r   r!   Tr  rl   r'   r(   rm   rp   r  zDon't know what to do now! :-or  r  r  SecurityFlagsRequestedOplockLevelImpersonationLevelr6   r9   ShareAccessr:   CreateOptionsr  
NameLengthr   rU      r   c                 s   s    | ]}|  V  qd S rC   )r  r^   xrI   rI   rJ   	<genexpr>      zSMB3.create.<locals>.<genexpr>CreateContextsOffsetr   CreateContextsLengthr   r*   r+   r-   r.   r0   r1   r/   r7   r&   )"r   rB   r   replacer  ntpathnormpathr   r  r  FILEr   generateSMB2_LEASE_NONEr   r\  r  dirnamerD   r   SMB2_CREATESMB2_FLAGS_DFS_OPERATIONS
SMB2Creater  r   r   SIZEr9  r@  r`  r   SMB2Create_ResponseOPENr  )rH   r  fileNamedesiredAccess	shareModecreationOptionscreationDispositionfileAttributesimpersonationLevelsecurityFlagsoplockLevelcreateContextspathName	fileEntry	parentDirparentEntryrG   
smb2CreatecontextsBufrA  rr  createResponseopenFilerI   rI   rJ   create  s   







   


zSMB3.createc                 C   s   || j d v du rtt|| j d v du rtt|  }t|d< ||d< t }d|d< ||d< ||d	< | |}| |}|t	rW| j
| j d | d
 = | j d |= dS d S )Nr   Fr&   r  r  r   r  r*   r   r/   T)r   rB   r   r   
SMB2_CLOSE	SMB2Closer9  r@  r`  r   r   )rH   r  fileIdrG   smbCloserA  rr  rI   rI   rJ   closeD  s$   


z
SMB3.closeTc                 C   s<  || j d v du rtt|| j d v du rtt|  }t|d< ||d< | jd |k r3| jd }n|}| jd tkrN| jd d	u rNd
|d
 d  |d< ntd|}t }d|d< ||d< ||d< ||d< ||d< | 	|}	| 
|	}
|
trt|
d }|d }|d dkr|| |||t| |d |7 }|S d S )Nr   Fr&   r  r  rh   rm   ro   Tr      r  r  rS  r*   LengthOffsetr   rU  DataRemainingr   )r   rB   r   r   	SMB2_READr   r  rb  SMB2Readr9  r@  r`  r   SMB2Read_Responsereadr  )rH   r  rU  r  bytesToRead
waitAnswerrG   maxBytesToReadsmbReadrA  rr  readResponseretDatarI   rI   rJ   r_  ^  s8   



"z	SMB3.readc              	   C   s\  || j d v du rtt|| j d v du rtt|  }t|d< ||d< | jd |k r3| jd }n|}| jd tkrN| jd d	u rNd
|d
 d  |d< ntd|}t }	||	d< ||	d< ||	d< d|	d< |d | |	d< |	|d< | 	|}
|d	u r| 
|
}n|S |trt|d }|d }||k r|| ||||d  || || |7 }|S d S )Nr   Fr&   r  r  ri   rm   ro   Tr   rX  r  r*   rY  rZ  r   WriteChannelInfoOffsetrU  r   Count)r   rB   r   r   
SMB2_WRITEr   r  rb  	SMB2Writer9  r@  r`  r   SMB2Write_Responsewrite)rH   r  rU  r   r  bytesToWritera  rG   maxBytesToWritesmbWriterA  rr  writeResponsebytesWrittenrI   rI   rJ   rk    s>   


(z
SMB3.writer   c	                 C   s   || j d v du rtt|| j d v du rtt|  }	t|	d< ||	d< t }
||
d< |dkr5t|
d< ||
d	< ||
d
< |d u rF| jd }||
d< |d|
d< t	|
d |
d< |
|	d< | jd t
kru| jd du rud|d d  |	d< | |	}| |}|trt|d }|d S d S )Nr   Fr&   r  r  FileInformationClassr   r  	FileIndexr*   rh   OutputBufferLengthr  rU  FileNameLengthr   rm   ro   Tr   rX  r  )r   rB   r   r   SMB2_QUERY_DIRECTORYSMB2QueryDirectorySMB2_INDEX_SPECIFIEDr   r  r  r  r9  r@  r`  r   SMB2QueryDirectory_Response)rH   r  rU  searchStringresumeIndexinformationClassmaxBufferSizeenumRestartsingleEntryrG   queryDirectoryrA  rr  queryDirectoryResponserI   rI   rJ   r    s6   



zSMB3.queryDirectoryc                 C   sD   |   }t|d< t }||d< | |}| |}|tr dS d S )Nr  r   T)r   	SMB2_ECHOSMB2Echor9  r@  r`  r   )rH   rG   smbEchorA  rr  rI   rI   rJ   echo  s   


z	SMB3.echoc                 C   s4   |   }t|d< ||d< t }||d< | | d S )Nr  r  r   )r   r'  
SMB2Cancelr9  )rH   rA  rG   	smbCancelrI   rI   rJ   cancel  s   zSMB3.cancelr   r   c	                 C   s  || j d v du rtt|d u rd}n|| j d v du r!tt|  }	t|	d< ||	d< t }
||
d< ||
d< ||
d	< ||
d
< t||
d< t|dkrUd|
d< d|
d< n||
d< d|
d< ||
d
< ||
d< |
|	d< | |	}|dkrtdS | |}|	t
rt|d }|d S d S )Nr   Fu    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿr&   r  r  r*   CtlCodeMaxInputResponseMaxOutputResponse
InputCountr   InputOffset rU  OutputOffsetr  r   T)r   rB   r   r   
SMB2_IOCTL	SMB2Ioctlr  r9  r@  r`  r   SMB2Ioctl_Response)rH   r  rU  ctlCodeflags	inputBlobmaxInputResponsemaxOutputResponsera  rG   smbIoctlrA  rr  smbIoctlResponserI   rI   rJ   ioctl  s>   



z
SMB3.ioctlc                 C   s   || j d v du rtt|| j d v du rtt|  }t|d< ||d< t }||d< ||d< | |}| |}|t	rBdS d S )	Nr   Fr&   r  r  r*   r   T)
r   rB   r   r   
SMB2_FLUSH	SMB2Flushr9  r@  r`  r   )rH   r  rU  rG   smbFlushrA  rr  rI   rI   rJ   flush  s   


z
SMB3.flushc           
      C   s   || j d v du rtt|| j d v du rtt|  }t|d< ||d< t }||d< t||d< ||d< d	d
d |D |d< ||d< | |}| 	|}|
tr^t|d }	dS d S )Nr   Fr&   r  r  r*   	LockCountLockSequencer   c                 s   s    | ]}t |V  qd S rC   )strr-  rI   rI   rJ   r/  8  r0  zSMB3.lock.<locals>.<genexpr>Locksr   T)r   rB   r   r   	SMB2_LOCKSMB2Lockr  r   r9  r@  r`  r   SMB2Lock_Response)
rH   r  rU  lockslockSequencerG   smbLockrA  rr  smbFlushResponserI   rI   rJ   lock*  s&   


z	SMB3.lockc                 C   s   |   }t|d< t }||d< | |}| |}|trCd| jd< d| jd< d| jd< d| jd	< d| jd
< d| jd< d| jd< dS d S )Nr  r   r   r   r   r,   r   Fr   r>   r   r   T)r   SMB2_LOGOFF
SMB2Logoffr9  r@  r`  r   r   )rH   rG   	smbLogoffrA  rr  rI   rI   rJ   logoffQ  s    









zSMB3.logoffc                 C   s   || j d v du rtt|| j d v du rtt|  }t|d< ||d< t }	||	d< ||	d< ||	d< d	|	d
< ||	d< t|dkrLd|	d< d|	d< n
t||	d< ||	d< ||	d< |	|d< | |}
| |
}|	t
rwt|d }|d S d S )Nr   Fr&   r  r  r*   InfoTypeFileInfoClass  rs  AdditionalInformationr   InputBufferOffsetr  rU  InputBufferLengthr  r   )r   rB   r   r   SMB2_QUERY_INFOSMB2QueryInfor  r9  r@  r`  r   SMB2QueryInfo_Response)rH   r  rU  r  infoTypefileInfoClassadditionalInformationr  rG   	queryInforA  rr  queryResponserI   rI   rJ   r  h  s4   



zSMB3.queryInfoc                 C   s   || j d v du rtt|| j d v du rtt|  }t|d< ||d< t }||d< ||d< t||d< ||d	< ||d
< ||d< ||d< | |}	| |	}
|
	t
rXdS d S )Nr   Fr&   r  r  r  r  BufferLengthr  r*   rU  r   T)r   rB   r   r   SMB2_SET_INFOSMB2SetInfor  r9  r@  r`  r   )rH   r  rU  r  r  r  r  rG   setInforA  rr  rI   rI   rJ   r    s(   


zSMB3.setInfoc                 C   s    |   tkr| jd S | jd S Nr   r   r   r\  r   rL   rI   rI   rJ   getSessionKey  s   

zSMB3.getSessionKeyc                 C   s(   |   tkr|| jd< d S || jd< d S r  r  )rH   keyrI   rI   rJ   setSessionKey  s   zSMB3.setSessionKeyc              
   C   s.  | dd}t|}t|dkr|d dkr|dd  }| dd}t|}t|dkr:|d dkr:|dd  }| |}d }zE| ||tttB t	B dt
d}t }d|d< d|d< |d	|d
< t|d
 |d< | j|||ttd W |d ur| || | | dS |d ur| || | | w )Nr%  r  r   r   i    ReplaceIfExistsz        RootDirectoryr  r/   rt  )r  r  T)r3  r4  r5  r  r  rR  MAXIMUM_ALLOWEDFILE_SHARE_READFILE_SHARE_WRITEFILE_SHARE_DELETE	FILE_OPENFILE_RENAME_INFORMATION_TYPE_2r  r  SMB2_0_INFO_FILESMB2_FILE_RENAME_INFOrW  r$  )rH   r   oldPathnewPathr  rU  	renameReqrI   rI   rJ   rename  s2   



zSMB3.renamec           	      C   sp   d}|}|s4t |dkr	 || S |d | jd  }|| jd d  }| ||||t |}||7 }|r|| S )NFr   ri   )r  r   rk  )	rH   r  rU  r   r  finishedwriteOffset	writeDatawrittenrI   rI   rJ   	writeFile  s   zSMB3.writeFilec                 C   s   d|v S )N@GMT-rI   )rH   r  rI   rI   rJ   isSnapshotRequest     zSMB3.isSnapshotRequestc                 C   s   || d| dd  }||d}ddlm} t||d|ddd  }|d	9 }|d
7 }t }||d< t }d|d< d|d< td|d< d|d< d|d< d|d< |d  d7  < |d  |	 7  < ||ddd}|dkrz|d7 }||fS )Nr     r   r   )r  z@GMT-%Y.%m.%d-%H.%M.%Si  r   i l     }*{Gr=   Nextrb   
NameOffsetTWrpr+  
DataOffsetr   r   s   TWrprU  s       r  r  r   )
indexr3  r  r  strptimetotal_secondsSMB2_CREATE_TIMEWARP_TOKENSMB2CreateContextr  r  )rH   r  	timestampr  fTimetokenctxrI   rI   rJ   timestampForSnapshot  s*    zSMB3.timestampForSnapshotc                 C   s  d }|  |rg }| |\}}|| |dd}t|}t|dkr2|d dkr2|dd  }| |}d }z| j|t	|t
tB ttB tB ttB td|d}d}g }	ddlm}
 	 zW| j||t|d	td
}d}|dkr|
|
jj}|| |	|
|d |d |d |d |d |d |d |d d|d d	 |d }||d  }|dksqW n ty } z| tkrÂ W Y d }~nd }~ww q]W |d ur|  || | !| |	S |d ur|  || | !| w )Nr%  r  r   r   rI  r   smbTr  )r|  r{  CreationTimeLastAccessTimeLastWriteTimeLastChangeTime	EndOfFileAllocationSizeExtFileAttributesr/   r  NextEntryOffset)"r  r  r  r3  r4  r5  r  r  rR  r9  FILE_READ_ATTRIBUTESFILE_READ_DATAr  r  r  FILE_DIRECTORY_FILEFILE_SYNCHRONOUS_IO_NONALERTr  impacketr  r  basenameFILE_FULL_DIRECTORY_INFORMATIONSMBFindFileFullDirectoryInfoSMBFLAGS2_UNICODE
fromString
SharedFiler  rB   rM   r   rW  r$  )rH   r   r  r  rI  r  r  rU  resfilesr  
nextOffsetfileInfoerI   rI   rJ   listPath  sr   







zSMB3.listPathc              
   C   s   | dd}t|}t|dkr|d dkr|dd  }| |}d }z#| ||tttB t	B t
tB td}W |d urA| || | | dS |d urR| || | | w Nr%  r  r   r   T)r3  r4  r5  r  r  rR  GENERIC_ALLr  r  r  r  r  FILE_CREATErW  r$  rH   r   rJ  r  r  rU  rI   rI   rJ   mkdir,  s"   



z
SMB3.mkdirc              
   C   s   | dd}t|}t|dkr|d dkr|dd  }| |}d }z?| j||ttB tB t	t
B tB ttB tdd}ddlm} | }d|d< | j|||td	 W |d ur]| || | | dS |d urn| || | | w )
Nr%  r  r   r   )rA  rB  rC  rD  rE  r  TDeletePending)r  r  )r3  r4  r5  r  r  rR  DELETEr  SYNCHRONIZEr  r  r  r  FILE_OPEN_REPARSE_POINTr  r  r  SMBSetFileDispositionInfor  SMB2_FILE_DISPOSITION_INFOrW  r$  )rH   r   rJ  r  r  rU  r  
delete_reqrI   rI   rJ   rmdir@  s.   



z
SMB3.rmdirc              
   C   s   | dd}t|}t|dkr|d dkr|dd  }| |}d }z!| ||ttB tt	t
B td}W |d ur?| || | | dS |d urP| || | | w r  )r3  r4  r5  r  r  rR  r  r  r  FILE_NON_DIRECTORY_FILEFILE_DELETE_ON_CLOSEr  rW  r$  r
  rI   rI   rJ   removeZ  s   

 
zSMB3.removec              
   C   s  d }|  |rg }| |\}}	||	 |dd}t|}t|dkr2|d dkr2|dd  }| |}
d }ddlm	} zu| j
|
|t|t|d|d}| |
|}||}|d }|| | jd k rz|| dkry| |
|||| }|| n)d}|| }||k r| |
||| jd }|t|7 }|t|7 }|| ||k sW |d ur| |
| | |
 d S |d ur| |
| | |
 w )	Nr%  r  r   r   r  r  r  rh   )r  r  r  r3  r4  r5  r  r  r  r  rR  r  r  r  SMBQueryFileStandardInfor   r_  rW  r$  )rH   r   r  callbackmoder  r  shareAccessModerI  r  r  rU  r  r  r  fileSizer   r  toBeReadrI   rI   rJ   retrieveFilem  sJ   




zSMB3.retrieveFilec              
   C   s   | dd}t|}t|dkr|d dkr|dd  }| |}d }	zB| ||t|t|d}	d}
|}|
sU|| jd }t|dkrDn| 	||	||t|}||7 }|
r6W |	d ur`| 
||	 | | d S |	d urq| 
||	 | | w )Nr%  r  r   r   Fri   )r3  r4  r5  r  r  rR  FILE_WRITE_DATAr  r   rk  rW  r$  )rH   r   r  r  r  r  r  r  r  rU  r  r  r   r  rI   rI   rJ   	storeFile  s0   

zSMB3.storeFiler  c              	   C   s   t |}|| jd v du rttt|dkrttt }|d |d< |d|d< t|d |d< d	|d
< | j|d t	t
|dddS )Nr   Fr  i Timeoutr  Namer+  r   TimeoutSpecifiedr   )r  r  r  r  )r4  r  r   rB   r   r  FSCTL_PIPE_WAIT_STRUCTUREr  r  FSCTL_PIPE_WAITSMB2_0_IOCTL_IS_FSCTL)rH   r  pipenamer   pipeWaitrI   rI   rJ   waitNamedPipe  s   
zSMB3.waitNamedPipec                 C   s&   t  }| jd |d< | jd |d< |S )Nrh   ri   )dictr   )rH   r  rI   rI   rJ   getIOCapabilities  s   zSMB3.getIOCapabilitiesc                 C   s   | j r| j   d | _ d S d S rC   )r   rW  rL   rI   rI   rJ   close_session  s   

zSMB3.close_sessionc                 C      dS NTrI   rL   rI   rI   rJ   doesSupportNTLMv2     zSMB3.doesSupportNTLMv2c                 C   r,  r-  rI   rL   rI   rI   rJ   is_login_required  r/  zSMB3.is_login_requiredc                 C   r   )Nrk   r   rL   rI   rI   rJ   is_signing_required  r   zSMB3.is_signing_requiredc                 C   s   t |dkr|d dkr|dd  }|d urFddlm} |j| d}||d }| |||d |d |d	 |d
 |d |d |d 	S | ||ttB t	B t
B tB tB tB tB ttB ttdS )Nr   r  r   r  )r   
Parameters
AccessMaskr)  r*  Dispositionr9   Impersonationr&  )r  r  r  
SMBCommandr  SMBNtCreateAndX_ParametersrR  r  r  FILE_APPEND_DATAFILE_READ_EAFILE_WRITE_EAFILE_WRITE_ATTRIBUTESr  READ_CONTROLr  r  r  r  )rH   r  r@  
smb_packetcmdr  ntCreateparamsrI   rI   rJ   nt_create_andx  s,   zSMB3.nt_create_andxc                 C   s
   | j  S rC   )r   r  rL   rI   rI   rJ   r    r   zSMB3.get_socketc                 C   s   |  ||||t|S rC   )rk  r  )rH   tidfidr   r  wait_answerwrite_pipe_moder=  rI   rI   rJ   
write_andx  s   zSMB3.write_andxc              	   C   s   | j ||tt|d||B dS )Nr  )r  ra  )r  FSCTL_PIPE_TRANSCEIVEr%  )rH   rB  rC  r   noAnswerra  r  rI   rI   rJ   TransactNamedPipe	  s   zSMB3.TransactNamedPipec                 C   s*   |   }|trt|d }|d S d S )Nr   rU  )r@  r`  r   r  )rH   rr  r  rI   rI   rJ   TransactNamedPipeRecv  s
   
zSMB3.TransactNamedPipeRecvc                 C   s$   |d u r	| j d }| |||||S )Nrh   )r   r_  )rH   rB  rC  r  max_sizerD  r=  rI   rI   rJ   	read_andx  s   
zSMB3.read_andxc                 C   s   t trC   )rB   r   rL   rI   rI   rJ   list_shared  r  zSMB3.list_sharedc              	   C   sP   t |dkr|d dkr|dd  }| ||||t|d}|ddddddddf	S )Nr   r  r   )r  rR  r  )rH   rB  r@  	open_modedesired_accessrU  rI   rI   rJ   	open_andx  s   zSMB3.open_andxc                 C   s"   || j d< d| j d< d| j d< d S )Nr   Tr   r   r   )rH   
signingKeyrI   rI   rJ   set_session_key&  s   

zSMB3.set_session_keyc                 C   s   || _ || _|| _d S rC   )r   r   r   )rH   validateaccept_emptyhostnamerI   rI   rJ   set_hostname_validation+  s   
zSMB3.set_hostname_validationc                 C   s   | j d dkr| js| dd S | j d  | j kr@| j d  | j krB| d| j | j d  | j d  f d S d S )Nrl   r   zLHostname was not supplied by target host and absent validation is disallowedr   z?Supplied hostname %s does not match reported hostnames %s or %s)r   r   rV   lowerr   rL   rI   rI   rJ   r  0  s   
0"z SMB3.perform_hostname_validationrC   )NN)r   r   r   r   r   NNF)r   r   r   )r   r   T)Nr   r   r   NNr   )r   )r  )r   r   FN)r   r   r   )r   Nr   N)nrR   rS   rT   rD   rV   r
   TYPE_SERVERrE   r   r+  r3  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r9  r@  r   rt  r  r  r  r$  SMB2_IL_IMPERSONATIONSMB2_OPLOCK_LEVEL_NONErR  rW  r_  rk  FILENAMES_INFORMATIONr  r  r  r  r  r  r  r  SMB2_FILE_STANDARD_INFOr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  FILE_OVERWRITE_IFr  r(  r*  get_server_nameget_client_nameget_server_domainget_server_dns_domain_nameget_server_dns_host_nameget_remote_nameset_remote_nameget_remote_hostget_server_osget_server_os_majorget_server_os_minorget_server_os_buildtree_connect_andxtree_connectconnect_treedisconnect_treeset_timeoutuse_timeout	stor_file	retr_file	list_pathr+  r.  r0  r1  rA  r  rF  rI  rJ  rL  rM  rP  rR  rV  r  rI   rI   rI   rJ   rU      s    

 	

@
2 
 
~ N:e

*."


)
' 	


4

(




rU   )9
__future__r   r   r   r4  rZ   r\   r   sixr   r   binasciir   
contextlibr   pyasn1.type.univr   Cryptodome.Cipherr	   r  r
   r   r   r   impacket.smb3structsimpacket.nt_errorsr   r   r   r   r   r   r   impacket.spnegor   r   r   r   r   r   impacket.krb5.gssapir   r  r  r  SystemRandomr  NotImplementedErrorr  r6  r?  REQUESTCHANNELr  rD   rB   rU   rI   rI   rI   rJ   <module>   sB   $ 	
	
 !"#/