o
    j                     @   s~   d dl Z d dlmZ d dlmZ d dlmZ d dlT d dlT d dl	T d dl
T G dd dZedkr=e Zeee dS dS )	    N)AIOWinRegHive)logger)UniversalEncoder)*c                   @   sP   e Zd ZdZdd Zdd ZdddZd	d
 Zdd Zdd Z	e
dddZdS )OffineRegistryz
	This class represents an offline registry
	You will need to set at least the SYSTEM hive (to get bootkey)
	In case you have the SAM and/or SECURITY hives, it will parse them for the stored credentials/secrets as well.
	c                 C   s4   d | _ d | _d | _d | _d | _d | _d | _d | _d S N)sam_hivesecurity_hivesystem_hivesoftware_hivesystemsamsecuritysoftwareself r   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/pypykatz/registry/aoffline_parser.py__init__   s   
zOffineRegistry.__init__c                    s   t | j| _| j I d H  | j I d H }| jr)t| j|| _| j I d H  | jr=t	| j|| j| _
| j
 I d H  | jrQt| j|| _| j I d H  d S d S r   )SYSTEMr
   r   get_secretsget_bootkeyr   SAMr   r	   SECURITYr   r   SOFTWAREr   get_default_logon)r   bootkeyr   r   r   r   #   s   zOffineRegistry.get_secretsFc                 C   sj   t |ddd$}|dkr|t|  n||   W d    d S W d    d S 1 s.w   Y  d S )Na )newlineF)openwritestrto_json)r   	file_pathjson_formatfr   r   r   to_file4   s   "zOffineRegistry.to_filec                 C   s   t j|  tdddS )N   T)clsindent	sort_keys)jsondumpsto_dictr   r   r   r   r   r#   ;   s   zOffineRegistry.to_jsonc                 C   sR   i }| j  |d< | jr| j |d< | jr| j |d< | jr'| j |d< |S )Nr   r   r   r   )r   r.   r   r   r   r   tr   r   r   r.   >   s   zOffineRegistry.to_dictc                 C   sJ   t | j}| jr|t | j7 }| jr|t | j7 }| jr#|t | j7 }|S r   )r"   r   r   r   r   r/   r   r   r   __str__J   s   
zOffineRegistry.__str__Nc                    s   t  }t| |_|j I d H  |d ur"t||_|j I d H  |d ur3t||_|j I d H  |d urDt||_|j I d H  | I d H  |S r   )r   r   r
   setupr   r	   r   r   )system_reader
sam_readersecurity_readersoftware_readerpor   r   r   from_async_readerT   s   



z OffineRegistry.from_async_reader)F)NNN)__name__
__module____qualname____doc__r   r   r'   r#   r.   r1   staticmethodr8   r   r   r   r   r      s    

r   __main__)r,   aiowinreg.ahiver   pypykatz.registryr   pypykatz.commons.commonr   pypykatz.registry.sam.asam$pypykatz.registry.security.asecurity pypykatz.registry.system.asystem$pypykatz.registry.software.asoftwarer   r9   from_live_systemr7   printr"   r   r   r   r   <module>   s   Z