o
    Žõ±jT  ã                   @   sN   d dl mZmZ d dlmZ d dlmZ dd„ Zdd„ Z	dd	„ Z
ddd„ZdS )é    )ÚDESÚexpand_DES_key)Úpbkdf2)Úmd4c                 C   sŒ   | d u s| dkrt  d¡S d}|  ¡ }| d¡}| dd¡}|dd… }|dd … }tt|ƒƒ}tt|ƒƒ}| |¡}	| |¡}
|	|
 }|S )	NÚ Ú aad3b435b51404eeaad3b435b51404ees   KGS!@#$%Úasciié   ó    r   é   )ÚbytesÚfromhexÚupperÚencodeÚljustr   r   Úencrypt)ÚpasswordÚ	LM_SECRETÚpassword_uppercaseÚpassword_uppercase_bytesÚpassword_uppercase_bytes_paddedÚpassword_chunk_1Úpassword_chunk_2Údes_chunk_1Údes_chunk_2Údes_first_halfÚdes_second_halfÚlm_hash© r   ú�/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/pypykatz/utils/crypto/winhash.pyÚLM   s   



r    c                 C   s4   | d u s| dkrt  d¡S |  d¡}t|ƒ}| ¡ S )Nr   Ú 31d6cfe0d16ae931b73c59d7e0c089c0ú	utf-16-le)r   r   r   ÚMD4Údigest)r   Úpassword_bytesr   r   r   r   ÚNT   s
   

r&   c                 C   s2   t |ƒ}|  ¡ }| d¡}t|| ƒ}| ¡ }|S )Nr"   )r&   Úlowerr   r#   r$   )Úusernamer   Únt_hash_of_passwordÚusername_lowerÚusername_bytesr   Údccr   r   r   ÚMSDCC#   s   
r-   é (  c                 C   s@   t | |ƒ}|  ¡ }| d¡}t|||dƒ}d|| | ¡ f }|S )Nr"   é   z$DCC2$%s#%s#%s)r-   r'   r   r   Úhex)r(   r   Ú
iterationsÚ
msdcc_hashr*   r+   Úmsdcc_v2Úhashcat_formatr   r   r   ÚMSDCCv2-   s   

r5   N)r.   )Úunicrypto.symmetricr   r   Úunicrypto.pbkdf2r   Úunicrypto.hashlibr   r#   r    r&   r-   r5   r   r   r   r   Ú<module>   s   
