o
    Žõ±jÔ  ã                   @   s\   d dl Z d dlZd dlmZ G dd„ dƒZG dd„ dƒZG dd„ dejƒZG d	d
„ d
ƒZdS )é    N)Ú
DPAPI_BLOBc                   @   s8   e Zd ZdZdd„ Zedd„ ƒZedd„ ƒZdd	„ Zd
S )ÚCredentialFileú
	c                 C   ó"   d | _ d | _d | _d | _d | _d S ©N)ÚversionÚsizeÚunkÚdataÚblob©Úself© r   ú›/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/pypykatz/dpapi/structures/credentialfile.pyÚ__init__   s
   
zCredentialFile.__init__c                 C   ó   t  t | ¡¡S r   )r   Úfrom_bufferÚioÚBytesIO©r
   r   r   r   Ú
from_bytes   ó   zCredentialFile.from_bytesc                 C   sn   t ƒ }tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_|  |j¡|_t |j¡|_	|S )Né   ÚlittleF©Úsigned)
r   Úintr   Úreadr   r   r	   r
   r   r   ©ÚbuffÚskr   r   r   r      s   zCredentialFile.from_bufferc                 C   ón   d}| j D ]/}t| j | tƒr't| j | ƒD ]\}}|d||t|ƒf 7 }qq|d|t| j | ƒf 7 }q|S )Nz== CredentialFile ==
ú   %s: %s: %sú	%s: %s 
©Ú__dict__Ú
isinstanceÚlistÚ	enumerateÚstr©r   ÚtÚkÚiÚitemr   r   r   Ú__str__&   ó   
ÿzCredentialFile.__str__N)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ústaticmethodr   r   r/   r   r   r   r   r      s    	

	r   c                   @   ó@   e Zd ZdZdd„ Zedd„ ƒZedd„ ƒZdd	„ Zd
d„ Z	dS )ÚCREDENTIAL_ATTRIBUTEr   c                 C   r   r   )ÚflagsÚkeyword_lengthÚkeywordÚdata_lengthr
   r   r   r   r   r   3   s
   
zCREDENTIAL_ATTRIBUTE.__init__c                 C   r   r   )r7   r   r   r   r   r   r   r   r   :   r   zCREDENTIAL_ATTRIBUTE.from_bytesc                 C   sŠ   t ƒ }tj|  d¡ddd�|_tj|  d¡ddd�|_|  |j¡|_z	|j d¡|_W n   Y tj|  d¡ddd�|_|  |j¡|_	|S )Nr   r   Fr   ú	utf-16-le)
r7   r   r   r   r8   r9   r:   Údecoder;   r
   r   r   r   r   r   >   s   z CREDENTIAL_ATTRIBUTE.from_bufferc                 C   sH   d}t | jƒdkr|dt| jƒ 7 }t | jƒdkr"|dt| jƒ 7 }|S )NÚ r   zkeyword: %s
z
data: %s
)Úlenr:   r)   r
   )r   r+   r   r   r   Úto_textL   s   zCREDENTIAL_ATTRIBUTE.to_textc                 C   r!   )Nz== CREDENTIAL_ATTRIBUTE ==
r"   r#   r$   r*   r   r   r   r/   T   r0   zCREDENTIAL_ATTRIBUTE.__str__N©
r1   r2   r3   r4   r   r5   r   r   r@   r/   r   r   r   r   r7   0   s    

r7   c                   @   s(   e Zd ZdZdZdZdZdZdZdZ	dS )	ÚCREDBLOBTYPEr   é   é   é   r   é   é   N)
r1   r2   r3   ÚUNKNOWNÚGENERICÚDOMAIN_PASSWORDÚDOMAIN_CERTIFICATEÚDOMAIN_VISIBLE_PASSWORDÚGENERIC_CERTIFICATEÚDOMAIN_EXTENDEDr   r   r   r   rB   ^   s    rB   c                   @   r6   )ÚCREDENTIAL_BLOBr   c                 C   s    d | _ d | _d | _d | _d | _d | _d | _d | _d | _d | _	d | _
d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _d | _g | _d | _d S r   )r8   r   Úunk0ÚtypeÚflags2Úlast_writtenÚunk1ÚpersistÚattributes_countÚunk2Útarget_lengthÚtargetÚtarget_alias_lengthÚtarget_aliasÚdescription_lengthÚdescriptionÚunknown3_lengthÚunknown3_rawÚunknown3Úusername_lengthÚusernameÚunknown4_lengthÚunknown4_rawÚunknown4Ú
attributesÚtype_prettyr   r   r   r   r   j   s4   
zCREDENTIAL_BLOB.__init__c                 C   r   r   )rO   r   r   r   r   r   r   r   r   ‰   r   zCREDENTIAL_BLOB.from_bytesc                 C   s>  t ƒ }tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_zt|jƒ|_	W n   tj
|_	Y tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_|  |j¡|_|jdkr²z	|j d¡|_W n   Y tj|  d¡ddd�|_|  |j¡|_|jdkrØz	|j d¡|_W n   Y tj|  d¡ddd�|_|  |j¡|_|jdkrþz	|j d¡|_W n   Y tj|  d¡ddd�|_|j�r*|  |j¡|_z	|j d¡|_W n   |j ¡ |_Y nd|_d	|_tj|  d¡ddd�|_|  |j¡|_|jdk�rWz	|j d¡|_W n   Y tj|  d¡ddd�|_|j�rƒ|  |j¡|_z	|j d¡|_ W n   |j ¡ |_ Y nd|_d	|_ t!|jƒD ]}t" #| ¡}|j$ %|¡ �qŽ|S )
Nr   r   Fr   é   r   r<   ó    r>   )&rO   r   r   r   r8   r   rP   rQ   rB   rg   rH   rR   rS   rT   rU   rV   rW   rX   rY   r=   rZ   r[   r\   r]   r^   r_   r`   Úhexra   rb   rc   rd   re   Úranger7   r   rf   Úappend)r   r    Ú_Úattrr   r   r   r   �   s‚   




zCREDENTIAL_BLOB.from_bufferc                 C   s  d}|d| j j| jf 7 }|d| j 7 }t| jƒdkr$|dt| jƒ 7 }t| jƒdkr4|dt| jƒ 7 }t| jƒdkrD|dt| jƒ 7 }t| j	ƒdkrT|dt| j	ƒ 7 }t| j
ƒdkrd|d	t| j
ƒ 7 }t| jƒdkrt|d
t| jƒ 7 }| jD ]}|d7 }|| ¡ 7 }qw|S )Nr>   ztype : %s (%s)
zlast_written : %s
r   ztarget : %s
ztarget_alias : %s
zdescription : %s
zunknown3 : %s
zusername : %s
zunknown4 : %s
zATTRIBUTE
)rg   ÚnamerQ   rS   r?   rY   r)   r[   r]   r`   rb   re   rf   r@   )r   r+   rn   r   r   r   r@   Õ   s&   
zCREDENTIAL_BLOB.to_textc                 C   r!   )Nz== CREDENTIAL_BLOB ==
r"   r#   r$   r*   r   r   r   r/   ê   r0   zCREDENTIAL_BLOB.__str__NrA   r   r   r   r   rO   g   s    

GrO   )	r   ÚenumÚpypykatz.dpapi.structures.blobr   r   r7   ÚEnumrB   rO   r   r   r   r   Ú<module>   s   $.	