o
    àý°jk3  ã                   @   sÎ  d dl mZmZ 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 d dlmZmZmZm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 d d	lm Z  d
Z!dZ"dZ#dZ$dZ%dZ&dZ'dZ(dZ)eZ*G dd„ deƒZ+G dd„ deƒZ,G dd„ deƒZ-d dlm.Z. G dd„ deƒZ/G dd„ deƒZ0G dd„ deƒZ1G d d!„ d!e ƒZ2G d"d#„ d#e ƒZ3G d$d%„ d%eƒZ4G d&d'„ d'eƒZ5G d(d)„ d)e ƒZ6G d*d+„ d+eƒZ7G d,d-„ d-eƒZ8G d.d/„ d/eƒZ9G d0d1„ d1eƒZ:G d2d3„ d3e ƒZ;G d4d5„ d5e ƒZ<G d6d7„ d7eƒZ=G d8d9„ d9e ƒZ>G d:d;„ d;e ƒZ?G d<d=„ d=e ƒZ@G d>d?„ d?eƒZAG d@dA„ dAe ƒZBG dBdC„ dCeƒZCG dDdE„ dEeƒZDG dFdG„ dGe ƒZEdHdI„ ZFdJdK„ ZGdLdM„ ZHdZdOdP„ZIdZdQdR„ZJdSdT„ ZKdUdV„ ZLdNdNdNejMdWfdXdY„ZNdNS )[é    )ÚErrorÚ	unhexlify)ÚULONGÚRPC_UNICODE_STRINGÚFILETIMEÚPRPC_SIDÚUSHORTÚRPC_SIDÚSID)Ú	NDRSTRUCTÚNDRUniConformantArrayÚ
NDRPOINTER)ÚUSER_SESSION_KEYÚCHAR_FIXED_8_ARRAYÚPUCHAR_ARRAYÚPRPC_UNICODE_STRING_ARRAY)ÚTypeSerialization1)Ú	constants)ÚKeyÚ_checksum_tableÚEnctype)ÚLDAP_SID)Ú	Structureé   é   é   é   é
   é   é   é   é   c                   @   ó   e Zd ZdefdeffZdS )ÚKERB_SID_AND_ATTRIBUTESÚSidÚ
AttributesN)Ú__name__Ú
__module__Ú__qualname__ÚPISIDr   Ú	structure© r+   r+   ú„/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/impacket/krb5/pac.pyr#   2   ó    þr#   c                   @   ó   e Zd ZeZdS )ÚKERB_SID_AND_ATTRIBUTES_ARRAYN)r&   r'   r(   r#   Úitemr+   r+   r+   r,   r/   8   ó    r/   c                   @   ó   e Zd ZdeffZdS )ÚPKERB_SID_AND_ATTRIBUTES_ARRAYÚDataN©r&   r'   r(   r/   Úreferentr+   r+   r+   r,   r3   ;   ó    ÿr3   )ÚPGROUP_MEMBERSHIP_ARRAYc                   @   ó"   e Zd ZdefdefdeffZdS )ÚDOMAIN_GROUP_MEMBERSHIPÚDomainIdÚ
GroupCountÚGroupIdsN)r&   r'   r(   r)   r   r8   r*   r+   r+   r+   r,   r:   D   ó
    ýr:   c                   @   r.   )ÚDOMAIN_GROUP_MEMBERSHIP_ARRAYN)r&   r'   r(   r:   r0   r+   r+   r+   r,   r?   K   r1   r?   c                   @   r2   )ÚPDOMAIN_GROUP_MEMBERSHIP_ARRAYr4   Nr5   r+   r+   r+   r,   r@   N   r7   r@   c                   @   ó   e Zd ZdZdS )ÚPACTYPE))ÚcBuffersú<L=0©ÚVersionrD   )ÚBuffersú:N©r&   r'   r(   r*   r+   r+   r+   r,   rB   T   r1   rB   c                   @   rA   )ÚPAC_INFO_BUFFER))ÚulTyperD   )ÚcbBufferSizerD   )ÚOffsetú<Q=0NrI   r+   r+   r+   r,   rJ   \   r1   rJ   c                   @   s*  e Zd Zg def‘def‘def‘def‘def‘def‘def‘def‘d	ef‘d
ef‘def‘def‘def‘def‘def‘def‘def‘def‘def‘def‘def‘def‘de	f‘de
f‘def‘def‘def‘def‘def‘def‘def‘d ef‘d!ef‘d"ef‘d#ef‘R Zd$S )%ÚKERB_VALIDATION_INFOÚ	LogonTimeÚ
LogoffTimeÚKickOffTimeÚPasswordLastSetÚPasswordCanChangeÚPasswordMustChangeÚEffectiveNameÚFullNameÚLogonScriptÚProfilePathÚHomeDirectoryÚHomeDirectoryDriveÚ
LogonCountÚBadPasswordCountÚUserIdÚPrimaryGroupIdr<   r=   Ú	UserFlagsÚUserSessionKeyÚLogonServerÚLogonDomainNameÚLogonDomainIdÚLMKeyÚUserAccountControlÚSubAuthStatusÚLastSuccessfulILogonÚLastFailedILogonÚFailedILogonCountÚ	Reserved3ÚSidCountÚ	ExtraSidsÚResourceGroupDomainSidÚResourceGroupCountÚResourceGroupIdsN)r&   r'   r(   r   r   r   r   r8   r   r   r   r3   r)   r*   r+   r+   r+   r,   rO   d   s�    ÿþýüûúùø	÷
öõôóòñðïîíìëêéæäãâá à!ß#Ý%Û&Ú'Ù(
ØrO   c                   @   r2   )ÚPKERB_VALIDATION_INFOr4   N)r&   r'   r(   rO   r6   r+   r+   r+   r,   rq   �   r7   rq   c                   @   rA   )ÚPAC_CREDENTIAL_INFO)rE   )ÚEncryptionTyperD   )ÚSerializedDatarH   NrI   r+   r+   r+   r,   rr   –   r1   rr   c                   @   r9   )ÚSECPKG_SUPPLEMENTAL_CREDÚPackageNameÚCredentialSizeÚCredentialsN)r&   r'   r(   r   r   r   r*   r+   r+   r+   r,   ru   ž   r>   ru   c                   @   r.   )ÚSECPKG_SUPPLEMENTAL_CRED_ARRAYN)r&   r'   r(   ru   r0   r+   r+   r+   r,   ry   ¥   r1   ry   c                   @   r"   )ÚPAC_CREDENTIAL_DATAÚCredentialCountrx   N)r&   r'   r(   r   ry   r*   r+   r+   r+   r,   rz   ©   r-   rz   c                   @   s    e Zd ZdefdefddfZdS )ÚNTLM_SUPPLEMENTAL_CREDENTIALrF   ÚFlags)Ú
LmPasswordú16s=b"")Ú
NtPasswordr   N©r&   r'   r(   r   r*   r+   r+   r+   r,   r|   °   s    ür|   c                   @   rA   )ÚPAC_CLIENT_INFO))ÚClientIdrN   )Ú
NameLengthú<H=0)Ú_Namez_-Namezself["NameLength"])ÚNamerH   NrI   r+   r+   r+   r,   r‚   ¹   r1   r‚   c                   @   rA   )ÚPAC_SIGNATURE_DATA))ÚSignatureTypez<l=0)Ú	SignaturerH   NrI   r+   r+   r+   r,   rˆ   Â   r1   rˆ   c                   @   r9   )ÚS4U_DELEGATION_INFOÚS4U2proxyTargetÚTransitedListSizeÚS4UTransitedServicesN)r&   r'   r(   r   r   r   r*   r+   r+   r+   r,   r‹   É   r>   r‹   c                   @   rA   )ÚUPN_DNS_INFO)©Ú	UpnLengthr…   ©Ú	UpnOffsetr…   ©ÚDnsDomainNameLengthr…   ©ÚDnsDomainNameOffsetr…   ©r}   rD   NrI   r+   r+   r+   r,   r�   Ñ   r1   r�   c                   @   rA   )ÚUPN_DNS_INFO_FULL)	r�   r’   r”   r–   r˜   )ÚSamNameLengthr…   )ÚSamNameOffsetr…   )Ú	SidLengthr…   )Ú	SidOffsetr…   NrI   r+   r+   r+   r,   r™   Ü   r1   r™   c                   @   rA   )ÚPAC_CLIENT_CLAIMS_INFO©)ÚClaimsrH   NrI   r+   r+   r+   r,   rž   ê   r1   rž   c                
   @   sF   e Zd Zdefdefdefdefdefdefdefdefd	eff	Zd
S )ÚPAC_DEVICE_INFOr^   r_   ÚAccountDomainIdÚAccountGroupCountÚAccountGroupIdsrl   rm   ÚDomainGroupCountÚDomainGroupN)	r&   r'   r(   r   r)   r8   r3   r@   r*   r+   r+   r+   r,   r¡   ð   s    ÷r¡   c                   @   rA   )ÚPAC_DEVICE_CLAIMS_INFOrŸ   NrI   r+   r+   r+   r,   r§   þ   r1   r§   c                   @   r2   )ÚVALIDATION_INFOr4   N)r&   r'   r(   rq   r*   r+   r+   r+   r,   r¨     r7   r¨   c                   @   s   e Zd ZdefdeffZdS )ÚPAC_ATTRIBUTE_INFOÚFlagsLengthr}   Nr�   r+   r+   r+   r,   r©   	  r-   r©   c                   @   s   e Zd ZddeffZdS )ÚPAC_REQUESTORÚUserSidrH   N)r&   r'   r(   r
   r*   r+   r+   r+   r,   r«     s    ÿr«   c                 C   s   t | ƒ|  S ©N)Úget_block_length©Údata_lengthr+   r+   r,   Úget_pad_length  s   r±   c                 C   s   | d d d S )Nr   é   r+   r¯   r+   r+   r,   r®     s   r®   c              	   C   sJ   | dv rd S zt | ƒW S  ttfy$   t| tƒr|  Y S |  d¡ Y S w )N)NÚ ó    zutf-8)r   Ú	TypeErrorÚBinasciiErrorÚ
isinstanceÚbytesÚencode)Úkeyr+   r+   r,   Ú_coerce_hex_key  s   

ýr»   Nc                 C   s`   g }t ƒ }|d ur |D ]}|| v r||vr| |¡ | |¡ q| D ]}||vr-| |¡ q"|S r­   )ÚsetÚappendÚadd)Ú	pac_infosÚbuffer_orderÚordered_typesÚseenÚul_typer+   r+   r,   Ú_ordered_buffer_types*  s   

€
€rÄ   c           
      C   s¾   t | |ƒ}dttƒ  ¡ ƒt|ƒ  }d}d}|D ]1}| | }tƒ }||d< t|ƒ|d< ||d< || ¡ 7 }||dtt|ƒƒ  7 }t|t|ƒ ƒ}qtƒ }	t|ƒ|	d< d|	d	< || |	d
< |	S )Nr²   r´   rK   rL   rM   ó    rC   r   rF   rG   )rÄ   ÚlenrJ   ÚgetDatar±   r®   rB   )
r¿   rÀ   rÁ   Úoffset_dataÚinfo_buffersÚ
data_blobsrÃ   ÚdataÚinfo_bufferÚpac_typer+   r+   r,   Úbuild_pac_type;  s$   
rÎ   c                 C   sD   |r |d ur |dkr t |ƒdkrtjjjS t |ƒdkr tjjjS | S )Nr   é   é    )rÆ   r   ÚChecksumTypesÚhmac_sha1_96_aes128ÚvalueÚhmac_sha1_96_aes256)Úsignature_typeÚsignature_lengthÚaes_keyÚinfer_aes_signature_typer+   r+   r,   Ú_normalize_pac_checksum_typeT  s   

rÙ   c                 C   s®   t |  }| tjjjkr|d u rtd| ƒ‚|ttj|ƒfS | tjj	jkr6|d u r.td| ƒ‚|ttj
|ƒfS | tjjjkrO|d u rGtd| ƒ‚|ttj|ƒfS td|| f ƒ‚)NzMissing AES key for %s checksumzMissing NT hash for %s checksumzInvalid %s checksum type 0x%x)r   r   rÑ   rÔ   rÓ   Ú	Exceptionr   r   ÚAES256rÒ   ÚAES128Úhmac_md5ÚRC4)rÕ   r×   Únt_hashÚchecksum_nameÚchecksum_functionr+   r+   r,   Ú_get_checksum_context]  s   râ   Fc                 C   s`  t | vrtdƒ‚t| vrtdƒ‚t|ƒ}t|ƒ}t| t  ƒ}t| t ƒ}t|d tt|d ƒƒ||ƒ|d< t|d tt|d ƒƒ||ƒ|d< dtt|d ƒƒ |d< dtt|d ƒƒ |d< | ¡ | t < | ¡ | t< t	| |d�}| ¡ }	t
|d ||dƒ\}
}t
|d ||dƒ\}}|
 |||	¡|d< | |||d ¡|d< | ¡ | t < | ¡ | t< t	| |d�S )	Nz'PAC_SERVER_CHECKSUM not found! Abortingz(PAC_PRIVSVR_CHECKSUM not found! Abortingr‰   rŠ   rÅ   )rÀ   ÚServerÚPriv)ÚPAC_SERVER_CHECKSUMrÚ   ÚPAC_PRIVSVR_CHECKSUMr»   rˆ   rÙ   rÆ   r¸   rÇ   rÎ   râ   Úchecksum)r¿   r×   rß   rÀ   Úchecksum_saltrØ   Úserver_checksumÚprivsvr_checksumrÍ   Úblob_to_checksumÚserver_checksum_functionÚ
server_keyÚprivsvr_checksum_functionÚprivsvr_keyr+   r+   r,   Úsign_pacp  sB   ÿÿÿÿ
ÿrð   r­   )OÚbinasciir   r¶   r   Úimpacket.dcerpc.v5.dtypesr   r   r   r   r   r	   r
   Úimpacket.dcerpc.v5.ndrr   r   r   Úimpacket.dcerpc.v5.nrpcr   r   r   r   Úimpacket.dcerpc.v5.rpcrtr   Úimpacket.krb5r   Úimpacket.krb5.cryptor   r   r   Úimpacket.ldap.ldaptypesr   Úimpacket.structurer   ÚPAC_LOGON_INFOÚPAC_CREDENTIALS_INFOrå   ræ   ÚPAC_CLIENT_INFO_TYPEÚPAC_DELEGATION_INFOÚPAC_UPN_DNS_INFOÚPAC_ATTRIBUTES_INFOÚPAC_REQUESTOR_INFOr)   r#   r/   r3   r8   r:   r?   r@   rB   rJ   rO   rq   rr   ru   ry   rz   r|   r‚   rˆ   r‹   r�   r™   rž   r¡   r§   r¨   r©   r«   r±   r®   r»   rÄ   rÎ   rÙ   râ   ÚKERB_NON_KERB_CKSUM_SALTrð   r+   r+   r+   r,   Ú<module>   sp   $,		

	ÿ