o
    Žõ±jÏ  ã                   @   sP   d dl mZ d dlmZ d dlmZmZmZmZ d dl	m
Z
 G dd„ de
ƒZdS )é    )Úlogger)Úhexdump)ÚMODE_CBCÚMODE_CFBÚAESÚTDES)ÚPackageDecryptorc                       s^   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	ddd„Z
dd„ Z‡  ZS )ÚLsaDecryptor_NT6c                    s.   t ƒ  dd ||¡ || _d | _d | _d | _d S )NÚLsaDecryptor)ÚsuperÚ__init__Údecryptor_templateÚivÚaes_keyÚdes_key)ÚselfÚreaderr   Úsysinfo©Ú	__class__© ú›/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/pypykatz/alsadecryptor/lsa_decryptor_nt6.pyr      s
   
zLsaDecryptor_NT6.__init__c                 Ã   sŽ   �|   d¡ |  ¡ I d H }| j |¡I d H  | j d¡I d H }|   dt||d� ¡ |  |¡I d H | _|  |¡I d H | _	|  
|¡I d H | _d S )NzAcquireing crypto stuff...éP   z.Memory looks like this around the signature
%s©Ústart)ÚlogÚfind_signaturer   ÚmoveÚpeekr   Úget_IVr   Úget_des_keyr   Úget_aes_keyr   )r   ÚsigposÚdatar   r   r   Úacquire_crypto_material   s   €
z(LsaDecryptor_NT6.acquire_crypto_materialc                 Ã   ó$   �|   d¡ |  || jjj¡I d H S )NzAcquireing DES key...)r   Úget_keyr   Úkey_patternÚoffset_to_DES_key_ptr©r   Úposr   r   r   r       ó   €
zLsaDecryptor_NT6.get_des_keyc                 Ã   r%   )NzAcquireing AES key...)r   r&   r   r'   Úoffset_to_AES_key_ptrr)   r   r   r   r!   #   r+   zLsaDecryptor_NT6.get_aes_keyc                 Ã   sŽ   �|   d¡ | jjd| jjjdd�I d H }t|ƒdkr+t d| jjj 	¡  ¡ t
dƒ‚|   dd	 d
d„ |D ƒ¡ ¡ |   d|d  ¡ |d S )Nz.Looking for main struct signature in memory...z
lsasrv.dllT)Ú
find_firstr   zsignature not found! %szLSA signature not found!z/Found candidates on the following positions: %sú c                 s   s   � | ]}t |ƒV  qd S )N)Úhex)Ú.0Úxr   r   r   Ú	<genexpr>.   s   € z2LsaDecryptor_NT6.find_signature.<locals>.<genexpr>zSelecting first one @ 0x%08x)r   r   Úfind_in_moduler   r'   Ú	signatureÚlenr   Údebugr/   Ú	ExceptionÚjoin)r   Úflr   r   r   r   '   s   €
zLsaDecryptor_NT6.find_signaturec                 Ã   sv   �|   d¡ | j || jjj ¡I d H }|   d| ¡ | j |¡I d H  | j | jjj¡I d H }|   dt	|ƒ ¡ |S )Nz
Reading IVzIV pointer takes us to 0x%08xzIV data: %s)
r   r   Úget_ptr_with_offsetr   r'   Úoffset_to_IV_ptrr   ÚreadÚ	IV_lengthr   )r   r*   Úptr_ivr#   r   r   r   r   2   s   €
zLsaDecryptor_NT6.get_IVc                 Ã   s8  �| j  || ¡I d H }|  d| ¡ | j  |¡I d H }|  d| ¡ | j  |¡I d H  | j  d¡I d H }|  dt||d� ¡ | jj 	| j ¡I d H }| 
¡ r˜|jj}| j  |¡I d H  | j  d¡I d H }|  dt||d� ¡ |j | j | jj¡I d H }|  d|j ¡ | 
¡ rš|  dt|jjƒ ¡ |jjS d S d S )	Nzkey handle pointer is @ 0x%08xzkey handle is @ 0x%08xr   zBCRYPT_HANLE_KEY_DATA
%sr   zBCRYPT_KEY_DATA
%szHARD_KEY SIZE: 0x%xzHARD_KEY data:
%s)r   r:   r   Úget_ptrr   r   r   r   Úkey_handle_structÚloadÚverifyÚptr_keyÚvaluer<   Ú
key_structÚsizeÚhardkeyr#   )r   r*   Ú
key_offsetrC   r#   ÚkbhkÚkbkr   r   r   r&   <   s*   €÷zLsaDecryptor_NT6.get_keyé€   c                 C   s€   d}t |ƒ}|r>|d r%| jr| js|S t| jt| j|d�}| |¡}|S | jr+| js-|S t| jt| jd d… ƒ}| |¡}|S )Nó    é   )Úsegment_size)	r5   r   r   r   r   Údecryptr   r   r   )r   Ú	encryptedrN   Ú	cleartextrF   Úcipherr   r   r   rO   P   s   
ü
zLsaDecryptor_NT6.decryptc                 C   sh   |   d¡ |   d t| jƒ| j ¡ ¡¡ |   d t| jƒ| j ¡ ¡¡ |   d t| jƒ| j ¡ ¡¡ d S )NzRecovered LSA encryption keys
zIV ({}): {}zDES_KEY ({}): {}zAES_KEY ({}): {})r   Úformatr5   r   r/   r   r   )r   r   r   r   Údumpa   s   
"zLsaDecryptor_NT6.dump)rK   )Ú__name__Ú
__module__Ú__qualname__r   r$   r    r!   r   r   r&   rO   rT   Ú__classcell__r   r   r   r   r	      s    


r	   N)Úpypykatzr   Úpypykatz.commons.commonr   Úunicrypto.symmetricr   r   r   r   Ú&pypykatz.alsadecryptor.package_commonsr   r	   r   r   r   r   Ú<module>   s
   