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þ