o
    Žõ±j	  ã                   @   sF   d dl Z d dlZd dlZd dlmZ G dd„ dƒZG dd„ deƒZdS )é    N)ÚPackageDecryptorc                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚDpapiCredentialc                 C   s"   d| _ d | _d | _d | _d | _d S )NÚdpapi)ÚcredtypeÚluidÚkey_guidÚ	masterkeyÚsha1_masterkey©Úself© r   ú¡/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/pypykatz/lsadecryptor/packages/dpapi/decryptor.pyÚ__init__   s
   
zDpapiCredential.__init__c                 C   s:   i }| j |d< | j|d< | j|d< | j|d< | j|d< |S )Nr   r   r   r	   r   )r   r   r   r	   r   ©r   Útr   r   r   Úto_dict   s   




zDpapiCredential.to_dictc                 C   s   t  |  ¡ ¡S ©N)ÚjsonÚdumpsr   r
   r   r   r   Úto_json   s   zDpapiCredential.to_jsonc                 C   sF   d| j  }|d| j  7 }|d| j 7 }|d| j 7 }|d| j 7 }|S )Nz	== DPAPI [%x]==
z
		luid %s
z		key_guid %s
z		masterkey %s
z		sha1_masterkey %s
)r   r   r   r	   r   r   r   r   Ú__str__   s   
zDpapiCredential.__str__N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   r   r      s
    	r   c                       s4   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Z‡  ZS )	ÚDpapiDecryptorc                    s"   t ƒ  d|||¡ || _g | _d S )NÚDpapi)Úsuperr   Údecryptor_templateÚcredentials)r   Úreaderr   Úlsa_decryptorÚsysinfo©Ú	__class__r   r   r   (   s   
zDpapiDecryptor.__init__c                 C   s8   |   || jj¡}| j || jj ¡}| j |¡}||fS r   )Úfind_signaturer   Ú	signaturer   Úget_ptr_with_offsetÚfirst_entry_offsetÚget_ptr)r   Ú
modulenameÚpositionÚptr_entry_locÚ	ptr_entryr   r   r   Úfind_first_entry.   s   zDpapiDecryptor.find_first_entryc                 C   s|   |j d u rd S |r:|jdkr<| j|j dd�\}}t |¡ ¡ }tƒ }|j|_|j	|_
| ¡ |_||_| j |¡ d S d S d S )Nr   T)Úbytes_expected)ÚkeyÚkeySizeÚdecrypt_passwordÚhashlibÚsha1Ú	hexdigestr   ÚLogonIdr   ÚKeyUidr   Úhexr   r	   r   Úappend)r   Údpapi_entryÚdec_masterkeyÚraw_decÚsha_masterkeyÚcr   r   r   Ú	add_entry4   s   

÷zDpapiDecryptor.add_entryc                 C   s|   dD ]9}z	|   |¡\}}W n ty& } z|  d| ¡ W Y d }~qd }~ww | j |¡ | j | j¡}|  || j¡ qd S )N)z
lsasrv.dllzdpapisrv.dllz"Failed to find structs! Reason: %s)	r-   Ú	ExceptionÚlogr   Úmover   Ú
list_entryÚ	walk_listr>   )r   r)   Úentry_ptr_valueÚentry_ptr_locÚeÚ	entry_ptrr   r   r   ÚstartC   s   €þøzDpapiDecryptor.start)r   r   r   r   r-   r>   rH   Ú__classcell__r   r   r"   r   r   '   s
    r   )Úior   r2   Ú%pypykatz.lsadecryptor.package_commonsr   r   r   r   r   r   r   Ú<module>   s   