a
    kÄ#d˜ ã                   @   s>	  d Z ddlZddlmZ ddlmZ ddlmZmZm	Z	 ddl
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+ ddl,m-Z- ddl.m/Z/ dd	l0m1Z1m2Z2 d
ddddddœZ3dddddddddddddddd d!œZ4d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5œZ5d6d7d8d9d:d;d<d=œZ6d>d?d@dAdBdCdDdEœZ7dFdGdHdIdJdKœZ8dLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_œZ9d`dadbdcdddedfdgdhdidjdkœZ:G dlde„ deeƒZ;G dmdf„ dfeƒZ<G dndo„ doeƒZ=G dpdq„ dqeƒZ>G drdg„ dgeƒZ?G dsdd„ ddeƒZ@G dtdc„ dceƒZAG dudv„ dveƒZBG dwdx„ dxeƒZCG dydz„ dzeƒZDG d{d|„ d|eƒZEG d}d~„ d~eƒZFdd€„ ZGG d�d‚„ d‚eƒZHG dƒd„„ d„eƒZIG d…d†„ d†eIƒZJe	eHeJd‡dˆ� G d‰dŠ„ dŠeƒZKG d‹dŒ„ dŒeIƒZLe	eHeLdd�� G dŽd�„ d�eƒZMeeKeMd‡d�� G d‘d’„ d’eƒZNeeKeNd“d�� G d”d•„ d•eƒZOeeKeOd–d�� G d—d˜„ d˜eƒZPeeKePd™d�� G dšd›„ d›eƒZQeeKeQdœd�� G d�dž„ džeIƒZRe	eHeRdd‡dŸ� G d d¡„ d¡eIe2ƒZSe	eHeSd‡d�� G d¢d£„ d£eIe2ƒZTe	eHeTd‡d‡dŸ� G d¤d¥„ d¥eIƒZUe	eHeUd“d�� G d¦d§„ d§eIƒZVe	eHeVd“d‡dŸ� G d¨d©„ d©eIe2ƒZWe	eHeWd–d�� dªd«d¬d­d®d¯d°d±d²d³d´dµd¶d·d¸d¹dºd»d¼d½d¾œZXG d¿dÀ„ dÀeIƒZYe	eHeYd–d‡dŸ� G dÁdÂ„ dÂeIƒZZe	eHeZdÃd�� G dÄdÅ„ dÅeIƒZ[e	eHe[dÃd‡dŸ� G dÆdÇ„ dÇeƒZ\G dÈdÉ„ dÉeƒZ]G dÊdË„ dËeƒZ^G dÌdÍ„ dÍeƒZ_G dÎdÏ„ dÏeƒZ`G dÐdÑ„ dÑeƒZaG dÒdÓ„ dÓeƒZbG dÔdÕ„ dÕeƒZcG dÖd×„ d×eƒZdG dØdÙ„ dÙeƒZeG dÚdÛ„ dÛeƒZfG dÜdÝ„ dÝeƒZgG dÞdß„ dßeƒZhG dàdá„ dáeƒZiG dâdã„ dãeƒZjG dädå„ dåeƒZkG dædç„ dçeƒZlG dèdé„ déeƒZmG dêdë„ dëe2ƒZndìdídîdïdðdñœZoG dòdó„ dóeIe2ƒZpe	eHepd™d�� G dôdõ„ dõeIe2ƒZqe	eHeqd™d‡dŸ� G död÷„ d÷eIƒZre	eHerdœd�� G dødù„ dùeIƒZse	eHesdœd‡dŸ� G dúdû„ dûeIe2ƒZte	eHetdüd�� G dýdþ„ dþeIe2ƒZue	eHeudüd‡dŸ� G dÿ�d „ �d eIe2ƒZve	eHev�dd�� G �d�d„ �deIƒZwe	eHew�dd‡dŸ� G �d�d„ �deIƒZxe	eHex�dd�� G �d�d„ �deƒZyG �d�d	„ �d	eƒZzG �d
�d„ �deIe2ƒZ{e	eHe{�dd�� G �d�d„ �deƒZ|G �d�d„ �deƒZ}G �d�d„ �deIe2ƒZ~e	eHe~�dd‡dŸ� G �d�d„ �deIe2ƒZe	eHe�dd�� G �d�d„ �deIe2ƒZ€e	eHe€�dd‡dŸ� G �d�d„ �deIƒZ�e	eHe��dd�� G �d�d„ �deIe2ƒZ‚e	eHe‚�dd‡dŸ� G �d�d„ �deƒZƒG �d�d „ �d eƒZ„G �d!�d"„ �d"eIe2ƒZ…e	eHe…�d#d�� G �d$�d%„ �d%eIƒZ†e	eHe†�d#d‡dŸ� G �d&�d'„ �d'eƒZ‡dS ((  z<
SMB (Server Message Block), also known as CIFS - version 2
é    N)Úconf)Úlog_runtime)ÚPacketÚbind_layersÚbind_top_down)!ÚByteEnumFieldÚ	ByteFieldÚConditionalFieldÚFieldLenFieldÚFieldListFieldÚ
FlagsFieldÚIntEnumFieldÚIntFieldÚ
LEIntFieldÚLEIntEnumFieldÚLELongFieldÚLEShortEnumFieldÚLEShortFieldÚMultipleTypeFieldÚPadFieldÚPacketFieldÚPacketLenFieldÚPacketListFieldÚReversePadFieldÚShortEnumFieldÚ
ShortFieldÚStrFieldUtf16ÚStrFixedLenFieldÚStrLenFieldUtf16ÚStrLenFieldÚStrNullFieldUtf16ÚUTCTimeFieldÚ	UUIDFieldÚXLEIntFieldÚXLELongFieldÚXLEShortFieldÚXStrLenFieldÚXStrFixedLenField)Ú
NBTSession)ÚGSSAPI_BLOB)Ú_NTLMPayloadFieldÚ_NTLMPayloadPacketz	SMB 2.002zSMB 2.1z	SMB 2.???zSMB 3.0z	SMB 3.0.2z	SMB 3.1.1)é  é  iÿ  é   é  é  ZSTATUS_SUCCESSZSTATUS_PENDINGZSTATUS_NOTIFY_ENUM_DIRZSTATUS_MORE_PROCESSING_REQUIREDZSTATUS_ACCESS_DENIEDZSTATUS_OBJECT_NAME_NOT_FOUNDZSTATUS_INSUFFICIENT_RESOURCESZSTATUS_CANCELLEDZSTATUS_FILE_CLOSEDZSTATUS_INVALID_PARAMETERZSTATUS_NO_SUCH_FILEZSTATUS_NOT_SUPPORTEDZSTATUS_FS_DRIVER_REQUIREDZSTATUS_NOT_FOUNDZSTATUS_BUFFER_OVERFLOWZSTATUS_NO_MORE_FILES)r   i  é  ì       l   "    l   4    l   š    l       l   (   ì       l       l   »    l   œ   l   %   ì       l       ZSMB2_NEGOTIATEZSMB2_SESSION_SETUPZSMB2_LOGOFFZSMB2_TREE_CONNECTZSMB2_TREE_DISCONNECTZSMB2_CREATEZ
SMB2_CLOSEZ
SMB2_FLUSHZ	SMB2_READZ
SMB2_WRITEZ	SMB2_LOCKZ
SMB2_IOCTLZSMB2_CANCELZ	SMB2_ECHOZSMB2_QUERY_DIRECTORYZSMB2_CHANGE_NOTIFYZSMB2_QUERY_INFOZSMB2_SET_INFOZSMB2_OPLOCK_BREAK)r   é   é   é   é   é   é   é   é   é	   é
   é   é   é   é   é   é   é   é   Z#SMB2_PREAUTH_INTEGRITY_CAPABILITIESZSMB2_ENCRYPTION_CAPABILITIESZSMB2_COMPRESSION_CAPABILITIESZ!SMB2_NETNAME_NEGOTIATE_CONTEXT_IDZSMB2_TRANSPORT_CAPABILITIESZ SMB2_RDMA_TRANSFORM_CAPABILITIESZSMB2_SIGNING_CAPABILITIES)r5   r6   r7   r9   r:   r;   r<   ÚDFSZLeasingZLargeMTUZMultiChannelZPersistentHandlesZDirectoryLeasingZ
Encryption)r5   r6   r8   r<   rD   é    é@   ÚNoneZLZNT1ZLZ77zLZ77 + HuffmanZ
Pattern_V1)r   r5   r6   r7   r8   ÚFILE_ATTRIBUTE_READONLYÚFILE_ATTRIBUTE_HIDDENÚFILE_ATTRIBUTE_SYSTEMÚFILE_ATTRIBUTE_DIRECTORYÚFILE_ATTRIBUTE_ARCHIVEÚFILE_ATTRIBUTE_NORMALÚFILE_ATTRIBUTE_TEMPORARYÚFILE_ATTRIBUTE_SPARSE_FILEÚFILE_ATTRIBUTE_REPARSE_POINTÚFILE_ATTRIBUTE_COMPRESSEDÚFILE_ATTRIBUTE_OFFLINEÚ"FILE_ATTRIBUTE_NOT_CONTENT_INDEXEDÚFILE_ATTRIBUTE_ENCRYPTEDÚFILE_ATTRIBUTE_INTEGRITY_STREAMÚFILE_ATTRIBUTE_NO_SCRUB_DATAZFILE_ATTRIBUTE_RECALL_ON_OPENZFILE_ATTRIBUTE_PINNEDZFILE_ATTRIBUTE_UNPINNEDZ$FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS)r5   r6   r8   rD   rH   é€   é   é   é   é   é   é    é @  é €  é   é   é   é   é  @ ZFileDirectoryInformationZFileFullDirectoryInformationZFileBothDirectoryInformationÚFileStandardInformationÚFileInternalInformationÚFileEaInformationÚFileNetworkOpenInformationÚFileIdBothDirectoryInformationZFileIdFullDirectoryInformationZFileNamesInformationZFileIdExtdDirectoryInformation)r5   r6   r7   r9   r:   r;   é"   é%   é&   r@   é<   c                   @   s   e Zd ZeddƒgZdS )rj   ÚEaSizer   N)Ú__name__Ú
__module__Ú__qualname__r   Úfields_desc© rv   rv   úH/var/www/html/gsl.tools/lib/python3.9/site-packages/scapy/layers/smb2.pyrj   ¸   s   ÿc                   @   s„   e Zd Zedddg d¢dd�edddg d¢dd�edddg d¢dd�ed	ddg d¢dd�ed
dƒeddƒedddeƒeddƒgZdS )rk   ÚCreationTimeNú<Q©iA  r5   r5   r   r   r   ç    ÐcA©ÚfmtÚepochZcustom_scalingÚLastAccessTimeÚLastWriteTimeÚ
ChangeTimeÚAllocationSizer_   Z	EnfofFileÚFileAttributesrZ   éàÿÿÿÚ	Reserved2r   )	rr   rs   rt   r!   r   r   rƒ   r   ru   rv   rv   rv   rw   rk   Á   s*   þþþþðc                   @   s”   e Zd Zeddƒeddƒgejdd…  eddddd	�ed
dƒeddƒeddƒedddd�e	ddƒe
ddƒeedddd„ d�dd�g Zdd„ ZdS )ÚFILE_ID_BOTH_DIR_INFORMATIONÚNextNÚ	FileIndexr   r;   ÚFileNameLengthú<IÚFileName©r}   Ú	length_ofrq   ZShortNameLengthZ	Reserved1Z	ShortNameó    é   ©Úlengthr…   ÚFileIdó   .c                 C   s   | j S ©N)r‰   ©Úpktrv   rv   rw   Ú<lambda>è   rŽ   z%FILE_ID_BOTH_DIR_INFORMATION.<lambda>©Zlength_fromr<   )Úalignc                 C   s   t jS r”   ©r   Úpadding_layer©ÚselfÚsrv   rv   rw   Údefault_payload_classî   s    z2FILE_ID_BOTH_DIR_INFORMATION.default_payload_class)rr   rs   rt   r   rk   ru   r
   r   r   r   r   r   r   rŸ   rv   rv   rv   rw   r†   Ø   s.   þýýúøýr†   c                   @   s   e Zd Zdd„ ZdS )Ú_NextPacketListFieldc                 C   sh   d}t |ƒD ]R\}}|  ||¡}|jd u rV|t|ƒd krVt dt|ƒ¡|dd …  }||7 }q|| S )NrŽ   r5   rŠ   r8   )Ú	enumerateZi2mr‡   ÚlenÚstructÚpack)r�   r–   rž   ÚvalÚresÚiÚvÚxrv   rv   rw   Úaddfieldó   s    
z_NextPacketListField.addfieldN)rr   rs   rt   rª   rv   rv   rv   rw   r    ò   s   r    c                   @   s   e Zd Zedg eƒgZdS )rl   ÚfilesN)rr   rs   rt   r    r†   ru   rv   rv   rv   rw   rl   þ   s   
ÿc                   @   s   e Zd ZeddƒgZdS )ri   ZIndexNumberr   N©rr   rs   rt   r   ru   rv   rv   rv   rw   ri     s   ÿc                   @   s@   e Zd Zeddƒeddƒeddƒeddƒeddƒed	dƒgZd
S )rh   r‚   r_   Z	EndOfFiler   ZNumberOfLinksr5   ZDeletePendingZ	DirectoryÚReservedN)rr   rs   rt   r   r   r   r   ru   rv   rv   rv   rw   rh     s   úc                	   @   sF   e Zd Zeddƒeddddd�eddƒed	dƒedd
dd„ d�gZdS )ÚFileStreamInformationr‡   r   ÚStreamNameLengthNZ
StreamNamerŠ   ©r�   r}   Z
StreamSizeZStreamAllocationSizes   ::$DATAc                 C   s   | j S r”   )r¯   r•   rv   rv   rw   r—   "  rŽ   zFileStreamInformation.<lambda>r˜   )rr   rs   rt   r   r
   r   r   ru   rv   rv   rv   rw   r®     s   ÿûr®   c                   @   s˜   e Zd Zeddƒeddƒedddg d¢ƒeddƒed	dƒed
dƒeddƒeeddƒdd„ ƒeeddƒdd„ ƒeeddƒdd„ ƒeeddƒdd„ ƒgZdS )ÚSECURITY_DESCRIPTORZRevisionr5   ZSbz1r   ÚControléðÿÿÿ)ZSelfRelativeZRMControlValidZSACLProtectedZDACLProtectedZSACLAutoInheritedZDACLAutoInheriterZSACLComputerZDACLComputerZServerSecurityZDACLTrustedZSACLDefaultedÚSACLPresentZDACLDefaultedÚDACLPresentZGroupDefaultedZOwnerDefaultedÚOffsetOwnerÚOffsetGroupZ
OffsetSaclZ
OffsetDaclZOwnerSidrŽ   c                 C   s   | j S r”   )r¶   r•   rv   rv   rw   r—   D  rŽ   zSECURITY_DESCRIPTOR.<lambda>ZGroupSidc                 C   s   | j S r”   )r·   r•   rv   rv   rw   r—   H  rŽ   ZSaclc                 C   s   | j jS r”   )r²   r´   r•   rv   rv   rw   r—   L  rŽ   ZDaclc                 C   s   | j jS r”   )r²   rµ   r•   rv   rv   rw   r—   P  rŽ   N)	rr   rs   rt   r   r   r   r	   r&   ru   rv   rv   rv   rw   r±   (  s0   þþþþÛr±   c                   @   sr   e Zd Ze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œƒeddƒeddd d!d"�ed d#d$d%„ d&�gZdS )'ÚFileFsAttributeInformationZFileSystemAttributesi € r„   ZFILE_SUPPORTS_USN_JOURNALZFILE_SUPPORTS_OPEN_BY_FILE_IDZ!FILE_SUPPORTS_EXTENDED_ATTRIBUTESZFILE_SUPPORTS_HARD_LINKSZFILE_SUPPORTS_TRANSACTIONSZFILE_SEQUENTIAL_WRITE_ONCEZFILE_READ_ONLY_VOLUMEZFILE_NAMED_STREAMSZFILE_SUPPORTS_ENCRYPTIONZFILE_SUPPORTS_OBJECT_IDSZFILE_VOLUME_IS_COMPRESSEDZFILE_SUPPORTS_REMOTE_STORAGEZFILE_SUPPORTS_REPARSE_POINTSZFILE_SUPPORTS_SPARSE_FILESZFILE_VOLUME_QUOTASZFILE_FILE_COMPRESSIONZFILE_PERSISTENT_ACLSZFILE_UNICODE_ON_DISKZFILE_CASE_PRESERVED_NAMESZFILE_CASE_SENSITIVE_SEARCHZFILE_SUPPORT_INTEGRITY_STREAMSZFILE_SUPPORTS_BLOCK_REFCOUNTINGZFILE_SUPPORTS_SPARSE_VDL)é   é   é  € rg   é    rf   re   rd   rc   é   rb   r[   rZ   rI   rH   rD   r<   r8   r6   r5   i   i   é   ZMaximumComponentNameLengthéÿ   ÚFileSystemNameLengthNZFileSystemNamerŠ   r°   s   NTFSc                 C   s   | j S r”   )rÀ   r•   rv   rv   rw   r—   v  rŽ   z#FileFsAttributeInformation.<lambda>r˜   )rr   rs   rt   r   r   r
   r   ru   rv   rv   rv   rw   r¸   W  sB   éÿÿãr¸   c                   @   s0   e Zd ZeddƒeddƒeddƒeddƒgZd	S )
ÚFileFsSizeInformationZTotalAllocationUnitsi    ZAvailableAllocationUnitsrf   ZSectorsPerAllocationUnitr<   ZBytesPerSectorr\   N)rr   rs   rt   r   r   ru   rv   rv   rv   rw   rÁ   |  s
   ürÁ   c                   @   sL   e Zd Zedddg d¢dd�eddƒed	dƒed
dƒeddƒeddƒgZdS )ÚFileFsVolumeInformationZVolumeCreationTimeNry   rz   r{   r|   ZVolumeSerialNumberr   ZVolumeLabelLengthZSupportsObjectsr5   r­   ZVolumeLabeló   C)rr   rs   rt   r!   r   r   r    ru   rv   rv   rv   rw   rÂ   ‡  s   þørÂ   c           
   	      s>  |  ¡ D �].\‰ }z8t‡ fdd„| jd D ƒƒ}|  d¡jˆ   | |¡}W n ty`   d}Y n0 d}dd„ }|  ˆ d ¡du rÌ|  ˆ d ¡j}	|d|| … t	 
d	||	ƒ |¡ |||	 d…  }||	7 }|  ˆ d
 ¡du �r0|  ˆ d
 ¡j}	|d|| … t	 
d	||	ƒ |¡ ||| |	 d…  }||	7 }||7 }q|S )z:Util function to build the offset and populate the lengthsc                 3   s"   | ]}|d  ˆ kr|d V  qdS )r   r5   Nrv   )Ú.0r©   ©Ú
field_namerv   rw   Ú	<genexpr>˜  rŽ   z#_SMB2_post_build.<locals>.<genexpr>ÚBufferr   c                 S   s   ddddœ|  S )NÚHÚIÚQ)r6   r8   r<   rv   )Úyrv   rv   rw   r—   ž  rŽ   z"_SMB2_post_build.<locals>.<lambda>ZBufferOffsetNz<%sZLen)ÚitemsÚnextÚfieldsÚ	get_fieldZ
fields_mapZi2lenÚStopIterationZgetfieldvalÚszr£   r¤   )
r�   ÚpZ
pay_offsetrÏ   ÚoffsetÚvaluer‘   r§   ÚrrÒ   rv   rÅ   rw   Ú_SMB2_post_build”  s@    ÿÿÿ
ÿÿÿÿ
r×   c                       sÚ   e Zd ZdZedddƒeddƒeddƒed	deƒed
de	ƒeddƒe
ddddddddddœƒeddƒeddƒeeddƒdd„ ƒeeddƒdd„ ƒeeddƒdd„ ƒeddƒeddd d!�gZd"Z‡ fd#d$„Zd%d&„ Z‡  ZS )'ÚSMB2_HeaderzSMB2 HeaderÚStarts   þSMBr8   ÚStructureSizerI   ZCreditCharger   ÚStatusÚCommandZCreditsRequestedÚFlagsr„   ÚSMB2_FLAGS_SERVER_TO_REDIRÚSMB2_FLAGS_ASYNC_COMMANDZSMB2_FLAGS_RELATED_OPERATIONSZSMB2_FLAGS_SIGNEDZSMB2_FLAGS_DFS_OPERATIONSZSMB2_FLAGS_REPLAY_OPERATION)r5   r6   r8   r<   r¾   é    ÚNextCommandZMIDZAsyncIdc                 C   s   | j jS r”   ©rÝ   rß   r•   rv   rv   rw   r—   Ç  rŽ   zSMB2_Header.<lambda>ZPIDc                 C   s
   | j j S r”   râ   r•   rv   rv   rw   r—   Ë  rŽ   ZTIDc                 C   s
   | j j S r”   râ   r•   rv   rv   rw   r—   Î  rŽ   Z	SessionIdÚSecuritySignaturerD   r�   )r   r2   r4   r3   r1   c                    s   | j jr| jtjvrtS | jdkr2| j jr.tS tS | jdkrL| j jrHt	S t
S | jdkrf| j jrbtS tS | jdkr€| j jr|tS tS | jdkrš| j jr–tS tS | jdkr´| j jr°tS tS | jdkrÎ| j jrÊtS tS | jdk� rê| j jrætS tS | jd	k�r| j j�rtS tS | jd
k�rtS | jdk�r6| j j�r2tS tS | jdk�rT| j j�rPtS tS | jdk�rr| j j�rntS tS | jdk�r�| j j�rŒt S t!S t"t| ƒ #|¡S )Nr   r5   r6   r7   r8   r9   r:   r<   r=   r@   rB   rC   rD   r?   )$rÝ   rÞ   rÛ   rØ   Ú_SMB2_OK_RETURNCODESÚSMB2_Error_ResponserÜ   Ú SMB2_Negotiate_Protocol_ResponseÚSMB2_Negotiate_Protocol_RequestÚSMB2_Session_Setup_ResponseÚSMB2_Session_Setup_RequestÚSMB2_Session_Logoff_ResponseÚSMB2_Session_Logoff_RequestÚSMB2_Tree_Connect_ResponseÚSMB2_Tree_Connect_RequestÚSMB2_Tree_Disconnect_ResponseÚSMB2_Tree_Disconnect_RequestÚSMB2_Create_ResponseÚSMB2_Create_RequestÚSMB2_Close_ResponseÚSMB2_Close_RequestÚSMB2_Read_ResponseÚSMB2_Read_RequestÚSMB2_Write_ResponseÚSMB2_Write_RequestÚSMB2_Cancel_RequestÚSMB2_Query_Directory_ResponseÚSMB2_Query_Directory_RequestÚSMB2_Change_Notify_ResponseÚSMB2_Change_Notify_RequestÚSMB2_Query_Info_ResponseÚSMB2_Query_Info_RequestÚSMB2_IOCTL_ResponseÚSMB2_IOCTL_RequestÚsuperÚguess_payload_class©r�   Úpayload©Ú	__class__rv   rw   r  Ý  st    











zSMB2_Header.guess_payload_classc           	      C   sÖ   d| _ t| ƒ}t|ƒdkr(t d¡ |S |dkr:tdƒ‚n’|dv r~ddlm} dd	lm	} | 
| |¡¡}| |¡ | ¡ }nN|d
v r®ddlm} ||ƒ |¡}|d d… }nt d| ¡ |d d… d }|| _ d S )Ns                   rI   z Cannot sign invalid SMB packet !r0   zSMB 3.1.1 signing unimplemented)r.   r/   r   )Úcmac)Ú
algorithms)r-   r,   )ÚHmac_SHA256rD   z%Unknown SMB Version %s ! Cannot sign.r³   )rã   Úbytesr¢   r   ÚwarningÚ	ExceptionZcryptography.hazmat.primitivesr  Z&cryptography.hazmat.primitives.ciphersr  ZCMACZAESÚupdateÚfinalizeZscapy.layers.tls.crypto.h_macr	  Údigest)	r�   ÚdialectZSigningSessionKeyrž   r  r  ÚcÚsigr	  rv   rv   rw   Úsign  s,    



ÿzSMB2_Header.sign)rr   rs   rt   Únamer   r   r   ÚSTATUS_ERREFr   ÚSMB2_COMr   r#   r   r	   r   r'   ru   rä   r  r  Ú__classcell__rv   rv   r  rw   rØ   ±  sF   


úþþþâ!	=rØ   c                       s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )Ú_SMB2_Payloadc                    sl   | j rXt| j tƒrX| j jrX| j jdt| jƒ  }|rX|  t |d |… ¡¡ ||d … }t	t
| ƒ |¡ d S ©NrI   )Ú
underlayerÚ
isinstancerØ   rá   r¢   Zraw_packet_cacheZadd_payloadr   r›   r  r  Údo_dissect_payload)r�   rž   Úpadlenr  rv   rw   r  4  s    z _SMB2_Payload.do_dissect_payloadc                 C   s"   | j rt| j tƒr| j jrtS tS r”   )r  r  rØ   rá   r(   rœ   rv   rv   rw   r  >  s    z!_SMB2_Payload.guess_payload_class)rr   rs   rt   r  r  r  rv   rv   r  rw   r  3  s   
r  c                	   @   sJ   e Zd ZdZeddƒeddƒeddƒeddd	d
d�ed
ddd„ d�gZdS )rå   zSMB2 Error ResponserÚ   r=   ZErrorContextCountr   r­   Ú	ByteCountNrŠ   Z	ErrorDatarŒ   rŽ   c                 C   s   | j S r”   )r  r•   rv   rv   rw   r—   T  rŽ   zSMB2_Error_Response.<lambda>r˜   )	rr   rs   rt   r  r%   r   r
   r&   ru   rv   rv   rv   rw   rå   H  s   ýÿ÷rå   r5   )rÝ   c                   @   s4   e Zd ZdZeddeƒeddddd�eddƒgZd	S )
ÚSMB2_Negotiate_ContextzSMB2 Negotiate ContextÚContextTyper   Z
DataLengthú<HÚDatarŒ   r­   N)	rr   rs   rt   r  r   ÚSMB2_NEGOTIATE_CONTEXT_TYPESr
   r   ru   rv   rv   rv   rw   r  a  s
   
ýr  c                   @   sÂ   e Zd ZdZeddƒeddddd�ed	d
ddddœƒedd
ƒedd
deƒe	dd
e	j
d�edd
ƒeddddd�edd
ƒeddgedd
eƒdd„ d�eedg eeddeƒdƒdd„ d�d d„ ƒgZdS )!rç   zSMB2 Negotiate Protocol RequestrÚ   é$   ÚDialectCountNr!  ÚDialects©r}   Zcount_ofÚSecurityModer   r³   ZSMB2_NEGOTIATE_SIGNING_ENABLEDZSMB2_NEGOTIATE_SIGNING_REQUIRED©r5   r6   r­   ÚCapabilitiesr„   Z
ClientGUID©Zuuid_fmtÚNegotiateContextOffsetÚNegotiateCountÚNegotiateContextsr…   r,   Ú c                 C   s   | j S r”   )r%  r•   rv   rv   rw   r—   ˆ  rŽ   z(SMB2_Negotiate_Protocol_Request.<lambda>©Z
count_fromÚContextr<   c                 C   s   | j S r”   ©r-  r•   rv   rv   rw   r—   ‘  rŽ   c                 C   s
   d| j v S ©Nr0   )r&  ©r©   rv   rv   rw   r—   ’  rŽ   )rr   rs   rt   r  r%   r
   r   r   ÚSMB2_CAPABILITIESr"   Ú	FORMAT_LEr#   r   r   r   ÚSMB_DIALECTSr	   r   r   r  ru   rv   rv   rv   rw   rç   j  sJ   ýþý
ýÿüúàrç   )rÜ   c                
   @   sh   e Zd ZdZeddddd�edddd	d
�eddgeddddiƒdd„ d�ed	ddd„ d�gZdd„ Z	dS )Ú#SMB2_Preauth_Integrity_Capabilitiesz#SMB2 Preauth Integrity CapabilitiesÚHashAlgorithmCountr5   r!  ZHashAlgorithmsr'  Ú
SaltLengthr   ZSaltrŒ   r/  zSHA-512c                 C   s   | j S r”   )r9  r•   rv   rv   rw   r—   ®  rŽ   z,SMB2_Preauth_Integrity_Capabilities.<lambda>r0  c                 C   s   | j S r”   )r:  r•   rv   rv   rw   r—   ¯  rŽ   r˜   c                 C   s   t jS r”   rš   r  rv   rv   rw   rŸ   ²  s    z9SMB2_Preauth_Integrity_Capabilities.default_payload_classN)
rr   rs   rt   r  r
   r   r   r&   ru   rŸ   rv   rv   rv   rw   r8     s   ýþýór8  )r   c                
   @   sL   e Zd ZdZeddddd�eddgeddd	d
dœƒdd„ d�gZdd„ ZdS )ÚSMB2_Encryption_CapabilitieszSMB2 Encryption CapabilitiesÚCipherCountr5   r!  ZCiphersr'  r/  r   zAES-128-CCMzAES-128-GCMr)  c                 C   s   | j S r”   )r<  r•   rv   rv   rw   r—   È  rŽ   z%SMB2_Encryption_Capabilities.<lambda>r0  c                 C   s   t jS r”   rš   r  rv   rv   rw   rŸ   Ë  s    z2SMB2_Encryption_Capabilities.default_payload_classN)	rr   rs   rt   r  r
   r   r   ru   rŸ   rv   rv   rv   rw   r;  ¿  s   þýü
r;  r6   c                
   @   s\   e Zd ZdZeddddd�eddƒeddd	d
dœƒeddedde	ƒdd„ d�gZ
dd„ ZdS )ÚSMB2_Compression_CapabilitieszSMB2 Compression CapabilitiesÚCompressionAlgorithmCountr   r!  ZCompressionAlgorithmsr'  ÚPaddingrÝ   Z'SMB2_COMPRESSION_CAPABILITIES_FLAG_NONEZ*SMB2_COMPRESSION_CAPABILITIES_FLAG_CHAINED©r   r5   Nr/  c                 C   s   | j S r”   )r>  r•   rv   rv   rw   r—   é  rŽ   z&SMB2_Compression_Capabilities.<lambda>r0  c                 C   s   t jS r”   rš   r  rv   rv   rw   rŸ   í  s    z3SMB2_Compression_Capabilities.default_payload_class)rr   rs   rt   r  r
   r   r   r   r   ÚSMB2_COMPRESSION_ALGORITHMSru   rŸ   rv   rv   rv   rw   r=  Ø  s&   ýþ
üõr=  r7   c                   @   s$   e Zd ZdZeddƒgZdd„ ZdS )Ú!SMB2_Netname_Negotiate_Context_IDz!SMB2 Netname Negotiate Context IDZNetNamer/  c                 C   s   t jS r”   rš   r  rv   rv   rw   rŸ      s    z7SMB2_Netname_Negotiate_Context_ID.default_payload_classN)rr   rs   rt   r  r   ru   rŸ   rv   rv   rv   rw   rB  ú  s   ÿrB  r9   c                   @   s,   e Zd ZdZedddddiƒgZdd„ Zd	S )
ÚSMB2_Transport_CapabilitieszSMB2 Transport CapabilitiesrÝ   r   r„   r5   Z$SMB2_ACCEPT_TRANSPORT_LEVEL_SECURITYc                 C   s   t jS r”   rš   r  rv   rv   rw   rŸ     s    z1SMB2_Transport_Capabilities.default_payload_classN)rr   rs   rt   r  r   ru   rŸ   rv   rv   rv   rw   rC    s   ÿÿrC  r:   c                   @   s  e Zd ZdZeddƒedddddd	œƒed
deƒeddddd�e	dde	j
d�edddeƒeddƒeddƒeddƒedddg d¢dd�edddg d¢dd�eddddd d!„ d"�ed#ddd$d%�ed&dƒedd'd(d!„ d)�ed$ded*d!„ d)�eedg eed+deƒd,ƒd-d!„ d.�d/d!„ ƒgZdS )0ræ   z SMB2 Negotiate Protocol ResponserÚ   éA   r(  r   r³   úSigning RequiredúSigning Enabledr)  ÚDialectRevisionr-  Nr!  r.  r'  ZGUIDr+  r*  r„   ZMaxTransactionSizer½   ZMaxReadSizeZMaxWriteSizeZ
ServerTimery   rz   r{   r|   ZServerStartTimeÚSecurityBlobOffsetZSecurityBlobPadc                 C   s   |d S ©NrZ   rv   )r–   r©   rv   rv   rw   r—   B  rŽ   z)SMB2_Negotiate_Protocol_Response.<lambda>)r}   r�   ÚadjustÚSecurityBlobLengthÚSecurityBlobrŒ   r,  r/  c                 C   s
   | j d S rI  )rH  r•   rv   rv   rw   r—   K  rŽ   r˜   c                 C   s   | j S r”   )rK  r4  rv   rv   rw   r—   M  rŽ   r1  r<   c                 C   s   | j S r”   r2  r•   rv   rv   rw   r—   U  rŽ   r0  c                 C   s
   | j dkS r3  )rG  r4  rv   rv   rw   r—   V  rŽ   )rr   rs   rt   r  r%   r   r   r7  r
   r"   r6  r5  r   r!   r#   r&   r   r)   r	   r   r   r   r  ru   rv   rv   rv   rw   ræ   #  sp   þ
ýÿþþüýÿÿÿüúÕræ   )rÜ   rÝ   c                       s¨   e Zd ZdZdZdZeddƒedddd	gƒed
dddddœƒedddeƒe	ddƒeddƒe
ddƒeddƒedeeddeƒgƒg	Z‡ fdd„Z‡ fdd„Zdd„ Z‡  ZS )ré   zSMB2 Session Setup RequestéX   rÈ   rÚ   é   rÝ   r   éøÿÿÿZSMB2_SESSION_FLAG_BINDINGr(  rE  rF  r)  r*  r„   ÚChannelÚSecurityBufferOffsetNÚSecurityLenZPreviousSessionIdÚSecurityc                    s6   |dkr&t t| ƒ d¡pdgd d S t t| ƒ |¡S ©NrL  rÈ   )NNr   r5   )r  ré   Ú__getattr__©r�   Úattrr  rv   rw   rU  {  s    
ÿþþz&SMB2_Session_Setup_Request.__getattr__c                    s2   |dkr t t| ƒ dd|fg¡S t t| ƒ ||¡S ©NrL  rÈ   rS  )r  ré   Úsetfieldval©r�   rW  r¥   r  rv   rw   rY  ƒ  s
    

ÿz&SMB2_Session_Setup_Request.setfieldvalc                 C   s   t | || jddiƒ| S )NrS  r@   ©r×   ÚOFFSET©r�   r–   Zpayrv   rv   rw   Ú
post_buildŠ  s
    
ÿþz%SMB2_Session_Setup_Request.post_build)rr   rs   rt   r  r\  Ú_NTLM_PAYLOAD_FIELD_NAMEr%   r   r5  r   r   r$   r*   r   r)   ru   rU  rY  r^  r  rv   rv   r  rw   ré   e  s.   þ
ÿÿôré   c                       s€   e Zd ZdZdZdZeddƒedddd	d
ddœƒeddƒeddƒe	dee
ddeƒgƒgZ‡ fdd„Z‡ fdd„Zdd„ Z‡  ZS )rè   zSMB2 Session Setup ResponseéH   rÈ   rÚ   r=   ZSessionFlagsr   r³   ZIS_GUESTZIS_NULLZENCRYPT_DATE©r5   r6   r8   rQ  NrR  rS  c                    s6   |dkr&t t| ƒ d¡pdgd d S t t| ƒ |¡S rT  )r  rè   rU  rV  r  rv   rw   rU  ­  s    
ÿþþz'SMB2_Session_Setup_Response.__getattr__c                    s2   |dkr t t| ƒ dd|fg¡S t t| ƒ ||¡S rX  )r  rè   rY  rZ  r  rv   rw   rY  µ  s
    

ÿz'SMB2_Session_Setup_Response.setfieldvalc                 C   s   t | || jddiƒ| S )NrS  r8   r[  r]  rv   rv   rw   r^  ¼  s
    
ÿþz&SMB2_Session_Setup_Response.post_build)rr   rs   rt   r  r\  r_  r%   r   r   r*   r   r)   ru   rU  rY  r^  r  rv   rv   r  rw   rè   š  s(   ý
ÿÿ÷rè   c                   @   s$   e Zd ZdZeddƒeddƒgZdS )rë   úSMB2 LOGOFF RequestrÚ   r8   Úreservedr   N©rr   rs   rt   r  r%   r   ru   rv   rv   rv   rw   rë   Í  s   þrë   c                   @   s$   e Zd ZdZeddƒeddƒgZdS )rê   rb  rÚ   r8   rc  r   Nrd  rv   rv   rv   rw   rê   Þ  s   þrê   c                
   @   s^   e Zd ZdZdZdZeddƒedddg d	¢ƒed
dƒeddƒe	dee
ddƒgƒgZdd„ ZdS )rí   zSMB2 TREE_CONNECT Requestr`  rÈ   rÚ   r=   rÝ   r   r³   )ZCLUSTER_RECONNECTÚREDIRECT_TO_OWNERZEXTENSION_PRESENTZPathBufferOffsetNZPathLenÚPathrŽ   c                 C   s   t | || jddiƒ| S )Nrf  r8   r[  r]  rv   rv   rw   r^    s
    
ÿþz$SMB2_Tree_Connect_Request.post_build)rr   rs   rt   r  r\  r_  r%   r   r   r*   r   ru   r^  rv   rv   rv   rw   rí   ð  s   ÿÿùrí   ZFILE_LIST_DIRECTORYZFILE_ADD_FILEZFILE_ADD_SUBDIRECTORYZFILE_READ_EAZFILE_WRITE_EAZFILE_TRAVERSEZFILE_DELETE_CHILDZFILE_READ_ATTRIBUTESZFILE_WRITE_ATTRIBUTESÚDELETEZREAD_CONTROLZ	WRITE_DACZWRITE_OWNERZSYNCHRONIZEZACCESS_SYSTEM_SECURITYZMAXIMUM_ALLOWEDZGENERIC_ALLZGENERIC_EXECUTEZGENERIC_WRITEZGENERIC_READ)r5   r6   r8   r<   rD   rH   rI   rZ   r[   r½   rc   rd   re   rf   rº   r¹   r¾   rà   i   @l        c                   @   sˆ   e Zd ZdZeddƒedddddd	œƒed
dƒedddddddddddddddddddœƒedddddd d!d"d#d$œƒed%ddeƒgZ	d&S )'rì   zSMB2 TREE_CONNECT ResponserÚ   rD   Ú	ShareTyper   ZDISKÚPIPEZPRINT)r5   r6   r7   r­   Z
ShareFlagsé0   r„   ZAUTO_CACHINGZVDO_CACHINGZ
NO_CACHINGrG   ZDFS_ROOTZRESTRICT_EXCLUSIVE_OPENSZFORCE_SHARED_DELETEZALLOW_NAMESPACE_CACHINGZACCESS_BASED_DIRECTORY_ENUMZFORCE_LEVELII_OPLOCKZENABLE_HASH_V1ZENABLE_HASH_V2ZENCRYPT_DATAZIDENTITY_REMOTINGZCOMPRESS_DATA)rD   rH   rj  r5   r6   r[   r\   r]   r^   r_   r`   ra   rb   rd   rf   r*  ZCONTINUOUS_AVAILABILITYZSCALEOUTZCLUSTERZ
ASYMMETRICre  )r<   rD   rH   rI   rZ   r[   ÚMaximalAccessN)
rr   rs   rt   r  r%   r   r   r   ÚSMB2_ACCESS_FLAGSru   rv   rv   rv   rw   rì   *  sD   þñúárì   c                   @   s$   e Zd ZdZeddƒeddƒgZdS )rï   zSMB2 TREE_DISCONNECT RequestrÚ   r8   r­   r   N©rr   rs   rt   r  r%   ru   rv   rv   rv   rw   rï   Y  s   þrï   r8   c                   @   s$   e Zd ZdZeddƒeddƒgZdS )rî   zSMB2 TREE_DISCONNECT ResponserÚ   r8   r­   r   Nrm  rv   rv   rv   rw   rî   j  s   þrî   c                   @   s0   e Zd ZeddƒeddƒgZdd„ Zdd„ ZdS )	ÚSMB2_FILEIDÚ
Persistentr   ÚVolatilec                 C   s   | j | j d> S r  )ro  rp  )r�   rv   rv   rw   Ú__hash__ƒ  s    zSMB2_FILEID.__hash__c                 C   s   t jS r”   rš   r  rv   rv   rw   rŸ   †  s    z!SMB2_FILEID.default_payload_classN)rr   rs   rt   r$   ru   rq  rŸ   rv   rv   rv   rw   rn  }  s
   þrn  c                   @   s   e Zd Zedddd�gZdS )Ú#SMB2_CREATE_DURABLE_HANDLE_RESPONSEr­   s           r<   r�   N©rr   rs   rt   r'   ru   rv   rv   rv   rw   rr  Œ  s   ÿrr  c                   @   s&   e Zd ZeddeƒedddeƒgZdS )Ú)SMB2_CREATE_QUERY_MAXIMAL_ACCESS_RESPONSEZQueryStatusr   rk  r„   N)rr   rs   rt   r   r  r   rl  ru   rv   rv   rv   rw   rt  ’  s   
þrt  c                   @   s,   e Zd Zeddƒeddƒedddd�gZdS )	ÚSMB2_CREATE_QUERY_ON_DISK_IDZ
DiskFileIdr   ZVolumeIdr­   rŽ   rD   r�   N)rr   rs   rt   r   r'   ru   rv   rv   rv   rw   ru  ™  s   ýru  c                	   @   sJ   e Zd Zedddd�eddddd	d
dœƒeddddddœƒeddƒgZdS )ÚSMB2_CREATE_RESPONSE_LEASEZLeaseKeyrŽ   rD   r�   Z
LeaseStater;   r„   ZSMB2_LEASE_READ_CACHINGZSMB2_LEASE_HANDLE_CACHINGZSMB2_LEASE_WRITE_CACHINGra  Z
LeaseFlagsr   Z!SMB2_LEASE_FLAG_BREAK_IN_PROGRESSZ$SMB2_LEASE_FLAG_PARENT_LEASE_KEY_SET)r6   r8   ZLeaseDurationN)rr   rs   rt   r'   r   r   ru   rv   rv   rv   rw   rv  ¡  s   ýþõrv  c                   @   s.   e Zd Zeedddd�eddƒeddƒgZdS )	ÚSMB2_CREATE_RESPONSE_LEASE_V2ZParentLeaseKeyrŽ   rD   r�   ZEpochr   r­   N)rr   rs   rt   rv  r'   r   ru   rv   rv   rv   rw   rw  ±  s
   ürw  c                   @   s(   e Zd ZeddƒedddddiƒgZdS )Ú&SMB2_CREATE_DURABLE_HANDLE_RESPONSE_V2ÚTimeoutr   rÝ   r„   r6   ÚSMB2_DHANDLE_FLAG_PERSISTENTN)rr   rs   rt   r   r   ru   rv   rv   rv   rw   rx  º  s
   ÿþrx  c                   @   s   e Zd Zedddd�gZdS )Ú"SMB2_CREATE_DURABLE_HANDLE_REQUESTZDurableRequestrŽ   rD   r�   Nrs  rv   rv   rv   rw   r{  Å  s   ÿr{  c                   @   s   e Zd Zedeƒ eƒgZdS )Ú$SMB2_CREATE_DURABLE_HANDLE_RECONNECTr"  N)rr   rs   rt   r   rn  ru   rv   rv   rv   rw   r|  Ë  s   ÿr|  c                   @   s   e Zd ZeddƒgZdS )Ú(SMB2_CREATE_QUERY_MAXIMAL_ACCESS_REQUESTÚ	Timestampr   Nr¬   rv   rv   rv   rw   r}  Ñ  s   ÿr}  c                   @   s   e Zd ZeddƒgZdS )ÚSMB2_CREATE_ALLOCATION_SIZEr‚   r   Nr¬   rv   rv   rv   rw   r  ×  s   ÿr  c                   @   s   e Zd ZeddƒgZdS )ÚSMB2_CREATE_TIMEWARP_TOKENr~  r   Nr¬   rv   rv   rv   rw   r€  Ý  s   ÿr€  c                   @   s   e Zd ZegZdS )ÚSMB2_CREATE_REQUEST_LEASEN)rr   rs   rt   rv  ru   rv   rv   rv   rw   r�  ã  s   ÿr�  c                   @   s   e Zd ZegZdS )ÚSMB2_CREATE_REQUEST_LEASE_V2N)rr   rs   rt   rw  ru   rv   rv   rv   rw   r‚  é  s   ÿr‚  c                   @   s,   e Zd Zeedddd�eddejd�gZdS )	Ú%SMB2_CREATE_DURABLE_HANDLE_REQUEST_V2r­   rŽ   r<   r�   Ú
CreateGuidr   r+  N)rr   rs   rt   rx  r'   r"   r6  ru   rv   rv   rv   rw   rƒ  ï  s   ýrƒ  c                   @   s:   e Zd Zedeƒ eƒeddejd�edddddiƒgZd	S )
Ú'SMB2_CREATE_DURABLE_HANDLE_RECONNECT_V2r’   r„  r   r+  rÝ   r„   r6   rz  N)	rr   rs   rt   r   rn  r"   r6  r   ru   rv   rv   rv   rw   r…  ÷  s   ÿýr…  c                   @   s,   e Zd Zeddƒeddƒedddd�gZd	S )
ÚSMB2_CREATE_APP_INSTANCE_IDrÚ   é   r­   r   ZAppInstanceIdrŽ   rD   r�   N)rr   rs   rt   r%   r   r'   ru   rv   rv   rv   rw   r†    s   ýr†  c                   @   s8   e Zd ZeddƒeddƒeddƒeddƒeddƒgZdS )	Ú SMB2_CREATE_APP_INSTANCE_VERSIONrÚ   r�   r­   r   r?  ZAppInstanceVersionHighZAppInstanceVersionLowN)rr   rs   rt   r%   r   r   r   ru   rv   rv   rv   rw   rˆ  	  s   ûrˆ  c                   @   s¢   e Zd ZdZdZdZeddƒeddƒeddƒe	dd	ƒed
dƒeddƒe
deedddd„ d�eddejdd„ d�gƒedddd„ d�gZdd„ Zdd„ Zdd„ ZdS )ÚSMB2_Create_ContextzSMB2 CREATE CONTEXTrB   rÈ   r‡   NÚNameBufferOffsetÚNameLenr­   r   ÚDataBufferOffsetÚDataLenÚNamerŽ   c                 C   s   | j S r”   )r‹  r•   rv   rv   rw   r—   !  rŽ   zSMB2_Create_Context.<lambda>r˜   r"  c                 C   s   | j S r”   ©r�  r•   rv   rv   rw   r—   #  rŽ   Úpadc                 C   s*   | j r&| j t| j| j | j| j ƒ S dS ©Nr   )r‡   ÚmaxrŒ  r�  rŠ  r‹  r4  rv   rv   rw   r—   &  s    ý
ÿÿÿc                 C   sÂ   | j s
|S zŽt| jtƒrTtttttt	t
ttttdœ| j }| jdkr–| j dkr–t}nBt| jtƒr�ttt	ttdœ| j }| jdkr–| j dkr–t}n|W S W n ty®   | Y S 0 || jjƒ| _|S )N)ó   DHnQs   DHnCs   AISió   MxAcs   TWrpó   QFidó   RqLsó   DH2Qs   DH2Cs   E¼¦jï§÷J�úF.Mts   ¹‚Ð·;VO {RJ� r–  rH   )r“  r”  r•  r–  r—  )r�  r  Úparentrñ   r{  r|  r  r}  r€  ru  r�  rƒ  r…  r†  rˆ  rŽ  r‚  rð   rr  rt  rv  rx  rw  ÚKeyErrorr"  Úload)r�   rž   Zdata_clsrv   rv   rw   Úpost_dissect,  sH    ôóûú

z SMB2_Create_Context.post_dissectc                 C   s   t jS r”   rš   )r�   Ú_rv   rv   rw   rŸ   R  s    z)SMB2_Create_Context.default_payload_classc                 C   s   t | || jdddœƒ| S )Nr8   r>   )rŽ  r"  r[  r]  rv   rv   rw   r^  U  s    
þýzSMB2_Create_Context.post_build)rr   rs   rt   r  r\  r_  r   r%   r   r   r*   r   r   r   Ú	raw_layerru   r›  rŸ   r^  rv   rv   rv   rw   r‰    s4   ÿ
ÿýÿÿò&r‰  ZSMB2_OPLOCK_LEVEL_NONEZSMB2_OPLOCK_LEVEL_IIZSMB2_OPLOCK_LEVEL_EXCLUSIVEZSMB2_OPLOCK_LEVEL_BATCHZSMB2_OPLOCK_LEVEL_LEASE)r   r5   r<   r=   r¿   c                #   @   s   e Zd ZdZdZdZeddƒeddƒedde	ƒe
d	dd
ddddœƒeddƒeddƒedddeƒedddeƒedddddddœƒe
ddddddd d!d"œƒed#ddd$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8œƒed9d:ƒed;d:ƒed<d:ƒed=d:ƒedeed>d?ƒed@g edAdB„ dC�gƒgZdDdE„ Zd:S )Frñ   zSMB2 CREATE Requestéx   rÈ   rÚ   é9   rh  r   ZRequestedOplockLevelZImpersonationLevelZ	AnonymousZIdentificationZImpersonationZDelegate©r   r5   r6   r7   ZSmbCreateFlagsr­   ZDesiredAccessr„   rƒ   rZ   ZShareAccessZFILE_SHARE_READZFILE_SHARE_WRITEZFILE_SHARE_DELETEra  ZCreateDispositionr5   ZFILE_SUPERSEDEZ	FILE_OPENZFILE_CREATEZFILE_OPEN_IFZFILE_OVERWRITEZFILE_OVERWRITE_IF)r   r5   r6   r7   r8   r9   ZCreateOptionsZFILE_DIRECTORY_FILEZFILE_WRITE_THROUGHZFILE_SEQUENTIAL_ONLYZFILE_NO_INTERMEDIATE_BUFFERINGZFILE_SYNCHRONOUS_IO_ALERTZFILE_SYNCHRONOUS_IO_NONALERTZFILE_NON_DIRECTORY_FILEZFILE_COMPLETE_IF_OPLOCKEDZFILE_RANDOM_ACCESSZFILE_DELETE_ON_CLOSEZFILE_OPEN_BY_FILE_IDZFILE_OPEN_FOR_BACKUP_INTENTZFILE_NO_COMPRESSIONZFILE_OPEN_REMOTE_INSTANCEZFILE_OPEN_REQUIRING_OPLOCKZFILE_DISALLOW_EXCLUSIVEZFILE_RESERVE_OPFILTERZFILE_OPEN_REPARSE_POINTZFILE_OPEN_NO_RECALLZFILE_OPEN_FOR_FREE_SPACE_QUERY)r5   r6   r8   r<   rD   rH   rI   r[   r\   r_   r`   ra   rb   r]   r½   rc   rf   r¼   rg   r»   rŠ  Nr‹  ÚCreateContextsBufferOffsetÚCreateContextsLenrŽ  rŽ   ÚCreateContextsc                 C   s   | j S r”   ©r¢  r•   rv   rv   rw   r—   ¥  rŽ   zSMB2_Create_Request.<lambda>r˜   c                 C   s   t | || jdddœƒ| S )Né,   rj  )rŽ  r£  r[  r]  rv   rv   rw   r^  ©  s    
þýzSMB2_Create_Request.post_build)rr   rs   rt   r  r\  r_  r%   r   r   ÚSMB2_OPLOCK_LEVELSr   r   r   rl  rƒ   r   r#   r   r*   r   r    r‰  ru   r^  rv   rv   rv   rw   rñ   h  s‚   
üýúìÿþÿË=rñ   c                   @   s”   e Zd ZdZdZdZeddƒeddeƒe	ddd	d
diƒe
dd
dddddœƒeedeƒ eƒeddƒeddƒedeedg edd„ d�gƒg	Zdd„ ZdS )rð   zSMB2 CREATE Responseé˜   rÈ   rÚ   éY   ZOplockLevelr   rÝ   rO  r5   ZSMB2_CREATE_FLAG_REPARSEPOINTZCreateActionZFILE_SUPERSEDEDZFILE_OPENEDZFILE_CREATEDZFILE_OVERWRITENr   r’   r¡  Nr¢  r£  c                 C   s   | j S r”   r¤  r•   rv   rv   rw   r—   Ð  rŽ   zSMB2_Create_Response.<lambda>r˜   c                 C   s   t | || jddiƒ| S )Nr£  éP   r[  r]  rv   rv   rw   r^  Ô  s
    
ÿþzSMB2_Create_Response.post_build)rr   rs   rt   r  r\  r_  r%   r   r¦  r   r   rk   r   rn  r#   r   r*   r    r‰  ru   r^  rv   rv   rv   rw   rð   »  s2   
üÿÿÿòrð   c                   @   s>   e Zd ZdZeddƒeddddgƒeddƒed	eƒ eƒgZ	d
S )ró   zSMB2 CLOSE RequestrÚ   r�   rÝ   r   r³   Ú SMB2_CLOSE_FLAG_POSTQUERY_ATTRIBr­   r’   N©
rr   rs   rt   r  r%   r   r   r   rn  ru   rv   rv   rv   rw   ró   å  s   ÿûró   c                   @   sT   e Zd ZdZdZdZdZdZdZe	ddƒe
ddddgƒeddƒgejd	d
…  Zd	S )rò   zSMB2 CLOSE Responser   rÚ   rp   rÝ   r³   rª  r­   Nr;   )rr   rs   rt   r  rƒ   rx   r   r€   r�   r%   r   r   rk   ru   rv   rv   rv   rw   rò   ù  s   ÿüûrò   c                   @   s°   e Zd ZdZdZdZeddƒeddƒeddd	d
ddœƒe	ddƒe
ddƒedeƒ eƒe	ddƒedddddddœƒe	ddƒeddƒeddƒedeedddd„ d�gƒgZd d!„ ZdS )"rõ   zSMB2 READ Requestép   rÈ   rÚ   é1   r?  r   rÝ   rO  ZSMB2_READFLAG_READ_UNBUFFEREDZ SMB2_READFLAG_REQUEST_COMPRESSEDr)  ZLengthÚOffsetr’   ZMinimumCountrP  ÚSMB2_CHANNEL_NONEÚSMB2_CHANNEL_RDMA_V1ÚSMB2_CHANNEL_RDMA_V1_INVALIDATEÚSMB2_CHANNEL_RDMA_TRANSFORMr   ÚRemainingBytesZReadChannelInfoBufferOffsetNÚReadChannelInfoLenÚReadChannelInforŽ   c                 C   s   | j S r”   )r´  r•   rv   rv   rw   r—   -  rŽ   zSMB2_Read_Request.<lambda>r˜   c                 C   s   t | || jddiƒ| S )Nrµ  r¥  r[  r]  rv   rv   rw   r^  1  s
    
ÿþzSMB2_Read_Request.post_build)rr   rs   rt   r  r\  r_  r%   r   r   r   r   r   rn  r   r   r*   r   ru   r^  rv   rv   rv   rw   rõ     s>   þüÿÿÿìrõ   r<   c                   @   sn   e Zd ZdZdZdZeddƒeddƒeddƒed	d
ƒe	dd
dddiƒe
deedddd„ d�gƒgZdd„ ZdS )rô   zSMB2 READ Responser©  rÈ   rÚ   rE   rŒ  Nr�  ZDataRemainingr   rÝ   r„   r5   Z%SMB2_READFLAG_RESPONSE_RDMA_TRANSFORMr"  rŽ   c                 C   s   | j S r”   r�  r•   rv   rv   rw   r—   P  rŽ   zSMB2_Read_Response.<lambda>r˜   c                 C   s   t | || jddiƒ| S )Nr"  r6   r[  r]  rv   rv   rw   r^  T  s
    
ÿþzSMB2_Read_Response.post_build)rr   rs   rt   r  r\  r_  r%   r   r   r   r*   r   ru   r^  rv   rv   rv   rw   rô   A  s&   ÿÿÿÿørô   c                   @   s¸   e Zd ZdZdZdZeddƒeddƒeddƒe	d	d
ƒe
deƒ eƒedd
dddddœƒedd
ƒeddƒeddƒedd
ddddœƒedeedddd„ d�eddd d„ d�gƒgZd!d"„ ZdS )#r÷   zSMB2 WRITE Requestr¬  rÈ   rÚ   r­  rŒ  Nr�  r®  r   r’   rP  r¯  r°  r±  r²  r   r³  ÚWriteChannelInfoBufferOffsetÚWriteChannelInfoLenrÝ   r„   ZSMB2_WRITEFLAG_WRITE_THROUGHZSMB2_WRITEFLAG_WRITE_UNBUFFEREDr)  r"  rŽ   c                 C   s   | j S r”   r�  r•   rv   rv   rw   r—   €  rŽ   zSMB2_Write_Request.<lambda>r˜   ÚWriteChannelInfoc                 C   s   | j S r”   )r·  r•   rv   rv   rw   r—   ‚  rŽ   c                 C   s   t | || jdddœƒ| S )Nr6   é(   )r"  r¸  r[  r]  rv   rv   rw   r^  †  s    
þýzSMB2_Write_Request.post_build)rr   rs   rt   r  r\  r_  r%   r   r   r   r   rn  r   r   r*   r   ru   r^  rv   rv   rv   rw   r÷   f  sB   üþÿÿýÿír÷   r=   c                   @   sD   e Zd ZdZeddƒeddƒeddƒeddƒeddƒed	dƒgZd
S )rö   zSMB2 WRITE ResponserÚ   rE   r­   r   ZCountZ	Remainingr¶  r·  N)rr   rs   rt   r  r%   r   r   ru   rv   rv   rv   rw   rö   —  s   úrö   c                   @   s$   e Zd ZdZeddƒeddƒgZdS )rø   zSMB2 CANCEL RequestrÚ   r8   r­   r   N)rr   rs   rt   r  r%   r   ru   rv   rv   rv   rw   rø   ­  s   þrø   c                   @   sB   e Zd ZdZejdd… ejdd… ddd…  ejd g ZdS )	Ú*SMB2_IOCTL_Validate_Negotiate_Info_Requestú"SMB2 IOCTL Validate Negotiate Infor8   r:   r5   r7   Néÿÿÿÿr=   )rr   rs   rt   r  rç   ru   rv   rv   rv   rw   rº  ¾  s   ÿ
þÿrº  c                   @   s   e Zd Zdd„ ZdS )Ú"_SMB2_IOCTL_Request_PacketLenFieldc                 C   s   |j dkrt|ƒS t |¡S ©Né )ÚCtlCoderº  r   r�  ©r�   r–   Úmrv   rv   rw   Úm2iÊ  s    
z&_SMB2_IOCTL_Request_PacketLenField.m2iN©rr   rs   rt   rÃ  rv   rv   rv   rw   r½  É  s   r½  c                   @   sî   e Zd ZdZdZdZdddœZeddƒed	d
ƒe	dd
ddddddddddddddddœƒe
deƒ eƒeddƒeddƒed d
ƒed!dƒed"dƒed#d
ƒed$d
d%d&d'iƒed(d
ƒedeed)dejd*d+„ d,�ed-dejd.d+„ d,�gƒgZd/d0„ ZdS )1r   zSMB2 IOCTL Requestrž  rÈ   )ÚInputLenÚalias)Ú	OutputLenrÆ  )ZIntputCountZOutputCountrÚ   rŸ  r­   r   rÀ  ZFSCTL_DFS_GET_REFERRALSZFSCTL_PIPE_PEEKZFSCTL_PIPE_WAITZFSCTL_PIPE_TRANSCEIVEZFSCTL_SRV_COPYCHUNKZFSCTL_SRV_ENUMERATE_SNAPSHOTSZFSCTL_SRV_REQUEST_RESUME_KEYZFSCTL_SRV_READ_HASHZFSCTL_SRV_COPYCHUNK_WRITEZFSCTL_LMR_REQUEST_RESILIENCYZ"FSCTL_QUERY_NETWORK_INTERFACE_INFOZFSCTL_SET_REPARSE_POINTZFSCTL_DFS_GET_REFERRALS_EXZFSCTL_FILE_LEVEL_TRIMZFSCTL_VALIDATE_NEGOTIATE_INFO)i” i@ i  iÀ iò@ id@ ix  i»A iò€ iÔ iü i¤ 	 i° i‚	 r¿  r’   ÚInputBufferOffsetNrÅ  ZMaxInputResponseÚOutputBufferOffsetrÇ  ZMaxOutputResponserÝ   r„   r5   ZSMB2_0_IOCTL_IS_FSCTLr…   ÚInputc                 C   s   | j S r”   ©rÅ  r•   rv   rv   rw   r—   û  rŽ   zSMB2_IOCTL_Request.<lambda>r˜   ÚOutputc                 C   s   | j S r”   ©rÇ  r•   rv   rv   rw   r—   þ  rŽ   c                 C   s   t | || jdddœƒ| S )Nr�   r$  ©rÊ  rÌ  r[  r]  rv   rv   rw   r^    s    
þýzSMB2_IOCTL_Request.post_build)rr   rs   rt   r  r\  r_  Zdeprecated_fieldsr%   r   r   r   rn  r   r   r*   r½  r   r�  ru   r^  rv   rv   rv   rw   r   Ð  sd   þñÿþþüÿá+r   r?   c                   @   s6   e Zd ZdZejdd… ddd… ejdd…  ZdS )Ú+SMB2_IOCTL_Validate_Negotiate_Info_Responser»  r8   r:   Nr¼  r5   r7   )rr   rs   rt   r  ræ   ru   rv   rv   rv   rw   rÏ    s
   ÿÿrÏ  c                   @   s   e Zd Zdd„ ZdS )Ú#_SMB2_IOCTL_Response_PacketLenFieldc                 C   s   |j dkrt|ƒS t |¡S r¾  )rÀ  rÏ  r   r�  rÁ  rv   rv   rw   rÃ    s    
z'_SMB2_IOCTL_Response_PacketLenField.m2iNrÄ  rv   rv   rv   rw   rÐ    s   rÐ  c                   @   s„   e Zd ZdZdZdZdZejdd… ejdd…  ejd	d
…  e	dee
ddejdd„ d�e
ddejdd„ d�gƒg Zdd„ ZdS )rÿ   zSMB2 IOCTL Responser¬  rÈ   r­  Nr:   r;   r=   r>   r@   rÊ  c                 C   s   | j S r”   rË  r•   rv   rv   rw   r—   2  rŽ   zSMB2_IOCTL_Response.<lambda>r˜   rÌ  c                 C   s   | j S r”   rÍ  r•   rv   rv   rw   r—   5  rŽ   c                 C   s   t | || jdddœƒ| S )Nr�   rH   rÎ  r[  r]  rv   rv   rw   r^  ;  s    
þýzSMB2_IOCTL_Response.post_build)rr   rs   rt   r  r\  r_  rÚ   r   ru   r*   rÐ  r   r�  r^  rv   rv   rv   rw   rÿ   %  s2   ÿþþþüÿÿþÿrÿ   c                   @   sŠ   e Zd ZdZdZdZeddƒeddeƒe	dd	d
dddddœƒe
dd	ƒedeƒ eƒeddƒeddƒe
ddƒedeeddƒgƒg	Zdd„ ZdS )rú   zSMB2 QUERY DIRECTORY Requesté`   rÈ   rÚ   é!   ZFileInformationClassr5   rÝ   r   rO  ZSMB2_RESTART_SCANSZSMB2_RETURN_SINGLE_ENTRYZSMB2_INDEX_SPECIFIEDZSMB2_REOPEN)r5   r6   r8   rD   rˆ   r’   ZFileNameBufferOffsetNZFileNameLenÚOutputBufferLengthr^   r‹   rŽ   c                 C   s   t | || jddiƒ| S )Nr‹   r�   r[  r]  rv   rv   rw   r^  e  s
    
ÿþz'SMB2_Query_Directory_Request.post_build)rr   rs   rt   r  r\  r_  r%   r   ÚFileInformationClassesr   r   r   rn  r   r*   r   ru   r^  rv   rv   rv   rw   rú   M  s.   
üÿÿòrú   rB   c                   @   sV   e Zd ZdZdZdZeddƒeddƒeddƒe	dee
d	d
dd„ d�gƒgZdd„ ZdS )rù   zSMB2 QUERY DIRECTORY Responser`  rÈ   rÚ   r=   rÉ  NrÇ  rÌ  rŽ   c                 C   s   | j S r”   rÍ  r•   rv   rv   rw   r—   �  rŽ   z&SMB2_Query_Directory_Response.<lambda>r˜   c                 C   s   t | || jddiƒ| S ©NrÌ  r6   r[  r]  rv   rv   rw   r^  …  s
    
ÿþz(SMB2_Query_Directory_Response.post_build©rr   rs   rt   r  r\  r_  r%   r   r   r*   r   ru   r^  rv   rv   rv   rw   rù   u  s   ÿþÿürù   c                   @   sn   e Zd ZdZeddƒedddddiƒed	d
ƒedeƒ eƒeddddddddddddddddœƒeddƒgZ	dS )rü   zSMB2 CHANGE NOTIFY RequestrÚ   rH   rÝ   r   r³   r5   ZSMB2_WATCH_TREErÓ  r^   r’   ZCompletionFilterr„   ZFILE_NOTIFY_CHANGE_FILE_NAMEZFILE_NOTIFY_CHANGE_DIR_NAMEZFILE_NOTIFY_CHANGE_ATTRIBUTESZFILE_NOTIFY_CHANGE_SIZEZFILE_NOTIFY_CHANGE_LAST_WRITEZFILE_NOTIFY_CHANGE_LAST_ACCESSZFILE_NOTIFY_CHANGE_CREATIONZFILE_NOTIFY_CHANGE_EAZFILE_NOTIFY_CHANGE_SECURITYZFILE_NOTIFY_CHANGE_STREAM_NAMEZFILE_NOTIFY_CHANGE_STREAM_SIZEZFILE_NOTIFY_CHANGE_STREAM_WRITE)r5   r6   r8   r<   rD   rH   rI   rZ   r[   r\   r]   r^   r­   Nr«  rv   rv   rv   rw   rü   –  s.   ÿôërü   rC   c                   @   sV   e Zd ZdZdZdZeddƒeddƒeddƒe	dee
d	d
dd„ d�gƒgZdd„ ZdS )rû   zSMB2 CHANGE NOTIFY Responser`  rÈ   rÚ   r=   rÉ  NrÇ  rÌ  rŽ   c                 C   s   | j S r”   rÍ  r•   rv   rv   rw   r—   Æ  rŽ   z$SMB2_Change_Notify_Response.<lambda>r˜   c                 C   s   t | || jddiƒ| S rÕ  r[  r]  rv   rv   rw   r^  Ê  s
    
ÿþz&SMB2_Change_Notify_Response.post_buildrÖ  rv   rv   rv   rw   rû   º  s   ÿþÿürû   c                   @   sD   e Zd Zeddƒedddd�edddd	„ d
�edddd	„ d
�gZdS )ÚFILE_GET_QUOTA_INFORMATIONÚNextEntryOffsetr   Ú	SidLengthNZSid)r�   rŽ   c                 C   s   | j S r”   )rÙ  r4  rv   rv   rw   r—   ß  rŽ   z#FILE_GET_QUOTA_INFORMATION.<lambda>r˜   r�  c                 C   s   | j r| j | j S dS r‘  )rØ  rÙ  r4  rv   rv   rw   r—   á  s
    þÿ)rr   rs   rt   r   r
   r   ru   rv   rv   rv   rw   r×  Û  s   ÿür×  c                   @   s”   e Zd Zeddƒeddƒeddƒeddƒeddƒeddƒedd	d
d„ d�eedg e	dd„ d�dd„ fedd	dd„ d�dd„ fge
dd	dd�ƒgZdS )ÚSMB2_Query_Quota_InfoZReturnSingler   ZReturnBooleanr­   ÚSidListLengthÚStartSidLengthÚStartSidOffsetr�  rŽ   c                 C   s   | j S r”   )rÝ  r4  rv   rv   rw   r—   ï  rŽ   zSMB2_Query_Quota_Info.<lambda>r˜   Z	SidBufferc                 C   s   | j S r”   ©rÛ  r4  rv   rv   rw   r—   ó  rŽ   c                 C   s   | j S r”   rÞ  r4  rv   rv   rw   r—   ô  rŽ   c                 C   s   | j S r”   ©rÜ  r4  rv   rv   rw   r—   ö  rŽ   c                 C   s   | j S r”   rß  r4  rv   rv   rw   r—   ÷  rŽ   r�   N)rr   rs   rt   r   r   r   r   r   r   r×  r   ru   rv   rv   rv   rw   rÚ  ç  s,   ÿþÿþü÷ørÚ  c                   @   s¼   e Zd ZdZdZdZeddƒedddd	d
ddœƒeddeƒe	ddƒe
ddƒe	ddƒeddddddddddddœƒedddddd d!œƒed"eƒ eƒedeed#ded$d%„ d&�gƒg
Zd'd(„ ZdS ))rþ   zSMB2 QUERY INFO Requestéh   rÈ   rÚ   é)   ÚInfoTyper   ZSMB2_0_INFO_FILEZSMB2_0_INFO_FILESYSTEMZSMB2_0_INFO_SECURITYZSMB2_0_INFO_QUOTA)r5   r6   r7   r8   ZFileInfoClassrÓ  rÈ  NrÅ  ZAdditionalInformationr„   ZOWNER_SECURITY_INFORMATIONZGROUP_SECURITY_INFORMATIONZDACL_SECURITY_INFORMATIONZSACL_SECURITY_INFORMATIONZLABEL_SECURITY_INFORMATIONZATTRIBUTE_SECURITY_INFORMATIONZSCOPE_SECURITY_INFORMATIONZBACKUP_SECURITY_INFORMATION)r5   r6   r8   r<   rD   rH   rI   r½   rÝ   ZSL_RESTART_SCANZSL_RETURN_SINGLE_ENTRYZSL_INDEX_SPECIFIEDra  r’   rÊ  c                 C   s   | j S r”   rË  r•   rv   rv   rw   r—   "  rŽ   z SMB2_Query_Info_Request.<lambda>r˜   c                 C   s   t | || jddiƒ| S )NrÊ  r8   r[  r]  rv   rv   rw   r^  &  s
    
ÿþz"SMB2_Query_Info_Request.post_build)rr   rs   rt   r  r\  r_  r%   r   rÔ  r   r#   r   r   rn  r*   r   rÚ  ru   r^  rv   rv   rv   rw   rþ   þ  sP   ü
ø
ýþÿÿä$rþ   rD   c                   @   sR   e Zd ZdZdZeddƒeddƒeddƒedee	d	d
dd„ d�gƒgZ
dd„ ZdS )rý   zSMB2 QUERY INFO Responser`  rÚ   r=   rÉ  NrÇ  rÈ   rÌ  rŽ   c                 C   s   | j S r”   rÍ  r•   rv   rv   rw   r—   ?  rŽ   z!SMB2_Query_Info_Response.<lambda>r˜   c                 C   s   t | || jddiƒ| S rÕ  r[  r]  rv   rv   rw   r^  C  s
    
ÿþz#SMB2_Query_Info_Response.post_build)rr   rs   rt   r  r\  r%   r   r   r*   r   ru   r^  rv   rv   rv   rw   rý   4  s   ÿþÿürý   c                	   @   sH   e Zd ZdZedddƒeddƒeddeƒeddd	d
dœƒe	ddƒgZ
dS )Ú!SMB2_Compression_Transform_Headerz!SMB2 Compression Transform HeaderrÙ   s   üSMBr8   ZOriginalCompressedSegmentSizer   ZCompressionAlgorithmrÝ   ZSMB2_COMPRESSION_FLAG_NONEZSMB2_COMPRESSION_FLAG_CHAINEDr@  ZOffset_or_LengthN)rr   rs   rt   r  r   r   r   rA  r   r#   ru   rv   rv   rv   rw   rã  U  s   
þþõrã  )ˆÚ__doc__r£   Zscapy.configr   Zscapy.errorr   Zscapy.packetr   r   r   Zscapy.fieldsr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   Zscapy.layers.netbiosr(   Zscapy.layers.gssapir)   Zscapy.layers.ntlmr*   r+   r7  r  r  r#  r5  rA  rƒ   rÔ  rj   rk   r†   r    rl   ri   rh   r®   r±   r¸   rÁ   rÂ   r×   rØ   r  rå   r  rç   r8  r;  r=  rB  rC  ræ   ré   rè   rë   rê   rí   rl  rì   rï   rî   rn  rr  rt  ru  rv  rw  rx  r{  r|  r}  r  r€  r�  r‚  rƒ  r…  r†  rˆ  r‰  r¦  rñ   rð   ró   rò   rõ   rô   r÷   rö   rø   rº  r½  r   rÏ  rÐ  rÿ   rú   rù   rü   rû   r×  rÚ  rþ   rý   rã  rv   rv   rv   rw   Ú<module>   s  Œ$úðíùùûíõ	/% ý		-ý	ý	ý	ý	
ý	ý
8ü
,ý	)ü
ý	ü
ýë%ü
ý	ü	

Mû	Iý
 ü
ý	ü
&ý	ü(ý	ü
ý	;ý	
ü
ý	ü
ý	ü
/ýü