o
    Žõ±j¯4  ã                   @   s`   d dl Z G dd„ dƒZG dd„ dƒZG dd„ dƒZG dd	„ d	ƒZG d
d„ dƒZG dd„ dƒZdS )é    Nc                   @   ó4   e Zd Zdd„ Zedd„ ƒZedd„ ƒZdd„ Zd	S )
ÚDOMAIN_ACCOUNT_Fc                 C   s‚   d | _ d | _d | _d | _d | _d | _d | _d | _d | _d | _	d | _
d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _d S ©N)ÚrevisionÚunk1Úcreation_timeÚdomain_modified_countÚ
max_pw_ageÚ
min_pw_ageÚforce_logoffÚlockout_durationÚlockout_observation_windowÚunk2Únext_ridÚpw_propertiesÚmin_pw_lengthÚpw_history_lengthÚlockout_tresholdÚunk3Úserver_stateÚserver_roleÚuas_compatibility_reqÚunk4Úkey_0©Úself© r   ú“/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/pypykatz/registry/sam/structures.pyÚ__init__
   s*   
zDOMAIN_ACCOUNT_F.__init__c                 C   ó   t  t | ¡¡S r   )r   Úfrom_bufferÚioÚBytesIO©Údatar   r   r   Ú
from_bytes!   ó   zDOMAIN_ACCOUNT_F.from_bytesc                 C   s8  t ƒ }tj|  d¡ddd|_tj|  d¡ddd|_tj|  d¡ddd|_tj|  d¡ddd|_tj|  d¡ddd|_tj|  d¡ddd|_	tj|  d¡ddd|_
tj|  d¡ddd|_tj|  d¡ddd|_tj|  d¡ddd|_tj|  d¡ddd|_tj|  d¡ddd|_tj|  d¡ddd|_tj|  d¡ddd|_tj|  d¡ddd|_tj|  d¡ddd|_tj|  d¡ddd|_tj|  d¡ddd|_tj|  d¡ddd|_tj|  d¡ddd|_|  ¡ }|  d¡}|  |d¡ |d	krt | ¡|_|S |d
krt | ¡|_|S )Né   ÚlittleF©Úsignedé   é   é   r   ó   ó   )r   Úintr%   Úreadr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ÚtellÚseekÚSAM_KEY_DATAr    r   ÚSAM_KEY_DATA_AES)ÚbuffÚdfÚposÚmarkerr   r   r   r    %   s<   


þzDOMAIN_ACCOUNT_F.from_bufferc                 C   ón   d}| j D ]/}t| j | tƒr't| j | ƒD ]\}}|d||t|ƒf 7 }qq|d|t| j | ƒf 7 }q|S )Nz== DOMAIN_ACCOUNT_F ==
ú   %s: %s: %sú	%s: %s 
©Ú__dict__Ú
isinstanceÚlistÚ	enumerateÚstr©r   ÚtÚkÚiÚitemr   r   r   Ú__str__F   ó   
ÿzDOMAIN_ACCOUNT_F.__str__N©Ú__name__Ú
__module__Ú__qualname__r   Ústaticmethodr%   r    rH   r   r   r   r   r   	   s    

 r   c                   @   r   )
r4   c                 C   ó(   d | _ d | _d | _d | _d | _d | _d S r   )r   ÚlengthÚsaltÚkeyÚchecksumÚreservedr   r   r   r   r   Q   ó   
zSAM_KEY_DATA.__init__c                 C   r   r   )r4   r    r!   r"   r#   r   r   r   r%   Y   r&   zSAM_KEY_DATA.from_bytesc                 C   sv   t ƒ }tj|  d¡ddd|_tj|  d¡ddd|_|  d¡|_|  d¡|_|  d¡|_tj|  d¡ddd|_	|S )Nr'   r(   Fr)   é   r+   )
r4   r0   r%   r1   r   rP   rQ   rR   rS   rT   ©r6   Úskr   r   r   r    ]   s   zSAM_KEY_DATA.from_bufferc                 C   r:   )Nz== SAM_KEY_DATA ==
r;   r<   r=   rC   r   r   r   rH   h   rI   zSAM_KEY_DATA.__str__NrJ   r   r   r   r   r4   P   ó    


r4   c                   @   r   )
r5   c                 C   rO   r   )r   rP   Úchecksum_lengthÚdata_lengthrQ   r$   r   r   r   r   r   s   rU   zSAM_KEY_DATA_AES.__init__c                 C   r   r   )r5   r    r!   r"   r#   r   r   r   r%   {   r&   zSAM_KEY_DATA_AES.from_bytesc                 C   s„   t ƒ }tj|  d¡ddd|_tj|  d¡ddd|_tj|  d¡ddd|_tj|  d¡ddd|_|  d¡|_|  |j¡|_	|S )Nr'   r(   Fr)   rV   )
r5   r0   r%   r1   r   rP   rZ   r[   rQ   r$   rW   r   r   r   r       s   zSAM_KEY_DATA_AES.from_bufferc                 C   r:   )Nz== SAM_KEY_DATA_AES ==
r;   r<   r=   rC   r   r   r   rH   Š   rI   zSAM_KEY_DATA_AES.__str__NrJ   r   r   r   r   r5   r   rY   r5   c                   @   r   )
ÚUSER_ACCOUNT_Vc                 C   sB  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 | _#d | _$d | _%d | _&d | _'d | _(d | _)d | _*d | _+d | _,d | _-d | _.d | _/d | _0d | _1d | _2d | _3d | _4d S r   )5ÚUnknownÚ
NameOffsetÚ
NameLengthÚUnknown2ÚFullNameOffsetÚFullNameLengthÚUnknown3ÚCommentOffsetÚCommentLengthÚ	Unknown31ÚUserCommentOffsetÚUserCommentLengthÚUnknown4ÚUnknown5ÚHomeDirOffsetÚHomeDirLengthÚUnknown6ÚHomeDirConnectOffsetÚHomeDirConnectLengthÚUnknown7ÚScriptPathOffsetÚScriptPathLengthÚUnknown8ÚProfilePathOffsetÚProfilePathLengthÚUnknown9ÚWorkstationsOffsetÚWorkstationsLengthÚ	Unknown10ÚHoursAllowedOffsetÚHoursAllowedLengthÚ	Unknown11Ú	Unknown12ÚLMHashOffsetÚLMHashLengthÚ	Unknown13ÚNTHashOffsetÚNTHashLengthÚ	Unknown14Ú	Unknown15ÚDataÚnameÚfullnameÚcommentÚusercommentÚhomedirÚhomedir_connectÚscript_pathÚprofile_pathÚworkstationsÚhoursallowedÚLM_hashÚNT_hashr   r   r   r   r   •   sj   
zUSER_ACCOUNT_V.__init__c                 C   r   r   )r\   r    r!   r"   r#   r   r   r   r%   Í   r&   zUSER_ACCOUNT_V.from_bytesc                 C   sd  t ƒ }|  d¡|_tj|  d¡ddd|_tj|  d¡ddd|_tj|  d¡ddd|_tj|  d¡ddd|_tj|  d¡ddd|_	tj|  d¡ddd|_
tj|  d¡ddd|_tj|  d¡ddd|_tj|  d¡ddd|_tj|  d¡ddd|_tj|  d¡ddd|_tj|  d¡ddd|_|  d¡|_tj|  d¡ddd|_tj|  d¡ddd|_tj|  d¡ddd|_tj|  d¡ddd|_tj|  d¡ddd|_tj|  d¡ddd|_tj|  d¡ddd|_tj|  d¡ddd|_tj|  d¡ddd|_tj|  d¡ddd|_tj|  d¡ddd|_tj|  d¡ddd|_tj|  d¡ddd|_tj|  d¡ddd|_tj|  d¡ddd|_ tj|  d¡ddd|_!tj|  d¡ddd|_"tj|  d¡ddd|_#|  d¡|_$tj|  d¡ddd|_%tj|  d¡ddd|_&tj|  d¡ddd|_'tj|  d¡ddd|_(tj|  d¡ddd|_)tj|  d¡ddd|_*|  d¡|_+|  ,¡ }|jdkrç|  -||j ¡ |  |j¡ .d¡|_/|j	dkrÿ|  -||j ¡ |  |j	¡ .d¡|_0|jdkr|  -||j ¡ |  |j¡ .d¡|_1|jdkr/|  -||j ¡ |  |j¡ .d¡|_2|jdkrG|  -||j ¡ |  |j¡ .d¡|_3|jdkr_|  -||j ¡ |  |j¡ .d¡|_4|jdkrw|  -||j ¡ |  |j¡ .d¡|_5|jdkr|  -||j ¡ |  |j¡ .d¡|_6|jdkr§|  -||j ¡ |  |j¡ .d¡|_7|j"dkr¼|  -||j! ¡ |  |j"¡|_8|j)dkr0|  -||j( d	 ¡ |  d
¡dkr|j)dkrì|  -||j( ¡ t9 |  |j)¡¡|_:|j&dkr|  -||j% ¡ t9 |  |j&¡¡|_;|S |j&dkr|  -||j% ¡ t< |  |j&¡¡|_;|  -||j( ¡ t< |  |j)¡¡|_:|S )Né   r'   r(   Fr)   é   r   z	utf-16-ler,   r-   r.   é   )=r\   r1   r]   r0   r%   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r€   r   r‚   rƒ   r„   r2   r3   Údecoder†   r‡   rˆ   r‰   rŠ   r‹   rŒ   r   rŽ   r   ÚSAM_HASHr‘   r   ÚSAM_HASH_AES)r6   ÚuacÚdata_offsetr   r   r   r    Ñ   s°   
ùzUSER_ACCOUNT_V.from_bufferc                 C   r:   )Nz== USER_ACCOUNT_V ==
r;   r<   r=   rC   r   r   r   rH   4  rI   zUSER_ACCOUNT_V.__str__NrJ   r   r   r   r   r\   ”   s    8

br\   c                   @   r   )
r–   c                 C   s   d | _ d | _d | _d S r   )ÚpekIDr   Úhashr   r   r   r   r   @  s   
zSAM_HASH.__init__c                 C   r   r   )r–   r    r!   r"   r#   r   r   r   r%   E  r&   zSAM_HASH.from_bytesc                 C   sF   t ƒ }tj|  d¡ddd|_tj|  d¡ddd|_|  d¡|_|S )Nr,   r(   Fr)   rV   )r–   r0   r%   r1   rš   r   r›   rW   r   r   r   r    I  s
   zSAM_HASH.from_bufferc                 C   r:   )Nz== SAM_HASH ==
r;   r<   r=   rC   r   r   r   rH   Q  rI   zSAM_HASH.__str__NrJ   r   r   r   r   r–   ?  s    

r–   c                   @   r   )
r—   c                 C   s"   d | _ d | _d | _d | _d | _d S r   )rš   r   r™   rQ   r$   r   r   r   r   r   \  s
   
zSAM_HASH_AES.__init__c                 C   r   r   )r—   r    r!   r"   r#   r   r   r   r%   c  r&   zSAM_HASH_AES.from_bytesc                 C   sh   t ƒ }tj|  d¡ddd|_tj|  d¡ddd|_tj|  d¡ddd|_|  d¡|_|  ¡ |_|S )Nr,   r(   Fr)   r'   rV   )	r—   r0   r%   r1   rš   r   r™   rQ   r$   rW   r   r   r   r    g  s   
zSAM_HASH_AES.from_bufferc                 C   r:   )Nz== SAM_HASH_AES ==
r;   r<   r=   rC   r   r   r   rH   q  rI   zSAM_HASH_AES.__str__NrJ   r   r   r   r   r—   [  s    

	r—   )r!   r   r4   r5   r\   r–   r—   r   r   r   r   Ú<module>   s   G"" ,