o
    Žõ±jF	  ã                   @   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/alsadecryptor/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                 Ã   sL   �|   || jj¡I d H }| j || jj ¡I d H }| j |¡I d H }||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                 Ã   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                 Ã   s˜   �dD ]F}z|   |¡I d H \}}W n ty* } z|  d| ¡ W Y d }~qd }~ww | j |¡I d H  | jj | j¡I d H }|  || j	¡I d H  qd S )N)z
lsasrv.dllzdpapisrv.dllz"Failed to find structs! Reason: %s)
r-   Ú	ExceptionÚlogr   Úmover   Ú
list_entryÚloadÚ	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>   rI   Ú__classcell__r   r   r"   r   r   '   s
    r   )Úior   r2   Ú&pypykatz.alsadecryptor.package_commonsr   r   r   r   r   r   r   Ú<module>   s   