o
    Žõ±jþ  ã                   @   s¢   d dl mZmZmZmZmZmZmZmZm	Z	m
Z
mZ e
ZeZeZe	eƒZeZddd„ZG dd„ deƒZe	eƒZdd	d
„ZedkrOe d¡ZeeƒZeeƒ dS dS )é    )ÚbyrefÚ	StructureÚc_charÚc_bufferÚ	string_atÚwindllÚc_void_pÚc_uint32ÚPOINTERÚ	c_wchar_pÚWinErrorN© c                 C   s   | st ƒ ‚| S )z·
    Error checking for most Win32 API calls.

    The function is assumed to return an integer, which is C{0} on error.
    In that case the C{WindowsError} exception is raised.
    )r   )ÚresultÚfuncÚ	argumentsr   r   ú”/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/pypykatz/dpapi/functiondefs/dpapi.pyÚRaiseIfZero	   s   r   c                   @   s    e Zd ZdefdeeƒfgZdS )Ú	DATA_BLOBÚcbDataÚpbDataN)Ú__name__Ú
__module__Ú__qualname__ÚDWORDr
   r   Ú_fields_r   r   r   r   r      s    
þr   Fc           
   	   C   s¾   t jj}tttttttg|_t|_	t
|_t| t| ƒƒ}tt| ƒ|ƒ}tƒ }|d urHt|t|ƒƒ}tt|ƒ|ƒ}|t|ƒd t|ƒd d dt|ƒƒ n|t|ƒd d d ddt|ƒƒ t|j|jƒ}	|	S )Nr   )r   Úcrypt32ÚCryptUnprotectDataÚ
PDATA_BLOBÚLPWSTRÚPVOIDr   ÚargtypesÚboolÚrestyper   Úerrcheckr   Úlenr   r   r   r   r   )
Úenc_blobÚentropyÚ	to_promptÚ_CryptUnprotectDataÚ	buffer_inÚblob_inÚblob_outÚbuffer_entropyÚblob_entropyÚdec_datar   r   r   r      s   "r   Ú__main__ÁD  01000000d08c9ddf0115d1118c7a00c04fc297eb010000005f3d1f4bf6f35b469eb9719205c9c1160000000002000000000003660000c000000010000000ef8ad11a2c0a0fa867c4bc8ea535c3b10000000004800000a000000010000000beb718a641f76dff7fb9f6edb0da69061800000068cdb387e412d6e097cd7db04af8638247b9b4987cd5048714000000bb10d25466234b082ac4052360ed3d57e8951367)Nr   )NF)Úctypesr   r   r   r   r   r   r   r	   r
   r   r   r   ÚLPVOIDr   ÚPPVOIDr   r   r   r   r   r   ÚbytesÚfromhexÚenc_datar.   Úprintr   r   r   r   Ú<module>   s   4 


ý