o
    Žõ±j/  ã                   @   s8   d dl Z d dlmZmZ G dd„ dƒZG dd„ dƒZdS )é    N)ÚIteratorÚListc                   @   s   e Zd Zdd„ ZdS )ÚNGCProtectorc                 C   s   d | _ d | _d | _d | _d S ©N)ÚsidÚpathÚproviderÚguid©Úself© r   ú�/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/pypykatz/dpapi/finders/ngc.pyÚ__init__   s   
zNGCProtector.__init__N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r      s    r   c                   @   sb   e Zd Zdd„ Zdee fdd„Zeddee	j
B defd	d
„ƒZeddee	j
B defdd„ƒZdS )ÚNGCProtectorFinderc                 C   s   g d¢| _ g | _d S )N)ÚServiceProfilesÚLocalServiceÚAppDataÚLocalÚ	MicrosoftÚNgc)ÚstartdirÚentriesr
   r   r   r   r      s   

zNGCProtectorFinder.__init__Úreturnc                 C   s
   t | jƒS r   )Úiterr   r
   r   r   r   Ú__iter__   s   
zNGCProtectorFinder.__iter__TÚwin_dirÚraise_errorc                 C   sl   t | tƒrt | ¡ ¡ } |  ¡ st| › d�ƒ‚| }tƒ jD ]}|| }| ¡ s.t|› d�ƒ‚qtj	||d�S )Nú is not a directoryz does not exist)r   )
Ú
isinstanceÚstrÚpathlibÚPathÚabsoluteÚis_dirÚ
ValueErrorr   r   Úfrom_dir)r   r   Úngc_dirÚ	directoryr   r   r   Úfrom_windir   s   
ÿzNGCProtectorFinder.from_windirr)   c           
      C   sP  t | tƒrt | ¡ ¡ } |  ¡ s|rt| › d�ƒ‚tƒ S tƒ }|  ¡ D ]‚}| ¡ s*q#|j	 
d¡r¥|j	 d¡r¥| | d }| | d d }| ¡ sPtd|› �ƒ q#| ¡ s\td|› �ƒ q#| d	¡ d
¡}|d }| ¡ sttd|› �ƒ q#|d }| ¡ s„td|› �ƒ q#tƒ }	||	_| d	¡ d
¡|	_| d	¡ d
¡|	_||	_|j |	¡ q#|S )Nr    Ú{Ú}z1.datÚ
ProtectorsÚ1zNGC missing SID file at: z$NGC missing Protector directory at: z	utf-16-leú zNGC missing Protector file at: z2.datzNGC missing GUID file at: )r!   r"   r#   r$   r%   r&   r'   r   ÚiterdirÚnameÚ
startswithÚendswithÚexistsÚprintÚ	read_textÚstripr   r   r   r	   r   r   Úappend)
r)   r   Úfinderr*   Úsid_file_pathÚfpdr   ÚpfpÚgfpÚ	protectorr   r   r   r(   $   sH   
€zNGCProtectorFinder.from_dirN)T)r   r   r   r   r   r   r   Ústaticmethodr"   r#   r$   Úboolr+   r(   r   r   r   r   r      s     r   )r#   Útypingr   r   r   r   r   r   r   r   Ú<module>   s    