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   $,		

	