o
    Žõ±jH  ã                   @   sª   d dl mZmZmZ d dlmZmZ d dlmZ G dd„ deƒZ	G dd„ dƒZ
G dd	„ d	ƒZG d
d„ deƒZG dd„ de	ƒZG dd„ de	ƒZddeƒ ideƒ idœiZdS )é    )ÚULONGÚPVOIDÚPOINTER)ÚKatzSystemArchitectureÚWindowsMinBuild)ÚPackageTemplatec                   @   s,   e Zd Zdd„ Zedd„ ƒZedd„ ƒZdS )ÚLsaTemplate_NT5c                 C   s"   d | _ d | _d | _d | _d | _d S ©N)Ú	signatureÚfeedbackÚrandomkey_ptrÚDESXKey_ptrÚ
key_struct©Úself© r   úš/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/pypykatz/alsadecryptor/lsa_template_nt5.pyÚ__init__   s
   
zLsaTemplate_NT5.__init__c                 C   s   t dƒ‚)Nz+Template guessing is not applicable for NT5)Ú	Exception©Úsysinfor   r   r   Úget_template_brute   s   z"LsaTemplate_NT5.get_template_brutec                 C   sh   | j tjkr| jtjjkrtd d d S tdƒ‚| j tj	kr2| jtjjkr.td d d S tdƒ‚d S )NÚnt5Úx86Ú1zNT 6 is in another castle!Úx64)
Úarchitecturer   ÚX86Úbuildnumberr   Ú	WIN_VISTAÚvalueÚ	templatesr   ÚX64r   r   r   r   Úget_template   s   üzLsaTemplate_NT5.get_templateN)Ú__name__Ú
__module__Ú__qualname__r   Ústaticmethodr   r#   r   r   r   r   r      s    
r   c                   @   ó(   e Zd Zdd„ Zedd„ ƒZdd„ ZdS )ÚSYMCRYPT_NT5_DES_EXPANDED_KEYc                 C   s
   g | _ d S r	   )ÚroundKeyr   r   r   r   r   (   s   
z&SYMCRYPT_NT5_DES_EXPANDED_KEY.__init__c                 Ã   sj   �t ƒ }tdƒD ]*}|  d¡I d H }tj|ddd�}|  d¡I d H }tj|ddd�}|j ||g¡ q|S )Né   é   ÚlittleF)Úsigned)r)   ÚrangeÚreadÚintÚ
from_bytesr*   Úappend)ÚreaderÚsÚ_ÚxÚrÚlr   r   r   Úload+   s   €z"SYMCRYPT_NT5_DES_EXPANDED_KEY.loadc                 C   s>   d}t | jƒD ]\}}|d|t|d ƒt|d ƒf 7 }q|S )NzSYMCRYPT_NT5_DES_EXPANDED_KEY
z%s L: %s R: %s
r   é   )Ú	enumerater*   Úhex)r   ÚtÚir7   r   r   r   Ú__str__6   s   $z%SYMCRYPT_NT5_DES_EXPANDED_KEY.__str__N©r$   r%   r&   r   r'   r:   r@   r   r   r   r   r)   '   s
    

r)   c                   @   r(   )ÚSYMCRYPT_NT5_DESX_EXPANDED_KEYc                 C   s   d | _ d | _d | _d S r	   )ÚinputWhiteningÚoutputWhiteningÚdesKeyr   r   r   r   r   =   s   
z'SYMCRYPT_NT5_DESX_EXPANDED_KEY.__init__c                 Ã   sB   �t ƒ }|  d¡I d H |_|  d¡I d H |_t | ¡I d H |_|S )Né   )rB   r0   rC   rD   r)   r:   rE   )r4   r5   r   r   r   r:   B   s   €z#SYMCRYPT_NT5_DESX_EXPANDED_KEY.loadc                 C   s>   d}|d| j  ¡  7 }|d| j ¡  7 }|dt| jƒ 7 }|S )Nz SYMCRYPT_NT5_DESX_EXPANDED_KEY
zinputWhitening : %s
zoutputWhitening : %s
zdesKey : %s
)rC   r=   rD   ÚstrrE   )r   r>   r   r   r   r@   J   s
   z&SYMCRYPT_NT5_DESX_EXPANDED_KEY.__str__NrA   r   r   r   r   rB   <   s
    
rB   c                       s(   e Zd Z‡ fdd„Zedd„ ƒZ‡  ZS )ÚPSYMCRYPT_NT5_DESX_EXPANDED_KEYc                    s   t ƒ  ¡  d S r	   )Úsuperr   r   ©Ú	__class__r   r   r   R   s   z(PSYMCRYPT_NT5_DESX_EXPANDED_KEY.__init__c                 Ã   s,   �t ƒ }|  ¡ |_|  ¡ I d H |_t|_|S r	   )r   ÚtellÚlocationÚ	read_uintr    rB   Ú	finaltype)r4   Úpr   r   r   r:   U   s   €
z$PSYMCRYPT_NT5_DESX_EXPANDED_KEY.load)r$   r%   r&   r   r'   r:   Ú__classcell__r   r   rJ   r   rH   Q   s    rH   c                   @   ó   e Zd Zdd„ ZdS )ÚLSA_x64_nt5_1c                 C   ó>   t  | ¡ d| _d| _d| _d| _d| _d| _d| _t	| _
d S )Nr   s
   3Û‹ÃHƒÄ [ÃÚ5i½ÿÿÿiïÿÿÿiÝÿÿÿé   )r   r   Úarchr
   Únt_majorÚfeedback_ptr_offsetÚrandomkey_ptr_offsetÚdesx_key_ptr_offsetÚold_feedback_offsetrH   Úkey_struct_ptrr   r   r   r   r   ^   ó   

zLSA_x64_nt5_1.__init__N©r$   r%   r&   r   r   r   r   r   rS   ]   ó    rS   c                   @   rR   )ÚLSA_x86_nt5_1c                 C   rT   )Nr   rU   s	   �   jP£é   é	   éüÿÿÿrV   )r   r   rW   rX   r
   rY   rZ   r[   r\   rH   r]   r   r   r   r   r   j   r^   zLSA_x86_nt5_1.__init__Nr_   r   r   r   r   ra   i   r`   ra   r   r   )r   r   N)Ú$pypykatz.alsadecryptor.win_datatypesr   r   r   Úpypykatz.commons.commonr   r   Ú&pypykatz.alsadecryptor.package_commonsr   r   r)   rB   rH   rS   ra   r!   r   r   r   r   Ú<module>   s    ÿÿüÿ